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