邏輯回歸是一個分類算法,它可以處理二元分類以及多元分類。雖然它名字里面有“回歸”兩個字,卻不是一個回歸算法。那為什么有“回歸”這個誤導性的詞呢?個人認為,雖然邏輯回歸是分類模型,但是它的原理里面卻殘留著回歸模型的影子,本文對邏輯回歸原理做一個總結(jié)。
1. 從線性回歸到邏輯回歸
我們知道,線性回歸的模型是求出輸出特征向量Y和輸入樣本矩陣X之間的線性關(guān)系系數(shù)θ,滿足Y=Xθ。此時我們的Y是連續(xù)的,所以是回歸模型。如果我們想要Y是離散的話,怎么辦呢?一個可以想到的辦法是,我們對于這個Y再做一次函數(shù)轉(zhuǎn)換,變?yōu)間(Y)。如果我們令g(Y)的值在某個實數(shù)區(qū)間的時候是類別A,在另一個實數(shù)區(qū)間的時候是類別B,以此類推,就得到了一個分類模型。如果結(jié)果的類別只有兩種,那么就是一個二元分類模型了。邏輯回歸的出發(fā)點就是從這來的。下面我們開始引入二元邏輯回歸。
2. 二元邏輯回歸的模型
上一節(jié)我們提到對線性回歸的結(jié)果做一個在函數(shù)g上的轉(zhuǎn)換,可以變化為邏輯回歸。這個函數(shù)g在邏輯回歸中我們一般取為sigmoid函數(shù),形式如下:
$$
g(z)=11+e?z
$$
它有一個非常好的性質(zhì),即當z趨于正無窮時,g(z)趨于1,而當z趨于負無窮時,g(z)趨于0,這非常適合于我們的分類概率模型。另外,它還有一個很好的導數(shù)性質(zhì):
$ g′(z)=g(z)(1?g(z)) $
這個通過函數(shù)對g(z)求導很容易得到,后面我們會用到這個式子。
如果我們令g(z)中的z為:z=xθ,這樣就得到了二元邏輯回歸模型的一般形式:
$ hθ(x)=11+e?xθ $
其中x為樣本輸入,hθ(x)為模型輸出,可以理解為某一分類的概率大小。而θ為分類模型的要求出的模型參數(shù)。對于模型輸出hθ(x),我們讓它和我們的二元樣本輸出y(假設(shè)為0和1)有這樣的對應關(guān)系,如果hθ(x)>0.5 ,即xθ>0, 則y為1。如果hθ(x)<0.5,即xθ<0, 則y為0。y=0.5是臨界情況,此時xθ=0為, 從邏輯回歸模型本身無法確定分類。
hθ(x)的值越小,而分類為0的的概率越高,反之,值越大的話分類為1的的概率越高。如果靠近臨界點,則分類準確率會下降。
此處我們也可以將模型寫成矩陣模式:
$ hθ(X)=11+e?Xθ $
其中hθ(X)為模型輸出,為 mx1的維度。X為樣本特征矩陣,為mxn的維度。θ為分類的模型系數(shù),為nx1的向量。
理解了二元分類回歸的模型,接著我們就要看模型的損失函數(shù)了,我們的目標是極小化損失函數(shù)來得到對應的模型系數(shù)θ。
3. 二元邏輯回歸的損失函數(shù)
回顧下線性回歸的損失函數(shù),由于線性回歸是連續(xù)的,所以可以使用模型誤差的的平方和來定義損失函數(shù)。但是邏輯回歸不是連續(xù)的,自然線性回歸損失函數(shù)定義的經(jīng)驗就用不上了。不過我們可以用最大似然法來推導出我們的損失函數(shù)。
我們知道,按照第二節(jié)二元邏輯回歸的定義,假設(shè)我們的樣本輸出是0或者1兩類。那么我們有:
P(y=1|x,θ)=hθ(x)
P(y=0|x,θ)=1?hθ(x)
把這兩個式子寫成一個式子,就是:
P(y|x,θ)=hθ(x)y(1?hθ(x))1?y
其中y的取值只能是0或者1。
用矩陣法表示,即為:
P(Y|X,θ)=hθ(X)Y(E?hθ(X))1?Y,其中E為單位向量。
得到了y的概率分布函數(shù)表達式,我們就可以用似然函數(shù)最大化來求解我們需要的模型系數(shù)θ。
為了方便求解,這里我們用對數(shù)似然函數(shù)最大化,對數(shù)似然函數(shù)取反即為我們的損失函數(shù)J(θ)。其中:
似然函數(shù)的代數(shù)表達式為:
L(θ)=∏i=1m(hθ(x(i)))y(i)(1?hθ(x(i)))1?y(i)
其中m為樣本的個數(shù)。
對似然函數(shù)對數(shù)化取反的表達式,即損失函數(shù)表達式為:
J(θ)=?lnL(θ)=?∑i=1m(y(i)log(hθ(x(i)))+(1?y(i))log(1?hθ(x(i))))
損失函數(shù)用矩陣法表達更加簡潔:
J(θ)=?Y?loghθ(X)?(E?Y)?log(E?hθ(X))
其中E為單位向量,?為內(nèi)積。
4. 二元邏輯回歸的損失函數(shù)的優(yōu)化方法
對于二元邏輯回歸的損失函數(shù)極小化,有比較多的方法,最常見的有梯度下降法,坐標軸下降法,等牛頓法等。這里推導出梯度下降法中θ每次迭代的公式。由于代數(shù)法推導比較的繁瑣,我習慣于用矩陣法來做損失函數(shù)的優(yōu)化過程,這里給出矩陣法推導二元邏輯回歸梯度的過程。
對于J(θ)=?Y?loghθ(X)?(E?Y)?log(E?hθ(X)),我們用J(θ)對θ向量求導可得:
??θJ(θ)=?Y?XT1hθ(X)hθ(X)(1?hθ(X))+(E?Y)?XT11?hθ(X)hθ(X)(1?hθ(X))
這一步我們用到了矩陣求導的鏈式法則,和下面三個矩陣求導公式:
??XlogX=1/X
??zg(z)=g(z)(1?g(z))(g(z)為sigmoid函數(shù))
??θXθ=XT
對于剛才的求導公式我們進行化簡可得:
??θJ(θ)=XT(hθ(X)?Y)
從而在梯度下降法中每一步向量θ的迭代公式如下:
θ=θ?αXT(hθ(X)?Y)
其中,α為梯度下降法的步長。
實踐中,我們一般不用操心優(yōu)化方法,大部分機器學習庫都內(nèi)置了各種邏輯回歸的優(yōu)化方法,不過了解至少一種優(yōu)化方法還是有必要的。
5. 二元邏輯回歸的正則化
邏輯回歸也會面臨過擬合問題,所以我們也要考慮正則化。常見的有L1正則化和L2正則化。
邏輯回歸的L1正則化的損失函數(shù)表達式如下,相比普通的邏輯回歸損失函數(shù),增加了L1的范數(shù)做作為懲罰,超參數(shù)α作為懲罰系數(shù),調(diào)節(jié)懲罰項的大小。
二元邏輯回歸的L1正則化損失函數(shù)表達式如下:
J(θ)=?Y?loghθ(X)?(E?Y)?log(1?hθ(X))+α||θ||1
其中||θ||1為θ的L1范數(shù)。
邏輯回歸的L1正則化損失函數(shù)的優(yōu)化方法常用的有坐標軸下降法和最小角回歸法。
二元邏輯回歸的L2正則化損失函數(shù)表達式如下:
J(θ)=?Y?loghθ(X)?(E?Y)?log(1?hθ(X))+12α||θ||22
其中||θ||2為θ的L2范數(shù)。
邏輯回歸的L2正則化損失函數(shù)的優(yōu)化方法和普通的邏輯回歸類似。
6. 二元邏輯回歸的推廣:多元邏輯回歸
前面幾節(jié)我們的邏輯回歸的模型和損失函數(shù)都局限于二元邏輯回歸,實際上二元邏輯回歸的模型和損失函數(shù)很容易推廣到多元邏輯回歸。比如總是認為某種類型為正值,其余為0值,這種方法為最常用的one-vs-reset,簡稱OvR.
另一種多元邏輯回歸的方法是Many-vs-Many(MvM),它會選擇一部分類別的樣本和另一部分類別的樣本來做邏輯回歸二分類。最常用的是One-Vs-One(OvO)。OvO是MvM的特例。每次我們選擇兩類樣本來做二元邏輯回歸。
這里只介紹多元邏輯回歸的softmax回歸的一種特例推導:
首先回顧下二元邏輯回歸。
P(y=1|x,θ)=hθ(x)=11+e?xθ=exθ1+exθ
P(y=0|x,θ)=1?hθ(x)=11+exθ
其中y只能取到0和1。則有:
lnP(y=1|x,θ)P(y=0|x,θ)=xθ
如果我們要推廣到多元邏輯回歸,則模型要稍微做下擴展。
我們假設(shè)是K元分類模型,即樣本輸出y的取值為1,2,。。。,K。
根據(jù)二元邏輯回歸的經(jīng)驗,我們有:
lnP(y=1|x,θ)P(y=K|x,θ)=xθ1
lnP(y=2|x,θ)P(y=K|x,θ)=xθ2
...
lnP(y=K?1|x,θ)P(y=K|x,θ)=xθK?1
上面有K-1個方程。
加上概率之和為1的方程如下:
∑i=1KP(y=i|x,θ)=1
從而得到K個方程,里面有K個邏輯回歸的概率分布。
解出這個K元一次方程組,得到K元邏輯回歸的概率分布如下:
P(y=k|x,θ)=exθk/1+∑t=1K?1exθt k = 1,2,...K-1
P(y=K|x,θ)=1/1+∑t=1K?1exθt
多元邏輯回歸的損失函數(shù)推導以及優(yōu)化方法和二元邏輯回歸類似,這里就不累述。
7.小結(jié)
邏輯回歸尤其是二元邏輯回歸是非常常見的模型,訓練速度很快,雖然使用起來沒有支持向量機(SVM)那么占主流,但是解決普通的分類問題是足夠了,訓練速度也比起SVM要快不少。如果你要理解機器學習分類算法,那么第一個應該學習的分類算法個人覺得應該是邏輯回歸。理解了邏輯回歸,其他的分類算法再學習起來應該沒有那么難了。