2016-09-13 125 views
2

我一直在試圖做我自己的一個簡單的線性迴歸算法的實現,但我有一些梯度下降的麻煩。python線性迴歸實現

這裏是我如何編碼它:

def gradientDescentVector(data, alpha, iterations): 
    a = 0.0 
    b = 0.0 
    X = data[:,0] 
    y = data[:,1] 
    m = data.shape[0] 
    it = np.ones(shape=(m,2)) 
    for i in range(iterations): 
     predictions = X.dot(a).flatten() + b 

     errors_b = (predictions - y) 
     errors_a = (predictions - y) * X 

     a = a - alpha * (1.0/m) * errors_a.sum() 
     b = b - alpha * (1.0/m) * errors_b.sum() 
    return a, b 

現在,我知道這不會有更多的變數很好地擴展,但我只是用簡單的版本首先嚐試,並從那裏跟進。

我下面從機器在coursera學習課程的梯度下降算法:

enter image description here

但經過〜90次迭代我得到無限值(在特定的數據集),並且沒有現在已經能夠把我的頭包裹起來了。

我已經嘗試迭代每個值之前,我瞭解numpy的廣播,並獲得相同的結果。

如果任何人都可以對這裏可能存在的問題有所瞭解,那就太好了。

回答

1

很明顯,參數與最優參數不一致。一種可能的原因可能是您對學習率(「alpha」)使用的值太大。嘗試降低學習率。這是一條經驗法則。始終從0.001這樣的小數值開始。然後嘗試提高學習率,學習率比以前提高三倍。如果它給出更少的MSE錯誤(或者你正在使用的任何錯誤函數),那麼它很好。如果不嘗試取0.001和0.003之間的值。接下來,如果後者成立,那麼遞歸地嘗試,直到達到令人滿意的MSE。

+0

我已經試過0.001,它不工作,但我再次嘗試以更低的學習率,0.0000001,它開始正常工作,謝謝你! 我沒有使用任何類型的錯誤函數,也許我會試着看看它後。 – msk