逻辑回归(logistic regression)的本质——极大似然估计
文章目錄
- 1 前言
- 2 什么是邏輯回歸
- 3 邏輯回歸的代價函數
- 4 利用梯度下降法求參數
- 5 結束語
- 6 參考文獻
1 前言
邏輯回歸是分類當中極為常用的手段,因此,掌握其內在原理是非常必要的。我會爭取在本文中盡可能簡明地展現邏輯回歸(logistic regression)的整個推導過程。
2 什么是邏輯回歸
邏輯回歸在某些書中也被稱為對數幾率回歸,明明被叫做回歸,卻用在了分類問題上,我個人認為這是因為邏輯回歸用了和回歸類似的方法來解決了分類問題。
假設有一個二分類問題,輸出為y∈{0,1}y \in \{0, 1\}y∈{0,1},而線性回歸模型產生的預測值為z=wTx+bz = w^Tx + bz=wTx+b是實數值,我們希望有一個理想的階躍函數來幫我們實現zzz值到0/10/10/1值的轉化。
?(z)={0ifz<00.5ifz=01ifz>0\phi (z) = \left\{ \begin{aligned} 0 \quad if \ z < 0 \\ 0.5 \quad if \ z=0 \\ 1 \quad if \ z>0 \end{aligned} \right. ?(z)=??????0if?z<00.5if?z=01if?z>0?
然而該函數不連續,我們希望有一個單調可微的函數來供我們使用,于是便找到了SigmoidfunctionSigmoid \ functionSigmoid?function來替代。
?(z)=11+e?z\phi (z) = \dfrac{1}{1 + e^{-z}}?(z)=1+e?z1?
兩者的圖像如下圖所示(圖片出自文獻2)
有了SigmoidfuctionSigmoid \ fuctionSigmoid?fuction之后,由于其取值在[0,1][0,1][0,1],我們就可以將其視為類111的后驗概率估計p(y=1∣x)p(y = 1|x)p(y=1∣x)。說白了,就是如果有了一個測試點xxx,那么就可以用SigmoidfuctionSigmoid \ fuctionSigmoid?fuction算出來的結果來當做該點xxx屬于類別111的概率大小。
于是,非常自然地,我們把SigmoidfuctionSigmoid \ fuctionSigmoid?fuction計算得到的值大于等于0.50.50.5的歸為類別111,小于0.50.50.5的歸為類別000。
y^={1if?(z)≥0.50otherwise\hat{y} = \left\{ \begin{aligned} 1 \quad if \ \phi (z) \geq 0.5 \\ 0 \quad \quad \ otherwise \end{aligned} \right. y^?={1if??(z)≥0.50?otherwise?
同時邏輯回歸與自適應線性網絡非常相似,兩者的區別在于邏輯回歸的激活函數是SigmoidfunctionSigmoid \ functionSigmoid?function而自適應線性網絡的激活函數是y=xy = xy=x,兩者的網絡結構如下圖所示(圖片出自文獻1)。
圖2:自適應線性網絡 圖3:邏輯回歸網絡3 邏輯回歸的代價函數
好了,所要用的幾個函數我們都有了,接下來要做的就是根據給定的訓練集,把參數www給求出來了。要找參數www,首先就是得把代價函數(cost function)給定義出來,也就是目標函數。
我們第一個想到的自然是模仿線性回歸的做法,利用誤差平方和來當代價函數。
J(w)=∑i12(?(z(i))?y(i))2J(w) = \sum_{i} \dfrac{1}{2} (\phi(z^{(i)}) - y^{(i)})^2J(w)=i∑?21?(?(z(i))?y(i))2
其中,z(i)=wTx(i)+bz^{(i)} = w^Tx^{(i)} + bz(i)=wTx(i)+b,iii表示第iii個樣本點,y(i)y^{(i)}y(i)表示第iii個樣本的真實值,?(z(i))\phi(z^{(i)})?(z(i))表示第iii個樣本的預測值。
這時,如果我們將?(z(i))=11+e?z(i)\phi (z^{(i)}) = \dfrac{1}{1 + e^{-z^{(i)}}}?(z(i))=1+e?z(i)1?代入的話,會發現這是一個非凸函數,這就意味著代價函數有著許多的局部最小值,這不利于我們的求解。
圖4:凸函數和非凸函數那么我們不妨來換一個思路解決這個問題。前面,我們提到了?(z)\phi(z)?(z)可以視為類111的后驗估計,所以我們有
p(y=1∣x;w)=?(wTx+b)=?(z)p(y=1|x;w) = \phi(w^Tx + b)=\phi(z)p(y=1∣x;w)=?(wTx+b)=?(z)
p(y=0∣x;w)=1??(z)p(y=0|x;w) = 1 - \phi(z)p(y=0∣x;w)=1??(z)
其中,p(y=1∣x;w)p(y=1|x;w)p(y=1∣x;w)表示給定www,那么xxx點y=1y=1y=1的概率大小。
上面兩式可以寫成一般形式
p(y∣x;w)=?(z)y(1??(z))(1?y)p(y|x;w)=\phi(z)^{y}(1 - \phi(z))^{(1-y)}p(y∣x;w)=?(z)y(1??(z))(1?y)
接下來我們就要用極大似然估計來根據給定的訓練集估計出參數www。
L(w)=∏i=1np(y(i)∣x(i);w)=∏i=1n(?(z(i)))y(i)(1??(z(i)))1?y(i)L(w)=\prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w)=\prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{1-y^{(i)}}L(w)=i=1∏n?p(y(i)∣x(i);w)=i=1∏n?(?(z(i)))y(i)(1??(z(i)))1?y(i)
為了簡化運算,我們對上面這個等式的兩邊都取一個對數
l(w)=lnL(w)=∑i=1ny(i)ln(?(z(i)))+(1?y(i))ln(1??(z(i)))l(w)=lnL(w)=\sum_{i = 1}^n y^{(i)}ln(\phi(z^{(i)})) + (1 - y^{(i)})ln(1-\phi(z^{(i)}))l(w)=lnL(w)=i=1∑n?y(i)ln(?(z(i)))+(1?y(i))ln(1??(z(i)))
我們現在要求的是使得l(w)l(w)l(w)最大的www。沒錯,我們的代價函數出現了,我們在l(w)l(w)l(w)前面加個負號不就變成就最小了嗎?不就變成我們代價函數了嗎?
J(w)=?l(w)=?∑i=1ny(i)ln(?(z(i)))+(1?y(i))ln(1??(z(i)))J(w)=-l(w)=-\sum_{i = 1}^n y^{(i)}ln(\phi(z^{(i)})) + (1 - y^{(i)})ln(1-\phi(z^{(i)}))J(w)=?l(w)=?i=1∑n?y(i)ln(?(z(i)))+(1?y(i))ln(1??(z(i)))
為了更好地理解這個代價函數,我們不妨拿一個例子的來看看
J(?(z),y;w)=?yln(?(z))?(1?y)ln(1??(z))J(\phi(z),y;w)=-yln(\phi(z))-(1-y)ln(1-\phi(z))J(?(z),y;w)=?yln(?(z))?(1?y)ln(1??(z))
也就是說
J(?(z),y;w)={?ln(?(z))ify=1?ln(1??(z))ify=0J(\phi(z),y;w)=\begin{cases} -ln(\phi(z)) & if \ y=1 \\ -ln(1-\phi(z)) & if \ y=0 \end{cases}J(?(z),y;w)={?ln(?(z))?ln(1??(z))?if?y=1if?y=0?
我們來看看這是一個怎么樣的函數
圖5:代價函數從圖中不難看出,如果樣本的值是111的話,估計值?(z)\phi(z)?(z)越接近111付出的代價就越小,反之越大;同理,如果樣本的值是000的話,估計值?(z)\phi(z)?(z)越接近000付出的代價就越小,反之越大。
4 利用梯度下降法求參數
在開始梯度下降之前,要這里插一句,sigmoidfunctionsigmoid \ functionsigmoid?function有一個很好的性質就是
?′(z)=?(z)(1??(z))\phi'(z) = \phi(z)(1 - \phi(z))?′(z)=?(z)(1??(z))
下面會用到這個性質。
還有,我們要明確一點,梯度的負方向就是代價函數下降最快的方向。什么?為什么?好,我來說明一下。借助于泰特展開,我們有
f(x+δ)?f(x)≈f′(x)?δf(x + \delta) - f(x) \approx f'(x) \cdot \deltaf(x+δ)?f(x)≈f′(x)?δ
其中,f′(x)f'(x)f′(x)和δ\deltaδ為向量,那么這兩者的內積就等于
f′(x)?δ=∣∣f′(x)∣∣?∣∣δ∣∣?cosθf'(x) \cdot \delta = ||f'(x)|| \cdot ||\delta|| \cdot cos \thetaf′(x)?δ=∣∣f′(x)∣∣?∣∣δ∣∣?cosθ
當θ=π\theta=\piθ=π時,也就是δ\deltaδ在f′(x)f'(x)f′(x)的負方向上時,取得最小值,也就是下降的最快的方向了~
okay?好,坐穩了,我們要開始下降了。
w:=w+Δw,Δw=?η?J(w)w := w + \Delta w, \ \Delta w=-\eta \nabla J(w)w:=w+Δw,?Δw=?η?J(w)
沒錯,就是這么下降。沒反應過來?那我再寫詳細一些
wj:=wj+Δwj,Δwj=?η?J(w)?wjw_j := w_j + \Delta w_j,\ \Delta w_j = -\eta \dfrac{\partial J(w)}{\partial w_j} wj?:=wj?+Δwj?,?Δwj?=?η?wj??J(w)?
其中,wjw_jwj?表示第jjj個特征的權重;η\etaη為學習率,用來控制步長。
重點來了。
?J(w)wj=?∑i=1n(y(i)1?(z(i))?(1?y(i))11??(z(i)))??(z(i))?wj=?∑i=1n(y(i)1?(z(i))?(1?y(i))11??(z(i)))?(z(i))(1??(z(i)))?z(i)?wj=?∑i=1n(y(i)(1??(z(i)))?(1?y(i))?(z(i)))xj(i)=?∑i=1n(y(i)??(z(i)))xj(i)\begin{aligned} & \dfrac{\partial J(w)}{w_j} = -\sum_{i=1}^n (y^{(i)}\dfrac{1}{\phi(z^{(i)})}-(1 - y^{(i)})\dfrac{1}{1-\phi(z^{(i)})})\dfrac{\partial \phi(z^{(i)})}{\partial w_j} \\ & =-\sum_{i=1}^n (y^{(i)}\dfrac{1}{\phi(z^{(i)})}-(1 - y^{(i)})\dfrac{1}{1-\phi(z^{(i)})})\phi(z^{(i)})(1-\phi(z^{(i)}))\dfrac{\partial z^{(i)}}{\partial w_j} \\ & =-\sum_{i=1}^n (y^{(i)}(1-\phi(z^{(i)}))-(1-y^{(i)})\phi(z^{(i)}))x_j^{(i)} \\ & =-\sum_{i=1}^n (y^{(i)}-\phi(z^{(i)}))x_j^{(i)} \end{aligned} ?wj??J(w)?=?i=1∑n?(y(i)?(z(i))1??(1?y(i))1??(z(i))1?)?wj???(z(i))?=?i=1∑n?(y(i)?(z(i))1??(1?y(i))1??(z(i))1?)?(z(i))(1??(z(i)))?wj??z(i)?=?i=1∑n?(y(i)(1??(z(i)))?(1?y(i))?(z(i)))xj(i)?=?i=1∑n?(y(i)??(z(i)))xj(i)??
所以,在使用梯度下降法更新權重時,只要根據下式即可
wj:=wj+η∑i=1n(y(i)??(z(i)))xj(i)w_j :=w_j+\eta \sum_{i=1}^n (y^{(i)}-\phi(z^{(i)}))x_j^{(i)}wj?:=wj?+ηi=1∑n?(y(i)??(z(i)))xj(i)?
此式與線性回歸時更新權重用的式子極為相似,也許這也是邏輯回歸要在后面加上回歸兩個字的原因吧。
當然,在樣本量極大的時候,每次更新權重會非常耗費時間,這時可以采用隨機梯度下降法,這時每次迭代時需要將樣本重新打亂,然后用下式不斷更新權重。
wj:=wj+η(y(i)??(z(i)))xj(i),foriinrange(n)w_j := w_j + \eta (y^{(i)}-\phi(z^{(i)}))x_j^{(i)}, for \ i \ in \ range(n) wj?:=wj?+η(y(i)??(z(i)))xj(i)?,for?i?in?range(n)
也就是去掉了求和,而是針對每個樣本點都進行更新。
5 結束語
以上就是我參考了基本書中的說法之后對邏輯回歸整個推到過程的梳理,也不知道講清楚沒有。
如有不足,還請指正~
6 參考文獻
[1] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015.
[2] 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.
總結
以上是生活随笔為你收集整理的逻辑回归(logistic regression)的本质——极大似然估计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1887. 使数组元素
- 下一篇: LeetCode 2178. 拆分成最多