邏輯回歸(Logistic Regression)是一種經典的線性分類算法。邏輯回歸雖然叫回歸,但是其模型是用來分類的。
讓我們先從最簡單的二分類問題開始。給定特征向量x=([x1,x2,...,xn])T以及每個特征的權重w=([w1,w2,...,wn])T,閾值為b,目標y是兩個分類標簽---1和-1。為了便於敘述,把b並入權重向量w,記作
,特征向量則擴充為
。(為了簡便的緣故,下面還是都寫成w和x)
事實上,我們已經學習過一種分類算法了。在《機器學習---感知機(Machine Learning Perceptron)》一文中,我們知道感知機是將線性方程式嵌套入符號函數,其對目標y的估計是:
。如果樣本的wx>0,那么估計其目標是1 ,如果樣本的wx<0,那么估計其目標是-1。如下圖所示,可以看出sign函數其實是一種單位階躍函數。這樣的分類是比較粗糙的,因為你不知道分類閾值0附近的情況。比如說如果訓練集的類別不均衡,那么分類平面肯定會向類別多的那一邊靠攏,如果我們想要結果比較“公正”,就需要根據情況設定不同的分類閾值。此外,感知機解決的是“硬分類”問題,即分類結果就是目標函數的決策結果,而另外一類稱為“軟分類”問題,即目標函數輸出的是不同類別對應的概率,最后的分類結果為概率最大的類。顯然,我們需要不同的算法來解決“軟分類”問題。因此,最好能把階躍函數變成連續函數,把線性方程映射到這個函數上,並且能讓這個函數上的每個點代表分類概率。
(注:wx是特征向量和權重向量的點積/內積,wx=w1x1+w2x2+...+wnxn)
階躍函數(step function):

有人想到正態分布的累積分布函數符合這個要求,其函數上的點代表累積概率,比如P(y=1|x<value),其對應的模型被稱之為probit回歸模型。但是由於這個函數比較復雜(
),而且不是太容易解釋,這限制了它的應用。
因此,我們最好能找到和正態分布的累積分布函數近似的函數。又有人發現邏輯分布的累積分布函數和正態分布的累積分布函數幾乎一樣,並且邏輯分布的累積分布函數比較簡單(
),而且函數上的點可以用來表示概率。
正態分布的累積分布函數和最佳邏輯分布的累積分布函數:

人們選擇使用標准邏輯分布的累積分布函數作為映射函數,其在學術上被稱為sigmoid函數。
sigmoid函數:


把線性組合wx代入sigmoid函數就得到邏輯函數(logistic fuction),其對應的模型叫logit回歸模型,也叫logistic回歸模型:

邏輯函數上的點對應的就是給定特征x,目標為1的條件概率:

分類閾值可以根據實際情況選擇。假如我們選擇0.5作為分類閾值來划分,那么如果樣本f(x)>0.5,我們估計其目標為1,如果樣本f(x)<0.5,我們估計其目標為-1。如果把對y的估計寫成和感應機一樣的形式,那就是
。
在接下去之前我們先思考幾個問題:
1. sigmoid函數是怎么得來的?
因為目標y是兩個分類標簽,因此我們假設y服從伯努利分布(y不是0就是1),y=1的概率為p,那么目標y的概率質量函數就是:
,將其寫成條件概率表達式就是:
。

而指數分布族的一般表達式為:
。
如果令:θ=p,h(x)=1,T(x)=x,η(θ)=lnp/(1−p),A(θ)=−ln(1−p)。那么,伯努利分布就屬於指數分布族。
從上面可知:
,因此:
。
最后可以推導出:
。
此外,sigmoid函數很自然地出現在貝葉斯法的后驗概率(二分類問題)表達式里:

2. 為什么邏輯回歸稱作回歸?
除去歷史的原因,是因為邏輯回歸本質上是一個線性回歸模型,其線性組合表示分類為1的對數幾率。
什么是幾率?人們用事件發生與不發生的比值來表示事件發生的幾率(odds)。假設事件發生的概率是 p ,那么事件發生的幾率(odds)就是 p/(1-p) 。 odds 的值域從 0 到正無窮,幾率越大,表示事件發生的可能性越大。
假設給定樣本的特征值,該樣本屬於類別1的概率為:P(y=1|x)。因為只有兩種可能的分類,因此樣本屬於另一類的概率為:1-P(y=1|x)。
代入幾率計算公式后得到樣本屬於類別1的幾率:
兩邊取自然對數:
上述變換稱為logit變換。此時等式的左邊我們稱之為對數幾率(Log Odds),而等式的右邊就是線性回歸方程。因此,周志華老師在其西瓜書中稱邏輯回歸算法為對數幾率回歸,因為他覺得對數幾率回歸這個名稱更能反映算法的本質。
3. 為什么邏輯函數上的點可以用來表示分類概率?
因為wx的值域從負無窮大到正無窮大,正好對應對數幾率的值域(見下圖),而我們想要把wx映射到某種函數上,使得函數上的點可以代表概率,值域在0~1之間。因此,我們讓
,然后逐漸變換,最后可以得到
,這個函數就是邏輯函數,因此邏輯函數上的點可以用來代表分類概率。(上述變換過程實際上就是logit變換的逆過程)

現在我們已經搞清了邏輯回歸的本質,接下來就要對參數進行估計。估計出參數w,我們就可以得到邏輯回歸模型。
因為目標y是兩個分類標簽,因此我們假設y服從伯努利分布(y不是0就是1),那么目標y的概率質量函數就是:
,將其寫成條件概率表達式就是:
。
假設有m個獨立樣本,那么m個y之間也是相互獨立的。因此,目標y的聯合概率為:
。然后我們可以用極大似然估計法來求解。
先來回憶一下什么是極大似然估計法:極大似然估計法就是去找到能使模型產生出樣本數據的概率最大的參數θ,也就是找到
。由於
有連乘運算,通常對似然函數取對數計算,就可以把連乘變成求和,然后求導,取導數為0的極值點,就是想找的參數值。
因此,參數w的估計值就是:
。
對似然函數取自然對數:
;
參數w的估計值可以寫成:
。
因為我們一般用梯度下降法求解,因此給上式加上負號,參數w的估計值也就是:
。
這個損失函數也被稱為交叉熵(cross entropy):
,可以把它看成兩個概率分布之間的相似度,為了使估計的概率分布離真實的概率分布最接近,也就相當於讓這個損失函數達到最小值。
接着我們把
代入損失函數:

根據求導規則:
,
以及鏈式法則,對損失函數L求偏導可以得到:
。
只有當數據線性可分時,上式等於0才有解析解。否則,我們只能用梯度下降法等迭代算法對參數進行優化。批量梯度下降法參數更新公式為:
。
此外,用另一種方法可以推導得到損失函數的另一種形式,但是其本質都是一樣的。假設目標y分為1和-1兩類,那么我們可以得知:

目標y的概率密度函數就是:h(yx),將其寫成條件概率表達式就是:
。
然后還是用極大似然估計法,對似然函數取自然對數及負號,那么損失函數L就是:

對損失函數L求偏導可以得到:
。
批量梯度下降法參數更新公式為:
。
邏輯回歸的優點:(摘自周志華西瓜書)
- 直接對分類的可能性進行建模,無需事先假設數據的分布,這樣就避免了假設分布不准確所帶來的問題
- 不僅能預測出類別,還能給出近似的概率預測值,這對許多需要利用概率輔助決策的任務很有用
- 邏輯函數是任意階可導的凸函數,有很好的數學性質,現有的許多數值優化算法都可直接用於求取最優解
邏輯回歸的缺點:對數據特征間的獨立性要求較高;不適用於特征和目標為非線性關系的數據中;當特征空間很大、特征有缺失時,邏輯回歸的性能不是很好
