理解線性迴歸

線性迴歸是利用數理統計迴歸分析,來確定變量之間的依賴關係的統計分析方法。如何理解呢,其實就是要尋找數據規律,以便根據數據規律,對新的變量條件進行結果推斷。放到數學中來,就是把這個規律看成一個函數,要想辦法求解出這個函數的各個參數。可以想像解方程,只不過這裏要找的不是方程中的x、y、z,而是尋找合適的係數。

201803101418.jpg

上圖中有許多的二維數據點,通過觀察發現這些點貌似是有一些規律的,通過描繪藍色直線可以很直接的觀察到,這些數據點圍繞在這條直線的周圍,並沿着直線的方向進行延伸。這條直線其實就是我們要找的規律。那這條直接怎麼樣來找呢?找到的直線是不是最好的呢?如果這些點到直線的距離之和如果最小,那這條直接應該就是我們期望的直線(這是svm的思路,尋找一個分割面,能讓所有點到分割面距離和最小),但這裏我們換一種思路,如果所有數據點的y值與x落在直線上的y值的差值距離的和最小,這條直線也應該是我們期望的。

假設這條直線的函數爲 f(x) = y = a * x + b , 其中a和b就是我們要尋找到係數,x和y分別是數據點的橫座標值和縱座標值。假設這裏有n個數據點,第k個點的y值就是yk,上面描述的最小距離和就可以表示爲 |f(xk) - yk|,也可以直接用(f(xk) - yk)2替代(L2),這樣不用考慮絕對值的正負區間情況。那麼現在就是要找一個合適的a和b,讓所有點的(f(xk) - yk)2的和最小。需要注意的是,這裏的x和y都是已經知道的數據點,而係數是未知數據。我們爲所有點的(f(xk) - yk)2的和命名爲J函數,它的未知變量其實就是a、b,最後表示爲J(a,b),在多維的情況下可以用一個向量θ表示所有的參數,寫成J(θ)。


201803102206.jpg


201803102221.jpg

現在就是想辦法求這個係數的函數的最小值,我們能想像J會是一個有谷底的圖形,而谷底就是斜度接近或者是0的地方(不能排除有的時候會有多個谷底,你只找到了一個其中一個,但不是最底的那個,就所謂局部最優和全局最優的區別)。

201803102248.jpg

斜度的計算可以對J(a,b)進行求導,爲方便可以對a和b兩個維度分別進行偏導,也就是分別看a和b維度的斜度。可以想像自己站在谷頂某處,要下到谷底,可以向左下一段,再向右下一段,再交替着一直走下山。

 

201803110846.jpg
對求導不熟悉的可以參考上圖,就是在某a點求J(a)的極限,也就是微增量ΔJ / 微增量Δa。 我們省略了求導後得到的係數2,這不影響找最小值。
201803102258.jpg

201803102258.jpg

這裏其實理論上可以命J’函數爲0,帶入各數據點來求解a、b,但實際處理時數據噪音以及量級和維度的量級,不方便求解。這裏就可以用梯度下降算法了,這裏我們將用隨機梯度下降方法,在一組簡單的數據上,手工進行下降的訓練。梯度下降是一種小步逐步逼近最低點的方法,一開始先隨機選一個a作爲起點,然後選定一個合適的步進量α,用α * J(a)’作爲a方向上一次移動的長度,那到底是向左還是向右移動呢?通過觀察,如果是在最低點的右側,斜度是正值,我們要逼近最低點,應該是向左走;如果是在最低點的左側,斜度是負值,則要向右走,所以應該用a - α * J(a)’,這樣就可以向最低點方向走了。α的值一定要選的合適,太小會讓逼近的過程太久,太大會出現老是走過了的情況。最後得到了以下公式。b維度的也是類似的。再接下來就可以將數據點的x、y值帶入到公式,循環執行,直到a、b都收縮到趨於穩定的狀態,也就是α * J(a)’和α * J(b)’已經小於設定的閾值。

 


201803111133.jpg


201803111133.jpg  

 

這裏我們來一些數據,假設我們有這麼一組x、y的數據,y有一些是未知的值,我們需要推測它們是什麼值。從已知的值我們很容易知道y = 2x - 1,現在就用隨機梯度進行a、b的尋找。

 

201803110957.jpg
隨機梯度下降不需要每次用全量的數據,每次隨機取一個或一部分進行訓練,可以減少運算快速達到結果。因爲每次只取一個數據點,所以上面的函數不再需要求和,a、b的推導可以簡化爲以下式子。

201803111140.jpg

201803111141.jpg
如果每次都先計算好了a,計算b的時候可以把當次的a代入來使用,則b的推導變成:

201803111143.jpg
假設a初始值爲1、b初始值爲0,(這裏的初始值可以隨機選取),設定步進量爲0.01,然後依次或隨機選取一對x、y的值帶入到上面的at+1和bt+1中計算a和b的值,這裏需要重複很多次,你會發現a、b的值有時候會出現反覆,但大的趨勢上來看,是在逐步的靠近a=2、b=-1。以上過程可以直接用excel來進行,會寫程序的可以設置循環次數或者判斷α * J’的大小,當小於閾值時退出。
附上excel文件 隨機梯度excel
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章