线性回归的梯度下降需要太长时间才能收敛

时间:2016-03-31 12:48:35

标签: matlab machine-learning linear-regression gradient-descent

我开始学习机器学习并坚持一个问题。

我对这种方法的实现(在MATLAB和C ++中)都集中在1 500 000次迭代中,我无法理解为什么。我找到了方法implementation in Python,算法在2000次迭代中收敛。在融合下,我明白他给出了几乎相同的答案,显然是正确的方法。

不会以任何方式处理初步数据。你能解释一下,这是正常的迭代次数,还是我在算法中犯了错误?

使用的成本函数及其偏导数:

cost

MATLAB代码

%y=t0+t1*x
learningRate = 0.0001;
curT0 = 0;
curT1 = 0;
i     = 1;

while (i < 1500000)
    derT0 = 0;
    derT1 = 0;
    for j=1:1:N
         derT0 = derT0 + (-1/N)*(Y(j) - (curT1*X(j) + curT0));
         derT1 = derT1 + (-1/N)*X(j)*(Y(j) - (curT1*X(j) + curT0));
    end
    curT0 = curT0 - (learningRate*derT0);
    curT1 = curT1 - (learningRate*derT1);
    %sprintf('Iteration %d, t0=%f, t1=%f',i,curT0,curT1)
    i = i+1;
end

P.S。我试图增加“学习率”变量,但在这种情况下,算法会发生变化,数量巨大。

1 个答案:

答案 0 :(得分:2)

gradient descent取决于三件事:

  • 初始解决方案[curT0,curT1](开始搜索的起点)
  • 学习率(在梯度方向上采取的步骤有多大)
  • 迭代次数

如果你从很远的地方开始并采取一些小步骤,你将需要多次迭代才能达到解决方案。如果步骤太大,您可以通过踩它来错过解决方案。此外,搜索可能会陷入局部最小值,具体取决于您在搜索空间中的起点..

您还可以指定其他停止条件,例如公差(如果超过则会停止迭代的阈值)。您当前的代码将始终循环最大迭代次数(1500000)。