吳恩達機器學習——第7章 邏輯迴歸

概述

一看到這個驢脣不對馬嘴的名字,就忍不住笑,明明是個分類算法,卻非要命名爲邏輯迴歸。這是個歷史問題,是由於邏輯規則算法中的假設函數而來的,它的假設函數別名爲“邏輯函數”。
邏輯迴歸是用來解決二分類問題的機器學習方法,用來評估某種事物的可能性。

名詞解釋

伯努利分佈

這個名詞非常好記:“不努力”。
伯努利分佈又稱“兩點分佈”或“0-1分佈”,來源於伯努利實驗。在做實驗的時候,只有兩種結果:成功、失敗。假設成功的概率爲p,則失敗的概率就是1-p。
在這裏插入圖片描述

基本原理

邏輯迴歸是基於線性迴歸實現的,在線性迴歸的基礎上增量了一個函數,從而增加了非線性的特性。

假設函數

線性迴歸的假設函數是hθ(x)=θTXh_θ(x)=θ^TX,邏輯迴歸在線性函數的基礎上增加函數g(z)=11+ezg(z)=\frac{1}{1+e^{-z}},得出邏輯迴歸的假設函數是:
hθ(x)=g(θTX)=11+eθTXh_θ(x)=g(θ^TX)=\frac{1}{1+e^{-θ^TX}}

爲了方便理解,假設這是一個二分類問題,y的取值只能是0或1。
hθ(x)h_θ(x)就是針對指定x,y=1的概率,使用數學概率表示爲:hθ(x)=P(y=1x;θ)h_θ(x)=P(y=1|x;θ),意思是在限定x θ的情況下y=1的概率。
y=0的概率就是P(y=0x;θ)=1P(y=1x;θ)P(y=0|x;θ)=1-P(y=1|x;θ)

決策邊界

g(z)g(z)函數的效果圖如下所示:
在這裏插入圖片描述
當z趨近於無限大時,函數值無限趨近於1;當z趨近於無窮小時,函數值趨近於0;
當z=0時,函數值爲0.5。
作爲一個二分類問題,結果只能是0和1兩種,所以我們做個假設:

  • g(z)>=0.5g(z)>=0.5時,結果y爲1.也就是z=θTX>=0z=θ^TX>=0
  • g(z)<0.5g(z)<0.5時,結果y爲0.也就是z=θTX<0z=θ^TX<0

基於以上的結論,我們可以對具體的邏輯迴歸案例進行分析,找出兩個分類的臨界點即決策邊界。

線性的決策邊界

假設邏輯迴歸的假設函數爲hθ(x)=g(θ0+θ1x1+θ2x2)h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2),θ取值是[311]\left[\begin{matrix}-3&1&1\end{matrix}\right](參數的擬合過程老師沒有給出,此處的目的是爲了解釋決策邊界,而不是參數的擬合),根據上面的推導過程有以下的結論:

  • z=θTX>=0z=θ^TX>=0時,y=1,即θ0+θ1x1+θ2x2>=0θ_0+θ_1*x_1+θ_2*x_2 >=0,帶入θ值,
    3+x1+x2>=0-3+x_1+x_2 >=0
    x1+x2>=3x_1+x_2 >=3時,y=1
  • 同理當z=θTX<0z=θ^TX<0時,y=0,即x1+x2<3x_1+x_2 <3時。
    在這裏插入圖片描述
    如上圖所示,所有的元素以中間紫色的直線爲界分爲兩部分,藍色爲y=0,紅色的y=1,紫色的直線就是決策邊界。
    需要注意的是當θ確定後,決策邊界就確定了,它是假設函數的屬性,不是訓練集的屬性。

圓形的決策邊界

假設邏輯迴歸的假設函數爲hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2),θ取值是[10011]\left[\begin{matrix}-1&0&0&1&1\end{matrix}\right],根據上面的推導過程有以下的結論:

  • z=θTX>=0z=θ^TX>=0時,y=1,即θ0+θ1x1+θ2x2+θ3x12+θ4x22>=0θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2 >=0,帶入θ值,
    1+x12+x22>=0-1+x_1^2+x_2^2>=0
    x12+x22>=1x_1^2+x_2^2 >=1時,y=1
  • 同理當z=θTX<0z=θ^TX<0時,y=0,即x12+x22<1x_1^2+x_2^2 <1時。
    在這裏插入圖片描述
    對應的決策邊界是個圓形。

不規則的決策邊界

通過調整假設函數,可以得出不同的決策邊界。
在這裏插入圖片描述

代價函數

代價函數是擬合參數的手段,回顧一下線性迴歸的代價函數爲:
J(θ)=12mi=1m(hθ(x(i))y(i))2=1mi=1m12(hθ(x(i))y(i))2J(θ )=\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
假設:cost(hθ(x(i)),y(i))=12(hθ(x(i))y(i))2cost(h_θ(x^{(i)}), y^{(i)})=\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
簡化一下,去掉i cost(hθ(x),y)=12(hθ(x)y)2cost(h_θ(x), y)=\frac{1}{2}(h_θ(x)-y)^2
因爲在邏輯迴歸中hθ(x)=11+eθTXh_θ(x)=\frac{1}{1+e^{-θ^TX}}
則代入到J(θ)J(θ)中後畫出的圖形如下圖所示,有很多局部優化點,這種圖形稱之爲“非凸函數”,不利於進行梯度下降:在這裏插入圖片描述
下面給出邏輯迴歸的代價函數:
cost(hθ(x),y)={log(hθ(x))ify=1log(1hθ(x))ify=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\}
該公式等價於:
cost(hθ(x),y)={ylog(hθ(x))(1y)log(1hθ(x))}cost(h_θ(x), y)= \left\{ \begin{aligned} -y*log(h_θ(x)) -(1-y)log(1 - h_θ(x)) \end{aligned} \right\}

y=1的情況下,代價函數的圖形如下所示,y軸代表代價函數的值,則當hθ(x)h_θ(x)趨近於1時代價函數趨近於0,所以可知hθ(x)=1h_θ(x)=1時,y=1的概率最大:
在這裏插入圖片描述

y=0的情況下,代價函數的圖形如下所示,y軸代表代價函數的值,則當hθ(x)h_θ(x)趨近於0時代價函數趨近於0,所以可知hθ(x)=0h_θ(x)=0時,y=0的概率最大:
在這裏插入圖片描述
這與我們的推想是一致的,當預測值與實際值一致時,沒有代價:

  • hθ(x)=0h_θ(x)=0時,y=0的概率最大,代價爲0;
  • hθ(x)=1h_θ(x)=1時,y=1的概率最大,代價爲0;

我們同樣可以使用梯度下降法去求θ,梯度下降法可以參考線性迴歸中的描述。
梯度下降並不是唯一的算法,也可以使用conjugate gradiat、BFGS、L-BFGS算法計算,這些算法更加複雜也更加智能,計算速率也更快。

多類別分類算法

多類別分類問題,可以看成是多個二分類問題,假設現在y的取值範圍變成了(1,2,3),可以定義以下3個假設函數:

  • hθ(1)(x)h^{(1)}_θ(x),表示特定θX的情況下,y=1的概率:P(y=1|x;θ)
  • hθ(2)(x)h^{(2)}_θ(x),表示特定θX的情況下,y=2的概率:P(y=2|x;θ)
  • hθ(3)(x)h^{(3)}_θ(x),表示特定θX的情況下,y=3的概率:P(y=3|x;θ)

所以假設函數可以表示爲:hθ(i)(x)=P(y=ix;θ)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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章