線性迴歸是利用數理統計迴歸分析,來確定變量之間的依賴關係的統計分析方法。如何理解呢,其實就是要尋找數據規律,以便根據數據規律,對新的變量條件進行結果推斷。放到數學中來,就是把這個規律看成一個函數,要想辦法求解出這個函數的各個參數。可以想像解方程,只不過這裏要找的不是方程中的x、y、z,而是尋找合適的係數。
上圖中有許多的二維數據點,通過觀察發現這些點貌似是有一些規律的,通過描繪藍色直線可以很直接的觀察到,這些數據點圍繞在這條直線的周圍,並沿着直線的方向進行延伸。這條直線其實就是我們要找的規律。那這條直接怎麼樣來找呢?找到的直線是不是最好的呢?如果這些點到直線的距離之和如果最小,那這條直接應該就是我們期望的直線(這是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(θ)。
現在就是想辦法求這個係數的函數的最小值,我們能想像J會是一個有谷底的圖形,而谷底就是斜度接近或者是0的地方(不能排除有的時候會有多個谷底,你只找到了一個其中一個,但不是最底的那個,就所謂局部最優和全局最優的區別)。
斜度的計算可以對J(a,b)進行求導,爲方便可以對a和b兩個維度分別進行偏導,也就是分別看a和b維度的斜度。可以想像自己站在谷頂某處,要下到谷底,可以向左下一段,再向右下一段,再交替着一直走下山。
這裏其實理論上可以命J’函數爲0,帶入各數據點來求解a、b,但實際處理時數據噪音以及量級和維度的量級,不方便求解。這裏就可以用梯度下降算法了,這裏我們將用隨機梯度下降方法,在一組簡單的數據上,手工進行下降的訓練。梯度下降是一種小步逐步逼近最低點的方法,一開始先隨機選一個a作爲起點,然後選定一個合適的步進量α,用α * J(a)’作爲a方向上一次移動的長度,那到底是向左還是向右移動呢?通過觀察,如果是在最低點的右側,斜度是正值,我們要逼近最低點,應該是向左走;如果是在最低點的左側,斜度是負值,則要向右走,所以應該用a - α * J(a)’,這樣就可以向最低點方向走了。α的值一定要選的合適,太小會讓逼近的過程太久,太大會出現老是走過了的情況。最後得到了以下公式。b維度的也是類似的。再接下來就可以將數據點的x、y值帶入到公式,循環執行,直到a、b都收縮到趨於穩定的狀態,也就是α * J(a)’和α * J(b)’已經小於設定的閾值。
這裏我們來一些數據,假設我們有這麼一組x、y的數據,y有一些是未知的值,我們需要推測它們是什麼值。從已知的值我們很容易知道y = 2x - 1,現在就用隨機梯度進行a、b的尋找。