我开始学习机器学习并坚持一个问题。
我对这种方法的实现(在MATLAB和C ++中)都集中在1 500 000次迭代中,我无法理解为什么。我找到了方法implementation in Python,算法在2000次迭代中收敛。在融合下,我明白他给出了几乎相同的答案,显然是正确的方法。
不会以任何方式处理初步数据。你能解释一下,这是正常的迭代次数,还是我在算法中犯了错误?
使用的成本函数及其偏导数:
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。我试图增加“学习率”变量,但在这种情况下,算法会发生变化,数量巨大。
答案 0 :(得分:2)
gradient descent取决于三件事:
[curT0,curT1]
(开始搜索的起点)如果你从很远的地方开始并采取一些小步骤,你将需要多次迭代才能达到解决方案。如果步骤太大,您可以通过踩它来错过解决方案。此外,搜索可能会陷入局部最小值,具体取决于您在搜索空间中的起点..
您还可以指定其他停止条件,例如公差(如果超过则会停止迭代的阈值)。您当前的代码将始终循环最大迭代次数(1500000)。