1. 程式人生 > >機器學習之線性迴歸原理及sklearn實現

機器學習之線性迴歸原理及sklearn實現

  1、線性迴歸問題

       以房價預測為例,佔地面積為變數x1,房屋年齡為變數x2,房屋價格為預測變數y。

       為什麼叫線性迴歸問題,因為目標函式是一個線性迴歸函式。什麼是目標函式?   

    (1)、目標函式:目標函式是我們需要的最終結果,及最終擬合了資料的函式。

         假設目標函式為y = θ1*x1 + θ2*x2 + b。

         那麼我們如何得到目標函式中的引數呢?如何使用資料來擬合得到最好的θ1、θ2以及b就是接下來要做的事情。

     (2)、損失函式:損失函式是我們得到的預測值y_pre與真實資料中的y的某種方式計算出來的差值。那麼也就是說損失函式越小,就代表著我們目標函式的引數越好。

         一般線性迴歸問題我們用均方差來作為損失函式,即 J(θ1,θ2)=∑(y-y_pre)^2  ​#小弟能力有限,暫時部落格沒什麼好的書寫方式,公式裡的符號能理解就好

         也就是說我們現在的問題就是在這個J(θ1,θ2)上面找事情了,找到它最小的情況,並且計算出這時的θ1和θ2以及b

    2、解決途徑

         對於損失函式J(θ1,θ2)=∑(y-y_pre)^2,我們最常用的方式自然是傳說中的梯度下降法了。當然不只是梯度下降法,也有其他的解法,如最小二乘法等。

      (1)、梯度下降

           梯度下降的原理如其名所述,取其梯度,按梯度下降,然後下降到最低點,就得到我們最想要的最小的J了。 

           梯度是什麼?對於損失函式 J = ∑(y-y_pre)^2  來說,梯度就是J分別對θ1和θ2求偏導數,即{∂J/∂θ1,∂J/∂θ2}

           那梯度下降就是引數減去這個偏導數嘍。

              θ1 = θ1 - ∂J/∂θ1

              θ2 = θ2 - ∂J/∂θ2 

           這樣一次減法操作就是一次梯度下降,梯度下降法正是通過這樣一次次的減法,直到最後使得θ1和θ2趨於穩定,也就是J達到或者接近最小值。

           那麼為什麼這樣一次次的減法就能得到結果呢?我們畫個圖來看一下。

          

     因為三維圖不太會畫,就用二維影象,一個θ值來分析。一個引數兩個引數都是一樣的,只不過多一個減法公式。

    如圖,假設初始的θ值位於A點,那麼A點的偏導,如斜線所示,是一個正數,那麼θ = θ - ∂J/∂θ(正數)這樣的減法公式之後,橫左邊必然是變小了,A點自然是向左移動了,假設從A點移動到了B點,那麼可以發現J的值確實是變小了。如果A點在函式最小值的的左邊呢?

    

     如圖,如果一開始在C點,這時的偏導是負數,那麼θ = θ - ∂J/∂θ(負數) 之後,theta變大了,橫座標右移,自然J也就變小了,這也就是說不論哪種情況下進行梯度下降,J都是在減小的。

    損失函式J梯度下降公式是這樣的,以一個θ舉例: θ = θ - λ*(∂J/∂θ),多出一個λ,這個λ是超引數,是人為設定的,也就是可以我們可以控制梯度下降的步長,是下降的快一點還是慢一點。這裡不是設定的越大越好,因為如果λ太大,會導致發生從A點直接下降到C點這種情況,也就是說步子太大了,直接跨過了最低點。

    以上就是線性迴歸Linear Regression以及梯度下降GD的原理,下面我們來看一下sklearn中如何使用。

# 本篇學習線性迴歸演算法,使用自帶的波士頓放假資料集     #匯入包
from sklearn import datasets from sklearn import linear_model import pandas as pd import matplotlib.pyplot as plt
#匯入資料,切分為資料集X以及目標集y data = datasets.load_boston() X = pd.DataFrame(data['data'],columns=data.feature_names) y = pd.DataFrame(data['target'],columns=data.)
#生成模型物件,並fit資料,預測結果 reg = linear_model.LinearRegression() reg.fit(X,y) predictions = reg.predict(X) print(predictions)

    sklearn的使用十分簡單,以上就是使用sklearn做的一個線性迴歸預測房價,當然沒有什麼模型評價、模型優化等等,這些之後再聊。