1. 程式人生 > >第5章 邏輯迴歸(一 理論講解)

第5章 邏輯迴歸(一 理論講解)

5.1邏輯迴歸理論

5.1.1邏輯迴歸引言

邏輯迴歸是一個分類演算法,它可以處理二元分類以及多元分類。雖然它名字裡面有“迴歸”兩個字,卻不是一個迴歸演算法。那為什麼有“迴歸”這個誤導性的詞呢?個人認為,雖然邏輯迴歸是分類模型,但是它的原理裡面卻殘留著迴歸模型的影子,筆者在前面對線性迴歸已經闡述清楚了,接下來筆者就要對邏輯迴歸進行講解了。

我們知道,線性迴歸的模型是求出輸出特徵向量YY和輸入樣本矩陣XX之間的線性關係係數θθ,滿足Y=XθY=Xθ。此時我們的YY是連續的,所以是迴歸模型。如果我們想要YY是離散的話,怎麼辦呢?一個可以想到的辦法是,我們對於這個YY再做一次函式轉換,變為g

(Y)g(Y)。如果我們令g(Y)g(Y)的值在某個實數區間的時候是類別AA,在另一個實數區間的時候是類別BB,以此類推,就得到了一個分類模型。如果結果的類別只有兩種,那麼就是一個二元分類模型了。邏輯迴歸的出發點就是從這來的。下面我們開始引入二元邏輯迴歸。

5.1.2二元邏輯迴歸的模型

對於使用邏輯迴歸進行分類,我們首先所需要解決的就是尋找分類邊界線。那麼什麼是分類邊界線呢?

在這裡插入圖片描述

圖1

以上兩幅圖分別對應著,當分類樣本具有兩個特徵值x1,x2x_1,x_2 時,樣本可進行線性可分,以及非線性可分的情況。而分類邊界,便是圖中所示的綠色直線與綠色曲線。(本文中只針對線性可分且特徵數為n

n的情況進行介紹)

而使用邏輯迴歸進行分類,就是要找到這樣的分類邊界,使其能夠儘可能地對樣本進行正確分類,也就是能夠儘可能地將兩種樣本分隔開來。於是我們可以大膽猜測,可以構造這樣一個函式(圖一中特徵數為2,分類邊界為直線,當特徵數為 n 時分類邊界為“超平面”),來對樣本集進行分隔:

z(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)z(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}

其中i=1,2,...,mi=1,2,...,m ,表示第 ii 個樣本, nn 表示特徵數,當z(x(i))>0z(x^{(i)})>0 時,對應著樣本點位於分界線上方,可將其分為"1"類;當z(x(i))<0z(x^{(i)})<0 時 ,樣本點位於分界線下方,將其分為“0”類。

我們很容易聯想到前面介紹過的線性迴歸,該演算法同樣是建構函式:

hθ(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)h_{\theta}(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}

但與邏輯迴歸不同的是,線性迴歸模型輸入一個待預測樣本的特徵值x(i)=[x1(i),x2(i),...,xn(i)]Tx^{(i)}=[x_1^{(i)},x_2^{(i)},...,x_n^{(i)}]^T ,輸出則為預測值。而邏輯迴歸作為分類演算法,它的輸出是0/1。或許你之前接觸過具有這種性質的函式,該函式稱為海維塞德階躍函式(Heaviside step function),或者直接稱為單位階躍函式。然而,海維塞德階躍函式的問題在於:該函式在跳躍點上從0瞬間跳躍到1,這個瞬間跳躍過程有時很難處理。幸好,另一個函式也有類似的性質,且數學上更易處理,這就是Sigmoid函式。接下來將介紹一下 sigmoid 函式。 Sigmoid函式具體的計算公式如下:

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}} 它有一個非常好的性質,即當zz趨於正無窮時,g(z)g(z)趨於11,而當z趨於負無窮時,g(z)g(z)趨於00,這非常適合於我們的分類概率模型。另外,它還有一個很好的導數性質:

g(z)=g(z)(1g(z))g'(z)=g(z)(1-g(z))

這個通過函式對g(z)g(z)求導很容易得到,後面我們會用到這個式子。 下圖2給出了Sigmoid函式在不同座標尺度下的兩條曲線圖。當xx為0時, Sigmoid函式值為0.5。隨著xx的增大,對應的Sigmoid值將逼近於1;而隨著xx的減小, Sigmoid值將逼近於0。如果橫座標刻度足夠大(圖2下圖), Sigmoid函式看起來很像一個階躍函式。

因此,為了實現Logistic迴歸分類器,我們可以在每個特徵上都乘以一個迴歸係數,然後把所有的結果值相加,將這個總和代入Sigmoid函式中,進而得到一個範圍在0~1之間的數值。任何大於0.5的資料被分入1類,小於0.5即被歸入0類。所以, Logistic迴歸也可以被看成是一種概率估計。即由函式影象可以看出, sigmoid 函式可以很好地將 (−∞,∞) 內的數對映到 (0,1) 上。於是我們可以將 g(z)0.5g(z)≥0.5 時分為"1"類, g(z)<0.5g(z)<0.5 時分為"0"類。即:

在這裡插入圖片描述 其中 yy 表示分類結果。sigmoid 函式實際表達的是將樣本分為“1”類的概率,

在這裡插入圖片描述

圖2兩種座標尺度下的Sigmoid函式圖

【注】上圖的橫座標為5到5,這時的曲線變化較為平滑;下圖橫座標的尺度足夠大,可以看到,在x=0x = 0點處Sigmoid函式看起來很像階躍函式。

在文已經給出了分類邊界:

z(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)=θTXz(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}=\theta^TX

其中:

在這裡插入圖片描述, 而x0(i)x_0^{(i)}是偏置項, nn 表示特徵數,i=1,2,...,mi=1,2,...,m 表示樣本數。 為了和線性迴歸作比較,網路結構圖如圖3,邏輯迴歸與自適應線性網路非常相似,兩者的區別在於邏輯迴歸的啟用函式是Sigmoid function而自適應線性網路的啟用函式是y=xy=x,兩者的網路結構如圖4所示。logistic迴歸就是一個線性分類模型,它與線性迴歸的不同點在於:為了將線性迴歸輸出的很大範圍的數,例如從負無窮到正無窮,壓縮到0和1之間,這樣的輸出值表達為“可能性”才能說服廣大民眾。當然了,把大值壓縮到這個範圍還有個很好的好處,就是可以消除特別冒尖的變數的影響(不知道理解的是否正確)。而實現這個偉大的功能其實就只需要平凡一舉,也就是在輸出加一個logistic函式。另外,對於二分類來說,可以簡單的認為:如果樣本xx屬於正類的概率大於0.5,那麼就判定它是正類,否則就是負類。

在這裡插入圖片描述

圖3

在這裡插入圖片描述

圖4

所以說,LogisticRegression 就是一個被logistic方程歸一化後的線性迴歸。結合前文的sigmoid函式我們可以構造出邏輯迴歸模型函式:

hθ(x(i))=g(z)=g(θTX)=11+eθTXh_{\theta}(x^{(i)})=g(z)=g(\theta^TX)=\frac{1}{1+e^{-\theta^TX}}

理解了二元分類迴歸的模型,接著我們就要看模型的損失函數了,我們的目標是極小化損失函式來得到對應的模型係數θθ

5.1.3邏輯迴歸的代價函式

線上性迴歸中,我們是利用均方誤差來作為代價函式:

在這裡插入圖片描述 同樣的,假設我們仍舊使用均方誤差來作為邏輯迴歸大家函式,會出現什麼效果呢?將g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}帶入上式,我們會發現, 為一個非凸函式,也就是說該函式存在許多區域性最小值點,在求解引數的過程中很容易陷入區域性最小值點,而無法求得真正的最小值點。

在這裡插入圖片描述

圖5

為什麼會出現這樣的現象呢?那是因為邏輯迴歸不是連續的,自然線性迴歸損失函式定義的經驗就用不上了。線上性迴歸,筆者用最大似然法來推匯出我們的損失函式,最後也得到了損失函式。是不是也可以用於邏輯迴歸呢?答案是肯定的。前文也說過了,邏輯迴歸可以看成是一種概率估計,而且sigmoid 函式實際表達的是將樣本分為“1”類的概率,那麼這裡就可以用最大似然估計推導損失函式,也就是說,使用 sigmoid 函式求解出來的值為類1的後驗估計p(y=1x,θ)p(y=1|x,\theta) ,故我們可以得到: p(y=1x,θ)=hθ(x(i))p(y=1|x,\theta)=h_{\theta}(x^{(i)})p(y=1x,θ)=1hθ(x(i))p(y=1|x,\theta)=1-h_{\theta}(x^{(i)})

其中p(y=1x,θ)p(y=1|x,\theta)