一变量梯度下降的线性回归

问题描述

我想问这个方程式

gradient descent equation

可以这样写成八度音

predictions = X * theta;
delta = (1/m) * X' * (predictions - y);
theta = theta - alpha * delta; 

我不了解转置从何而来以及如何通过这种方式将等式转换为ve?

解决方法

标量积X.Y在数学上是sum (xi * yi),当X' * YX是向量时,可以八度表示为Y

还有其他方法可以在八度中编写标量积,请参见 https://octave.sourceforge.io/octave/function/dot.html

,

这个问题似乎是一个例子,

X     = randn(m,k);   % m 'input' horizontal-vectors of dimensionality k
y     = randn(m,n);   % m 'target' horizontal-vectors of dimensionality n

theta = randn(k,n);   % a (right) transformation from k to n dimensional
                       % horizontal-vectors

h     = X * theta;     % creates m rows of n-dimensional horizontal vectors

下面的代码怎么样

delta = zeros(k,n)
for j = 1 : k           % iterating over all dimensions of the input
    for l = 1 : n       % iterating over all dimensions of the output

        for i = 1 : m   % iterating over all observations for that j,l pair
            delta(j,l) += (1/m) * (h(i,l) - y(i,l)) * x(i,j);
        end

        theta(j,l) = theta(j,l) - alpha * delta(j,l);

    end
end

可以向量化为:

  h      = X * theta ;
  delta  = (1/ m) * X' * (h - y);
  theta  = theta - alpha * delta; 

为确认这种向量化公式是否有意义,始终有助于指出(例如,在每行下方)矩阵/向量化运算中涉及的对象的尺寸:

  h      = X      * theta ;
% [m,n]   [m,k]   [k,n]

  delta  = (1/ m) * X'     * (h - y);
% [k,n]   [1,1]   [k,m]   [m,n]

  theta  = theta - alpha  * delta; 
% [k,n]   [k,n]

希望现在它们变得等效了。

X' * D计算(其中D = predictions - y),您可以看到: 用X'的第一行和D的第一列执行矩阵乘法,等于对所有 m 个观测值的k=1n=1求和,并将其结果在矩阵输出中的位置[k = 1,n = 1]。然后,沿着D列移动并仍然乘以X'的第一行,您会看到我们只是沿着D中的n个维移动,并将结果相应地放置在输出中。类似地,沿着X'的行移动,沿着X'的k个维度移动,对该D中的所有n执行相同的过程,并相应地放置结果,直到完成矩阵乘法X的所有行和D的所有列。

如果遵循上述逻辑,您将看到所涉及的求和与for循环公式完全相同,但是我们设法避免使用for循环,而改为使用矩阵运算。