邏輯回歸是一種分類算法,常用于二分類,也就是得出的結果為是和不是,例如通過各種因素判斷一個人是否生病,信用卡是否違約等。邏輯回歸在社會和自然科學中應用非常廣泛,
前置知識
線性回歸
邏輯回歸的底層方法就是線性回歸,所以需要對線性回歸有基本的了解。具體的一元,多元線性回歸原理在之前的文章中已經講過,可以查看之前的文章
https://blog.csdn.net/qq_42692386/article/details/140824402
https://blog.csdn.net/qq_42692386/article/details/138210463
https://blog.csdn.net/qq_42692386/article/details/146070598
回歸:假設現在有一些數據點,我們用一條線對這些點進行擬合(這條線稱為最佳擬合線),這個擬合的過程就叫做回歸。
線性回歸:最佳擬合線是一條直線,線性是指每個自變量(或者說特征) x x x與因變量(或者說結果) y y y的結果是線性的關系
邏輯回歸
在線性回歸中得到的結果一般是連續的結果,而分類需要的結果是離散型的,例如二分類就是最終結果只需要兩類。邏輯回歸可以進行分類就是使用了Sigmoid函數將結果轉化為0到1的范圍內,再將0.5作為分界線從而分類。
Sigmoid函數
又被稱為對數幾率函數、Logistic函數。Sigmoid函數的數學表達式為:
σ ( z ) = 1 1 + e ? z \sigma(z)= \frac 1 {1+e^{-z}} σ(z)=1+e?z1?
其函數圖像為:
從圖形可以看出,Sigmoid函數有如下性質:
1.函數定義域為 ( ? ∞ , + ∞ ) (?\infty,+\infty) (?∞,+∞),值域為 ( 0 , 1 ) (0,1) (0,1)。
2.當 z z z趨近于 ? ∞ ?\infty ?∞時,函數值 g ( z ) g(z) g(z)趨近于0;當 z z z趨近于 + ∞ +\infty +∞時,函數值 σ ( z ) \sigma(z) σ(z)趨近于1;當 z = 0 z=0 z=0時,函數值 σ ( z ) \sigma(z) σ(z)等于0.5.
3.函數單調可微。
Sigmoid函數的這些性質決定了它可以將 ( ? ∞ , + ∞ ) (?\infty,+\infty) (?∞,+∞)的數據映射到 ( 0 , 1 ) (0,1) (0,1)上,加上它在中心點處取值為0.5,所以我們可以將0.5作為分界線來進行分類。當然選擇0.5作為閾值是一個一般的做法,實際應用時特定的情況可以選擇不同閾值,如果對正例的判別準確性要求高,可以選擇閾值大一些,對正例的召回要求高,則可以選擇閾值小一些
對Sigmoid函數求導,有:
σ ′ ( z ) = d d z 1 1 + e ? z = e ? z ( 1 + e ? z ) 2 = 1 ( 1 + e ? z ) ? ( 1 ? 1 ( 1 + e ? z ) ) = σ ( z ) ( 1 ? σ ( z ) ) \begin{aligned} \sigma'(z) & = \frac d{dz}\frac 1{1+e^{-z}}\\ & = \frac {e^{-z}}{(1+e^{-z})^2}\\ & = \frac 1{(1+e^{-z})} \cdot (1- \frac 1{(1+e^{-z})})\\ & = \sigma(z)(1-\sigma(z))\\ \end{aligned} σ′(z)?=dzd?1+e?z1?=(1+e?z)2e?z?=(1+e?z)1??(1?(1+e?z)1?)=σ(z)(1?σ(z))?
可以看到Sigmoid函數求導后仍然可以使用原函數表示,這也是它的一個比較好的性質。
邏輯回歸的損失函數
邏輯回歸本質上是線性回歸,只是在特征到結果的映射中加入了一層Sigmoid函數映射,即先把特征線性求和,然后使用Sigmoid函數 g ( z ) g(z) g(z)將線性回歸的結果值映射到0到1之間。將線性回歸模型的表達式帶入g(z),就得到邏輯回歸的表達式:
在之前的線性回歸原理中多元線性回歸的一般形式為:
f ( x ) = w 0 x 0 + w 1 x 1 + w 2 x 2 + . . . + w k x k = w T x f(x) = w_{0}x_{0} +w_{1}x_{1}+ w_{2}x_{2} + ... +w_{k}x_{k}=w^Tx f(x)=w0?x0?+w1?x1?+w2?x2?+...+wk?xk?=wTx
代入到邏輯Sigmoid函數的表達式中,結果為:
h ( x ) = σ ( w T x ) = 1 1 + e ? w T x h(x)=\sigma(w^Tx)= \frac 1 {1+e^{-w^Tx}} h(x)=σ(wTx)=1+e?wTx1?
此時如果按照之前的最小二乘法推導出最終的損失函數是非凸的,很難找到最優解,所以邏輯回歸中使用最大似然法來確定模型的參數。
最大似然估計
最大似然估計認為我們既然已經抽取得到了一個結果,那么就認為這個結果就是所有情況、所有樣本結果中出現概率最大的那一個。考慮到每次的抽取都是獨立同分布的,所以將每一個取值對應的概率相乘就是這一個樣本結果出現的概率(也就是似然函數),那么只要讓這一個結果出現的概率(似然函數)最大就可以估算出每個值對應的概率
舉個例子來說就是一個大桶里有紅藍兩種球,現在有放回的隨機抽了100個球,最終有70個紅球和30個藍球,那么我們可以推斷認為桶里紅藍球的比例約為7:3,因為這種比例下出現已抽取到的結果的可能性最大.。
具體可以參閱如下鏈接文章:
https://blog.csdn.net/qq_42692386/article/details/139919043
最大似然估計的一般步驟為:
- 寫出似然函數(也就是已知的樣本結果出現的概率)。對于離散型變量是將對應概率相乘,連續型變量就是概率密度函數相乘。
- 求似然函數最大時對應概率的值。一般為了簡化計算,首先對等式兩邊取對數,將相乘改為相加減,然后對似然函數求導,求導數為0時的值
邏輯回歸損失函數推導
邏輯回歸的最終結果是一個二分類結果,在概率中將結果表示為 y = 0 , y = 1 y=0,y=1 y=0,y=1,通常用數字1表示結果為正例,0表示結果為反例,可以分別表示發生與不發生,正面與反面,成功與失敗,有問題與無問題等等二分類結果。在概率中我們用 P ( Y ) P(Y) P(Y)表示事件 Y Y Y發生的概率,例如 P ( Y = 1 ) P(Y=1) P(Y=1)可以表示硬幣拋出正面,下雨這個事件發生等等的概率。同時二分類中的結果只有正例和反例,所以兩者發生概率相加為1。用 P ( Y ∣ X ) P(Y|X) P(Y∣X)表示在條件 X X X的情況下事件 Y Y Y發生的概率,稱為后驗概率
所以在邏輯回歸中,結果當取值為 x x x時為正例的概率為:
P ( y = 1 ∣ x ; w ) = h ( x ) = 1 1 + e ? w T x = e w T x 1 + e w T x P(y=1|x;w)=h(x)= \frac 1 {1+e^{-w^Tx}}=\frac{ e^{w^Tx}} {1+e^{w^Tx}} P(y=1∣x;w)=h(x)=1+e?wTx1?=1+ewTxewTx?
同理可得出當取值為 x x x時為負例的概率:
P ( y = 0 ∣ x ; w ) ) = 1 ? h ( x ) = 1 ? σ ( w T x ) = 1 1 + e w T x P(y=0|x;w))=1-h(x)=1-\sigma(w^Tx)= \frac{1} {1+e^{w^Tx}} P(y=0∣x;w))=1?h(x)=1?σ(wTx)=1+ewTx1?
需要注意的是這里直接將邏輯回歸的計算結果 h ( x ) h(x) h(x)作為概率,例如一個樣本計算結果 h ( x ) = 0.8 h(x)=0.8 h(x)=0.8,則就是認為其為正例的可能性為0.8,從而根據概率理解為其為正例,但是需要注意的是這個計算結果并不是一個真實的概率,只是在邏輯回歸中計算結果可以作為概率來使用。
將兩者合并到一起,可以得到邏輯回歸的表達式:
P ( y ∣ x ; w ) = ( h ( x ) ) y ( 1 ? h ( x ) ) 1 ? y P(y|x;w)= (h(x))^y(1- h(x))^{1-y} P(y∣x;w)=(h(x))y(1?h(x))1?y
假設訓練樣本相互獨立,則根據最大似然函數寫出似然函數的表達式為:
J ( w ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ; w ) = ∏ i = 1 n h ( x ( i ) ) y ( i ) ( 1 ? h ( x ( i ) ) ) 1 ? y ( i ) J(w) = \prod_{i=1}^n P(y^{(i)}|x^{(i)};w) = \prod_{i=1}^n h(x^{(i)})^{y^{(i)}}(1-h(x^{(i)}))^{1-y^{(i)}} J(w)=i=1∏n?P(y(i)∣x(i);w)=i=1∏n?h(x(i))y(i)(1?h(x(i)))1?y(i)
其中 x ( i ) , y ( i ) x^{(i)},y^{(i)} x(i),y(i)是第 i i i 個觀察樣本的自變量值和實際結果值
對等式兩邊取以自然底數 e e e為底的對數,將累乘變為累加,有:
l n J ( w ) = l n ( ∏ i = 1 n h ( x ( i ) ) y ( i ) ( 1 ? h ( x ( i ) ) ) 1 ? y ( i ) ) = ∑ i = 1 n [ y ( i ) l n ( h ( x ( i ) ) ) + ( 1 ? y ( i ) ) l n ( 1 ? h ( x ( i ) ) ) ] \begin{aligned} ln J(w) &= ln \bigg(\prod_{i=1}^n h(x^{(i)})^{y^{(i)}}(1-h(x^{(i)}))^{1-y^{(i)}} \bigg) \\&= \sum^n_{i=1} \Big[y^{(i)} ln(h(x^{(i)})) + (1-y^{(i)})ln(1-h(x^{(i)}))\Big] \end{aligned} lnJ(w)?=ln(i=1∏n?h(x(i))y(i)(1?h(x(i)))1?y(i))=i=1∑n?[y(i)ln(h(x(i)))+(1?y(i))ln(1?h(x(i)))]?
最大似然估計希望似然函數越大越好,而之前我們求解損失函數時用的梯度下降是求最小值,所以在前面可以加一個負號,這樣就得到邏輯回歸的損失函數如下:
J ( w ) = ? ∑ i = 1 n [ y ( i ) l n ( h ( x ( i ) ) ) + ( 1 ? y ( i ) ) l n ( 1 ? h ( x ( i ) ) ) ] J(w)= -\sum^n_{i=1} \Big[y^{(i)} ln(h(x^{(i)})) + (1-y^{(i)})ln(1-h(x^{(i)}))\Big] J(w)=?i=1∑n?[y(i)ln(h(x(i)))+(1?y(i))ln(1?h(x(i)))]
梯度下降更新公式
為了求解得到邏輯回歸的損失函數的最小值,依舊使用梯度下降法
w j n + 1 = w j n ? α ? ? w j J ( w ) w_{j}^{n+1}=w_{j}^{n}-\alpha\frac{\partial}{\partial w_{j}} J(w) wjn+1?=wjn??α?wj???J(w)
其中 α \alpha α為學習率
根據Sigmoid函數求導的性質,對w求偏導有:
h ( x ) = σ ( w T x ) = σ ( w T x ) ( 1 ? σ ( w T x ) ) ? ? w j w T x = h ( x ) ( 1 ? h ( x ) ) ? ? w j w T x h(x)=\sigma(w^Tx)= \sigma(w^Tx)(1-\sigma(w^Tx))\frac{\partial}{\partial w_{j}}{w^Tx}= h(x){(1-h(x)}) \frac{\partial}{\partial w_{j}}{w^Tx} h(x)=σ(wTx)=σ(wTx)(1?σ(wTx))?wj???wTx=h(x)(1?h(x))?wj???wTx
對損失函數求偏導有:
? ? w j J ( w ) = ? ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ? ? w j h ( x ( i ) ) + ( 1 ? y ( i ) ) 1 ( 1 ? h ( x ( i ) ) ) ? ? w j ( 1 ? h ( x ( i ) ) ) ] = ? ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ? ? w j h ( x ( i ) ) ? ( 1 ? y ( i ) ) 1 ( 1 ? h ( x ( i ) ) ) ? ? w j h ( x ( i ) ) ] = ? ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ? ( 1 ? y ( i ) ) 1 ( 1 ? h ( x ( i ) ) ) ) ] ? ? w j h ( x ( i ) ) = ? ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ? ( 1 ? y ( i ) ) 1 ( 1 ? h ( x ( i ) ) ) ) ] h ( x ( i ) ) ( 1 ? h ( x ( i ) ) ) ? ? w j w T x = ? ∑ i = 1 n [ y ( i ) ( 1 ? h ( x ( i ) ) ) ? ( 1 ? y ( i ) ) h ( x ( i ) ) ] ? ? w j w T x = ? ∑ i = 1 n [ y ( i ) ? h ( x ( i ) ) ] ? ? w j w T x = ∑ i = 1 n [ h ( x ( i ) ? y ( i ) ) ] x j ( i ) \begin{aligned} \frac{\partial}{\partial w_{j}} J(w) &= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} \frac{\partial}{\partial w_{j}}h(x^{(i)}) + (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{(1-h(x^{(i)})})\Big] \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} \frac{\partial}{\partial w_{j}}h(x^{(i)}) - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{h(x^{(i)}})\Big] \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} )\Big] \frac{\partial}{\partial w_{j}}h(x^{(i)}) \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} )\Big] h(x^{(i)}){(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{w^Tx} \\&= -\sum^n_{i=1} \Big[y^{(i)} {(1-h(x^{(i)}))} - (1-y^{(i)})h(x^{(i)})\Big] \frac{\partial}{\partial w_{j}}{w^Tx}\\&= -\sum^n_{i=1} \Big[y^{(i)} - h(x^{(i)})\Big] \frac{\partial}{\partial w_{j}}{w^Tx} \\&= \sum^n_{i=1} \Big[h(x^{(i)} - y^{(i)} )\Big] x_{j}^{(i)} \end{aligned} ?wj???J(w)?=?i=1∑n?[y(i)h(x(i))1??wj???h(x(i))+(1?y(i))(1?h(x(i)))1??wj???(1?h(x(i)))]=?i=1∑n?[y(i)h(x(i))1??wj???h(x(i))?(1?y(i))(1?h(x(i)))1??wj???h(x(i))]=?i=1∑n?[y(i)h(x(i))1??(1?y(i))(1?h(x(i)))1?)]?wj???h(x(i))=?i=1∑n?[y(i)h(x(i))1??(1?y(i))(1?h(x(i)))1?)]h(x(i))(1?h(x(i)))?wj???wTx=?i=1∑n?[y(i)(1?h(x(i)))?(1?y(i))h(x(i))]?wj???wTx=?i=1∑n?[y(i)?h(x(i))]?wj???wTx=i=1∑n?[h(x(i)?y(i))]xj(i)??
所以最終的梯度下降更新公式為:
w j : = w j ? ? ? w j J ( w ) = w j ? α ∑ i = 1 n [ h ( x ( i ) ? y ( i ) ) ] x j ( i ) w_{j}:=w_{j}-\frac{\partial}{\partial w_{j}} J(w)=w_{j}-\alpha \sum_{i=1}^{n} \Big[h(x^{(i)} - y^{(i)} )\Big] x_{j}^{(i)} wj?:=wj???wj???J(w)=wj??αi=1∑n?[h(x(i)?y(i))]xj(i)?
可以看到梯度下降更新公式與之前說的多元線性回歸梯度下降更新公式形式是一樣的。但是這里的 h ( x ) h_(x) h(?x)其中有Sigmoid函數,所以是非線性的函數,與多元線性回歸是不同的。