2
我開始研究機器學習並陷入一個問題。用於線性迴歸的梯度下降花費太長的時間來收斂
我的這種方法(在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.我試圖增加「學習率」變量,但在這種情況下,算法發散並且數量龐大。
除了'while(我<1500000)'''你沒有別的停止條件'所以當然這將運行在'1500000'迭代,因爲你沒有告訴它不要...... – Dan
謝謝。看起來我並沒有被問到。我的意思是爲什麼在更少的迭代中,它不會收斂到確切的解決方案(或非常接近它)。例如像一個的Python爲2000 – Alex
發佈Python代碼比較... – Dan