Python手擼邏輯迴歸(logistic regression)
阿新 • • 發佈:2019-01-09
與線性迴歸用於預測連續值不同,邏輯歸回用於分類,原理與線性迴歸類似,定義損失函式,然後最小化損失,得到引數既模型,只不過損失的定義不同。
邏輯迴歸的假設如圖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所示,採用交叉熵損失函式,如何理解交叉熵損失函式在之前的博文人工神經網路
圖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
下邊來看一下正則化對模型效果的影響,從最後的對比圖可以看出,如果不加正則化會出現過擬合,如果正則化係數太大,會欠擬合。