概述
一看到這個驢脣不對馬嘴的名字,就忍不住笑,明明是個分類算法,卻非要命名爲邏輯迴歸。這是個歷史問題,是由於邏輯規則算法中的假設函數而來的,它的假設函數別名爲“邏輯函數”。
邏輯迴歸是用來解決二分類問題的機器學習方法,用來評估某種事物的可能性。
名詞解釋
伯努利分佈
這個名詞非常好記:“不努力”。
伯努利分佈又稱“兩點分佈”或“0-1分佈”,來源於伯努利實驗。在做實驗的時候,只有兩種結果:成功、失敗。假設成功的概率爲p,則失敗的概率就是1-p。
基本原理
邏輯迴歸是基於線性迴歸實現的,在線性迴歸的基礎上增量了一個函數,從而增加了非線性的特性。
假設函數
線性迴歸的假設函數是h θ ( x ) = θ T X h_θ(x)=θ^TX h θ ( x ) = θ T X ,邏輯迴歸在線性函數的基礎上增加函數g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g ( z ) = 1 + e − z 1 ,得出邏輯迴歸的假設函數是:
h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T X h_θ(x)=g(θ^TX)=\frac{1}{1+e^{-θ^TX}} h θ ( x ) = g ( θ T X ) = 1 + e − θ T X 1
爲了方便理解,假設這是一個二分類問題,y的取值只能是0或1。
則h θ ( x ) h_θ(x) h θ ( x ) 就是針對指定x,y=1的概率,使用數學概率表示爲:h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_θ(x)=P(y=1|x;θ) h θ ( x ) = P ( y = 1 ∣ x ; θ ) ,意思是在限定x θ的情況下y=1的概率。
y=0的概率就是P ( y = 0 ∣ x ; θ ) = 1 − P ( y = 1 ∣ x ; θ ) P(y=0|x;θ)=1-P(y=1|x;θ) P ( y = 0 ∣ x ; θ ) = 1 − P ( y = 1 ∣ x ; θ )
決策邊界
g ( z ) g(z) g ( z ) 函數的效果圖如下所示:
當z趨近於無限大時,函數值無限趨近於1;當z趨近於無窮小時,函數值趨近於0;
當z=0時,函數值爲0.5。
作爲一個二分類問題,結果只能是0和1兩種,所以我們做個假設:
當g ( z ) > = 0.5 g(z)>=0.5 g ( z ) > = 0 . 5 時,結果y爲1.也就是z = θ T X > = 0 z=θ^TX>=0 z = θ T X > = 0
當g ( z ) < 0.5 g(z)<0.5 g ( z ) < 0 . 5 時,結果y爲0.也就是z = θ T X < 0 z=θ^TX<0 z = θ T X < 0
基於以上的結論,我們可以對具體的邏輯迴歸案例進行分析,找出兩個分類的臨界點即決策邊界。
線性的決策邊界
假設邏輯迴歸的假設函數爲h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2) h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 ) ,θ取值是[ − 3 1 1 ] \left[\begin{matrix}-3&1&1\end{matrix}\right] [ − 3 1 1 ] (參數的擬合過程老師沒有給出,此處的目的是爲了解釋決策邊界,而不是參數的擬合),根據上面的推導過程有以下的結論:
當z = θ T X > = 0 z=θ^TX>=0 z = θ T X > = 0 時,y=1,即θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 > = 0 θ_0+θ_1*x_1+θ_2*x_2 >=0 θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 > = 0 ,帶入θ值,
即− 3 + x 1 + x 2 > = 0 -3+x_1+x_2 >=0 − 3 + x 1 + x 2 > = 0
即x 1 + x 2 > = 3 x_1+x_2 >=3 x 1 + x 2 > = 3 時,y=1
同理當z = θ T X < 0 z=θ^TX<0 z = θ T X < 0 時,y=0,即x 1 + x 2 < 3 x_1+x_2 <3 x 1 + x 2 < 3 時。
如上圖所示,所有的元素以中間紫色的直線爲界分爲兩部分,藍色爲y=0,紅色的y=1,紫色的直線就是決策邊界。
需要注意的是當θ確定後,決策邊界就確定了,它是假設函數的屬性,不是訓練集的屬性。
圓形的決策邊界
假設邏輯迴歸的假設函數爲h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2) h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 ) ,θ取值是[ − 1 0 0 1 1 ] \left[\begin{matrix}-1&0&0&1&1\end{matrix}\right] [ − 1 0 0 1 1 ] ,根據上面的推導過程有以下的結論:
當z = θ T X > = 0 z=θ^TX>=0 z = θ T X > = 0 時,y=1,即θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 > = 0 θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2 >=0 θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 > = 0 ,帶入θ值,
即− 1 + x 1 2 + x 2 2 > = 0 -1+x_1^2+x_2^2>=0 − 1 + x 1 2 + x 2 2 > = 0
即x 1 2 + x 2 2 > = 1 x_1^2+x_2^2 >=1 x 1 2 + x 2 2 > = 1 時,y=1
同理當z = θ T X < 0 z=θ^TX<0 z = θ T X < 0 時,y=0,即x 1 2 + x 2 2 < 1 x_1^2+x_2^2 <1 x 1 2 + x 2 2 < 1 時。
對應的決策邊界是個圓形。
不規則的決策邊界
通過調整假設函數,可以得出不同的決策邊界。
代價函數
代價函數是擬合參數的手段,回顧一下線性迴歸的代價函數爲:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(θ )=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2 J ( θ ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2 = m 1 i = 1 ∑ m 2 1 ( h θ ( x ( i ) ) − y ( i ) ) 2
假設:c o s t ( h θ ( x ( i ) ) , y ( i ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(h_θ(x^{(i)}), y^{(i)})=\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2 c o s t ( h θ ( x ( i ) ) , y ( i ) ) = 2 1 ( h θ ( x ( i ) ) − y ( i ) ) 2
簡化一下,去掉i c o s t ( h θ ( x ) , y ) = 1 2 ( h θ ( x ) − y ) 2 cost(h_θ(x), y)=\frac{1}{2}(h_θ(x)-y)^2 c o s t ( h θ ( x ) , y ) = 2 1 ( h θ ( x ) − y ) 2
因爲在邏輯迴歸中h θ ( x ) = 1 1 + e − θ T X h_θ(x)=\frac{1}{1+e^{-θ^TX}} h θ ( x ) = 1 + e − θ T X 1
則代入到J ( θ ) J(θ) J ( θ ) 中後畫出的圖形如下圖所示,有很多局部優化點,這種圖形稱之爲“非凸函數”,不利於進行梯度下降:
下面給出邏輯迴歸的代價函數:
c o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 } cost(h_θ(x), y)=
\left\{
\begin{aligned}
-log(h_θ(x)) \qquad if \quad y = 1 \\
-log(1 - h_θ(x)) \qquad if \quad y = 0 \\
\end{aligned}
\right\}
c o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 }
該公式等價於:
c o s t ( h θ ( x ) , y ) = { − y ∗ l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) } cost(h_θ(x), y)=
\left\{
\begin{aligned}
-y*log(h_θ(x)) -(1-y)log(1 - h_θ(x))
\end{aligned}
\right\}
c o s t ( h θ ( x ) , y ) = { − y ∗ l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) }
y=1的情況下,代價函數的圖形如下所示,y軸代表代價函數的值,則當h θ ( x ) h_θ(x) h θ ( x ) 趨近於1時代價函數趨近於0,所以可知h θ ( x ) = 1 h_θ(x)=1 h θ ( x ) = 1 時,y=1的概率最大:
y=0的情況下,代價函數的圖形如下所示,y軸代表代價函數的值,則當h θ ( x ) h_θ(x) h θ ( x ) 趨近於0時代價函數趨近於0,所以可知h θ ( x ) = 0 h_θ(x)=0 h θ ( x ) = 0 時,y=0的概率最大:
這與我們的推想是一致的,當預測值與實際值一致時,沒有代價:
h θ ( x ) = 0 h_θ(x)=0 h θ ( x ) = 0 時,y=0的概率最大,代價爲0;
h θ ( x ) = 1 h_θ(x)=1 h θ ( x ) = 1 時,y=1的概率最大,代價爲0;
我們同樣可以使用梯度下降法去求θ,梯度下降法可以參考線性迴歸 中的描述。
梯度下降並不是唯一的算法,也可以使用conjugate gradiat、BFGS、L-BFGS算法計算,這些算法更加複雜也更加智能,計算速率也更快。
多類別分類算法
多類別分類問題,可以看成是多個二分類問題,假設現在y的取值範圍變成了(1,2,3),可以定義以下3個假設函數:
h θ ( 1 ) ( x ) h^{(1)}_θ(x) h θ ( 1 ) ( x ) ,表示特定θX的情況下,y=1的概率:P(y=1|x;θ)
h θ ( 2 ) ( x ) h^{(2)}_θ(x) h θ ( 2 ) ( x ) ,表示特定θX的情況下,y=2的概率:P(y=2|x;θ)
h θ ( 3 ) ( x ) h^{(3)}_θ(x) h θ ( 3 ) ( x ) ,表示特定θX的情況下,y=3的概率:P(y=3|x;θ)
所以假設函數可以表示爲:h θ ( i ) ( x ) = P ( y = i ∣ x ; θ ) h^{(i)}_θ(x)=P(y=i|x;θ) h θ ( i ) ( x ) = P ( y = i ∣ x ; θ )
所以判斷x是什麼類別,就是把x分別代入到3個公式中,取h最大的i作爲最終的類別 。
示例
from sklearn.linear_model import LogisticRegression
import os
import pandas as pd
import numpy as np
# 要預測的結果字段
y_label = ['predclass']
# training_data 訓練集,指標字段
x_label = [i for i in training_data.columns if i not in y_label]
lr = LogisticRegression(C=0.01, penalty='l1')
lr.fit(training_data[x_label], training_data[y_label])
# test_data是測試集,在測試集上測試一下效果
score = lr.score(test_data[x_label], test_data['predclass'])
# 速度比近鄰要快得多
print("score", score)
參考
https://zhuanlan.zhihu.com/p/28408516