1. 程式人生 > >機器學習(一)梯度下降算法的實現及過程分析

機器學習(一)梯度下降算法的實現及過程分析

回歸 vnc 分布 AC HA 向量 med mar size

機器學習(一)梯度下降算法

因為算法最好能應用到實際問題中才會讓讀者感到它的真實的用處,因此首先我來描述一個實際問題(梯度下降算法用以幫助解決該問題):給定一個指定的數據集,比如由若幹某一地區的房屋面積和房屋價格這樣的數據對(area, price)組成的集合(吳恩達老師的課程是啟蒙課程所以舉該例子),我的目標是通過一個學習算法得到一個預測房價和房屋面積之間的函數,然後給定一個新的房屋面積,用這個函數來預測房價。如下圖所示:

技術分享圖片

我的解決思路大致如下:

1、我找了一個很小的數據集,有兩個特征X1,X2,一個輸出Y;

技術分享圖片

2、根據我的數據假設我的預測函數是一個線性函數 h(x):

技術分享圖片

(為什麽是線性函數一方面是因為通過我的數據點的分布可以預測我的預測函數模型,另一方面我希望通過一個不是很復雜的函數來幫助我先理解到梯度下降算法到底做了什麽,這算一個線性回歸問題。)

3、此時我的目標是通過求得函數中的參數來得到預測函數 h (x), 合理的預測函數應該和實際值的差值越小越好,因此如果我能使預測函數值和實際值的差值越小那麽說明我的預測函數越好,因此通過求使下面的 cost function J(Θ) 取得最小值的參數組合便能得到我的預測函數 h(x);

技術分享圖片

4、如何求 J(Θ) 的最小值呢,就是應用階梯下降算法。對於每一個參數都先設置一個初始點,然後按照下面的原則不斷的進行值的更新:

技術分享圖片

從表達式可以看出,通過對J(Θ) 求導,從Θ的初始點開始,相當於每次都朝著一個下降最快的方向更新值,其中 α 是 learning rate, 相當於求導選定下降方向,learning rate 決定下降步長, 從算法實現的結果你會發現不一樣的 α 會產生不一樣的結果,合適的步長才能得到最好的結果。通過將求導結果代入後得到:

技術分享圖片

因此接下來我們要做的就是對每個參數都進行叠代更新,直至收斂得到局部最優解:

技術分享圖片

接下來就是算法的實現了,通過實現得到參數的值然後得到預測函數最後進行預測。

這是我實現這一小塊的算法截圖:

技術分享圖片

其中會涉及到一些向量的計算,給定數據集以後將輸入 X 和輸出 Y 都用向量表示(這可得好好兒學學!)另外其中的 loss 是用來記錄每次叠代後得到的預測函數和實際值的差值,gradient 是用來記錄每次下降的梯度,這樣能更直觀的看到這個算法究竟在幹啥!值得註意的還有叠代的次數 maxIteration , 它和 α 一起可以得到參數的最優解。

這是我的測試數據集,輸入的是X1和X2:

技術分享圖片

下面是我用不同的 α 值和 maxIteration 值測試後的結果:

α = 0.05,maxIteration = 10;(因為我這次輸出的輔助信息多,所以只選了很少的叠代次數,給大家看一下過程)

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

你會發現,每次的loss值都在變大,參數值也變得越來越離譜,預測結果更是不敢恭維,僅僅10次就這麽大了。我又冒死試了一下叠代1000次只輸出預測值,別的信息不輸出:

技術分享圖片

結果就是 nan。

然後我改變了一下我的 α 值,α =0.001 叠代10次輸出一些輔助信息:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

你會清楚的看見 loss 在逐漸變小,gradient 下降的很合理,結果也令人比較滿意。叠代1000次看看結果吧:

技術分享圖片

嗯,可以接受,如果仔細的看看 上上.....圖,你會發現 loss 減小的速度很慢,這很有可能證明你的 α 值 太小了,所以逐漸增大 α 值 然後輸出結果:

α = 0.005 ,maxIteration = 1000

技術分享圖片

α = 0.01 ,maxIteration = 1000

技術分享圖片

α = 0.01 ,maxIteration = 2000

技術分享圖片

α = 0.01 ,maxIteration = 5000

技術分享圖片

到這就發現隨著叠代次數的增加,輸出已經不再改變了,這你應該能證明什麽叫收斂了!

對於大牛們來說這太小兒科了,但是對於新手上路來說,還是很開心的,也覺得很神奇。

最後如果您有什麽建議的話我非常樂意接受,也希望可以一起學習!

(奧對,如果你也想要和我一起學習算法、機器學習的內容,如果你也有奇思妙想的話,歡迎掃描下面的二維碼關註我的公眾號“說瘋話的小聾瞎”! 嘻嘻!)

註:原始數據集和測試數據集來自https://www.jianshu.com/p/9bf3017e2487#

技術分享圖片

微信掃一掃
關註該公眾號

機器學習(一)梯度下降算法的實現及過程分析