1. 程式人生 > >Python手擼邏輯迴歸(logistic regression)

Python手擼邏輯迴歸(logistic regression)

與線性迴歸用於預測連續值不同,邏輯歸回用於分類,原理與線性迴歸類似,定義損失函式,然後最小化損失,得到引數既模型,只不過損失的定義不同。

邏輯迴歸的假設如圖1所示,可以理解為線性迴歸外面套了一層sigmoid函式g(z),sigmoid函式影象如圖2所示,該函式有很好的數學性質,其導數= g(z)*(1- g(z)),導數計算量小,當z=0時,其函式值為0.5,z越大,函式值越接近於1,z越小,函式值越接近於0。


圖1 邏輯迴歸假設


圖 2 sigmoid函式影象

Logistic regression的損失函式定義如圖3所示,採用交叉熵損失函式,如何理解交叉熵損失函式在之前的博文人工神經網路

中有提到,如果仍使用線性迴歸時的損失函式,其函式影象如圖5所示,是一個非凸函式,如果使用梯度下降的話可能會陷入區域性最優。


圖3 損失函式定義


圖4 損失函式求梯度


圖5 非凸損失函式

         我們要做的就是最小化損失函式J,得到theta,J是個凸函式,常採用梯度下降的方式,求梯度的公式如圖4所示。為了防止過擬合,需要加正則化項,圖5和圖6分別是帶L2正則化的損失函式和梯度。


圖6 帶正則項的損失函式


圖7 帶正則項的損失函式求梯度

具體程式碼如下所示,In[27]畫出了的決策邊界,其中藍色是使用scipy的minimize函式求得的引數,紅色是使用自己寫的批量梯度下降得到的引數。關於minimize函式的引數請參考官方文件https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html




下邊來看一下正則化對模型效果的影響,從最後的對比圖可以看出,如果不加正則化會出現過擬合,如果正則化係數太大,會欠擬合。