1 回答

TA貢獻1793條經(jīng)驗 獲得超6個贊
看起來你的程序應(yīng)該可以工作。但是,您的學(xué)習(xí)率可能太小了。請記住,學(xué)習(xí)率是您減少成本函數(shù)的步驟的大小。如果一個學(xué)習(xí)率太小,它會沿著成本曲線的下移太慢,并且需要很長時間才能達到收斂(需要很大的迭代次數(shù))。但是,如果學(xué)習(xí)率太大,那么就會出現(xiàn)發(fā)散的問題。選擇正確的學(xué)習(xí)率和迭代次數(shù)(換句話說,調(diào)整超參數(shù))與其說是科學(xué),不如說是一門藝術(shù)。你應(yīng)該嘗試不同的學(xué)習(xí)率。
我創(chuàng)建了自己的數(shù)據(jù)集和隨機生成的數(shù)據(jù)(其中(m1, m2, m3, b) = (10, 5, 4, 2))并運行了您的代碼:
import pandas as pd
import numpy as np
x1 = np.random.rand(100,1)
x2 = np.random.rand(100,1)
x3 = np.random.rand(100,1)
y = 2 + 10 * x1 + 5 * x2 + 4 * x3 + 2 * np.random.randn(100,1)
df = pd.DataFrame(np.c_[y,x1,x2,x3],columns=['y','x1','x2','x3'])
#df.head()
# y x1 x2 x3
# 0 11.970573 0.785165 0.012989 0.634274
# 1 19.980349 0.919672 0.971063 0.752341
# 2 2.884538 0.170164 0.991058 0.003270
# 3 8.437686 0.474261 0.326746 0.653011
# 4 14.026173 0.509091 0.921010 0.375524
以 的學(xué)習(xí)率運行您的算法會0.0000001產(chǎn)生以下結(jié)果:
(m1, m2, m3, b) = (0.001, 0.001, 0.001, 0.002)
以 的學(xué)習(xí)率運行您的算法會.1產(chǎn)生以下結(jié)果:
(m1, m2, m3, b) = (9.382, 4.841, 4.117, 2.485)
請注意,當(dāng)學(xué)習(xí)率為 時0.0000001,您的系數(shù)與它們開始時的 ( 0)沒有太大區(qū)別。就像我之前說的,小學(xué)習(xí)率使它成為這樣,所以我們以太小的速率改變系數(shù),因為我們以超小步長向下移動成本函數(shù)。
我添加了一張圖片來幫助可視化選擇步長。請注意,第一張圖片使用了較小的學(xué)習(xí)率,第二張圖片使用了較大的學(xué)習(xí)率。
小學(xué)習(xí)率:
大學(xué)習(xí)率:
添加回答
舉報