邏輯迴歸原理小結

邏輯迴歸是一個分類算法,它能夠處理二元分類以及多元分類。雖然它名字裏面有「迴歸」兩個字,卻不是一個迴歸算法。那爲何有「迴歸」這個誤導性的詞呢?我的認爲,雖然邏輯迴歸是分類模型,可是它的原理裏面卻殘留着迴歸模型的影子,本文對邏輯迴歸原理作一個總結。算法

1、從線性迴歸到邏輯迴歸

    咱們知道,線性迴歸的模型是求出輸出特徵向量Y和輸入樣本矩陣X之間的線性關係係數\(\theta\),知足\(\mathbf{Y = X\theta}\)。此時咱們的Y是連續的,因此是迴歸模型。若是咱們想要Y是離散的話,怎麼辦呢?一個能夠想到的辦法是,咱們對於這個Y再作一次函數轉換,變爲\(g(Y)\)。若是咱們令\(g(Y)\)的值在某個實數區間的時候是類別A,在另外一個實數區間的時候是類別B,以此類推,就獲得了一個分類模型。若是結果的類別只有兩種,那麼就是一個二元分類模型了。邏輯迴歸的出發點就是從這來的。下面咱們開始引入二元邏輯迴歸。微信

2、二元邏輯迴歸的模型

    上一節咱們提到對線性迴歸的結果作一個在函數g上的轉換,能夠變化爲邏輯迴歸。這個函數g在邏輯迴歸中咱們通常取爲sigmoid函數,形式以下:機器學習

    \(g(z) = \frac{1}{1+e^{-z}}\) 函數

    它有一個很是好的性質,即當z趨於正無窮時,\(g(z)\)趨於1,而當z趨於負無窮時,\(g(z)\)趨於0,這很是適合於咱們的分類機率模型。另外,它還有一個很好的導數性質:學習

    \(g^{'}(z) = g(z)(1-g(z))\) 優化

    這個經過函數對\(g(z)\)求導很容易獲得,後面咱們會用到這個式子。spa

    若是咱們令\(g(z)\)中的z爲:\({z = x\theta}\),這樣就獲得了二元邏輯迴歸模型的通常形式:rest

    \(h_{\theta}(x) = \frac{1}{1+e^{-x\theta}}\) it

    其中x爲樣本輸入,\(h_{\theta}(x)\)爲模型輸出,能夠理解爲某一分類的機率大小。而\(\theta\)爲分類模型的要求出的模型參數。對於模型輸出\(h_{\theta}(x)\),咱們讓它和咱們的二元樣本輸出y(假設爲0和1)有這樣的對應關係,若是\(h_{\theta}(x) >;0.5\) ,即\(x\theta >; 0\), 則y爲1。若是\(h_{\theta}(x) <; 0.5\),即\(x\theta <; 0\), 則y爲0。y=0.5是臨界狀況,此時\(x\theta = 0\)爲, 從邏輯迴歸模型自己沒法肯定分類。class

    \(h_{\theta}(x)\)的值越小,而分類爲0的的機率越高,反之,值越大的話分類爲1的的機率越高。若是靠近臨界點,則分類準確率會降低。

    此處咱們也能夠將模型寫成矩陣模式:

    \(h_{\theta}(X) = \frac{1}{1+e^{-X\theta}}\) 

    其中\(h_{\theta}(X)\)爲模型輸出,爲 mx1的維度。X爲樣本特徵矩陣,爲mxn的維度。\(\theta\)爲分類的模型係數,爲nx1的向量。

    理解了二元分類迴歸的模型,接着咱們就要看模型的損失函數了,咱們的目標是極小化損失函數來獲得對應的模型係數\(\theta\)

3、二元邏輯迴歸的損失函數

    回顧下線性迴歸的損失函數,因爲線性迴歸是連續的,因此可使用模型偏差的的平方和來定義損失函數。可是邏輯迴歸不是連續的,天然線性迴歸損失函數定義的經驗就用不上了。不過咱們能夠用最大似然法來推導出咱們的損失函數。

    咱們知道,按照第二節二元邏輯迴歸的定義,假設咱們的樣本輸出是0或者1兩類。那麼咱們有:

    \(P(y=1|x,\theta ) = h_{\theta}(x)\)

    \(P(y=0|x,\theta ) = 1- h_{\theta}(x)\)

     把這兩個式子寫成一個式子,就是:

    \(P(y|x,\theta ) = h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y}\)

    其中y的取值只能是0或者1。

    獲得了y的機率分佈函數表達式,咱們就能夠用似然函數最大化來求解咱們須要的模型係數\(\theta\)

    爲了方便求解,這裏咱們用對數似然函數最大化,對數似然函數取反即爲咱們的損失函數\(J(\theta\))。其中:

    似然函數的代數表達式爲:

    \(L(\theta) = \prod\limits_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}\)

    其中m爲樣本的個數。

    對似然函數對數化取反的表達式,即損失函數表達式爲:

    \(J(\theta) = -lnL(\theta) = -\sum\limits_{i=1}^{m}(y^{(i)}log(h_{\theta}(x^{(i)}))+ (1-y^{(i)})log(1-h_{\theta}(x^{(i)})))\)

     損失函數用矩陣法表達更加簡潔:

    \(J(\theta) = -Y^Tlogh_{\theta}(X) - (E-Y)^T log(E-h_{\theta}(X))\)

    其中E爲全1向量。

4、二元邏輯迴歸的損失函數的優化方法

    對於二元邏輯迴歸的損失函數極小化,有比較多的方法,最多見的有梯度降低法,座標軸降低法,等牛頓法等。這裏推導出梯度降低法中\(\theta\)每次迭代的公式。因爲代數法推導比較的繁瑣,我習慣於用矩陣法來作損失函數的優化過程,這裏給出矩陣法推導二元邏輯迴歸梯度的過程。

    對於\(J(\theta) = -Y^T logh_{\theta}(X) - (E-Y)^T log(E-h_{\theta}(X))\),咱們用\(J(\theta)\)\(\theta\)向量求導可得:

    \(\frac{\partial}{\partial\theta}J(\theta) = X^T[\frac{1}{h_{\theta}(X)}\odot h_{\theta}(X)\odot (E-h_{\theta}(X))\odot (-Y)] + X^T[\frac{1}{E-h_{\theta}(X)}\odot h_{\theta}(X)\odot (E-h_{\theta}(X))\odot (E-Y)]\)

    這一步咱們用到了向量求導的鏈式法則,和下面三個基礎求導公式的矩陣形式:

    \(\frac{\partial}{\partial x}logx = 1/x\)

    $\frac{\partial}{\partial z}g(z) = g(z)(1-g(z))   (g(z)爲sigmoid函數) $ 

    \(\frac{\partial x\theta}{\partial \theta} =  x\) 

    對於剛纔的求導公式咱們進行化簡可得:

    \(\frac{\partial}{\partial\theta}J(\theta) = X^T(h_{\theta}(X) - Y )\)

    從而在梯度降低法中每一步向量\(\theta\)的迭代公式以下:

    \(\theta = \theta - \alpha X^T(h_{\theta}(X) - Y )\)

    其中,\(\alpha\)爲梯度降低法的步長。

    實踐中,咱們通常不用操心優化方法,大部分機器學習庫都內置了各類邏輯迴歸的優化方法,不過了解至少一種優化方法仍是有必要的。

 

5、二元邏輯迴歸的正則化

    邏輯迴歸也會面臨過擬合問題,因此咱們也要考慮正則化。常見的有L1正則化和L2正則化。

    邏輯迴歸的L1正則化的損失函數表達式以下,相比普通的邏輯迴歸損失函數,增長了L1的範數作做爲懲罰,超參數\(\alpha\)做爲懲罰係數,調節懲罰項的大小。

    二元邏輯迴歸的L1正則化損失函數表達式以下:

    \(J(\theta) = -Y^T\bullet logh_{\theta}(X) - (E-Y)^T\bullet log(E-h_{\theta}(X)) +\alpha ||\theta||_1\)

    其中\(||\theta||_1\)\(\theta\)的L1範數。

    邏輯迴歸的L1正則化損失函數的優化方法經常使用的有座標軸降低法和最小角迴歸法。

 

    二元邏輯迴歸的L2正則化損失函數表達式以下:

    \(J(\theta) = -Y^T\bullet logh_{\theta}(X) - (E-Y)^T\bullet log(E-h_{\theta}(X)) + \frac{1}{2}\alpha||\theta||_2^2\)

    其中\(||\theta||_2\)\(\theta\)的L2範數。

    邏輯迴歸的L2正則化損失函數的優化方法和普通的邏輯迴歸相似。

    

6、二元邏輯迴歸的推廣:多元邏輯迴歸

    前面幾節咱們的邏輯迴歸的模型和損失函數都侷限於二元邏輯迴歸,實際上二元邏輯迴歸的模型和損失函數很容易推廣到多元邏輯迴歸。好比老是認爲某種類型爲正值,其他爲0值,這種方法爲最經常使用的one-vs-rest,簡稱OvR.

    另外一種多元邏輯迴歸的方法是Many-vs-Many(MvM),它會選擇一部分類別的樣本和另外一部分類別的樣原本作邏輯迴歸二分類。最經常使用的是One-Vs-One(OvO)。OvO是MvM的特例。每次咱們選擇兩類樣原本作二元邏輯迴歸。

    這裏只介紹多元邏輯迴歸的softmax迴歸的一種特例推導:

    首先回顧下二元邏輯迴歸。

    \(P(y=1|x,\theta ) = h_{\theta}(x) =  \frac{1}{1+e^{-x\theta}} = \frac{e^{x\theta}}{1+e^{x\theta}}\)

    \(P(y=0|x,\theta ) = 1- h_{\theta}(x) = \frac{1}{1+e^{x\theta}}\)

    其中y只能取到0和1。則有:

    \(ln\frac{P(y=1|x,\theta )}{P(y=0|x,\theta)} = x\theta\)

    若是咱們要推廣到多元邏輯迴歸,則模型要稍微作下擴展。

    咱們假設是K元分類模型,即樣本輸出y的取值爲1,2,。。。,K。

    根據二元邏輯迴歸的經驗,咱們有:

    \(ln\frac{P(y=1|x,\theta )}{P(y=K|x,\theta)} = x\theta_1\)

    \(ln\frac{P(y=2|x,\theta )}{P(y=K|x,\theta)} = x\theta_2\) 

    ...

    \(ln\frac{P(y=K-1|x,\theta )}{P(y=K|x,\theta)} = x\theta_{K-1}\) 

    上面有K-1個方程。

    加上機率之和爲1的方程以下:

    \(\sum\limits_{i=1}^{K}P(y=i|x,\theta ) = 1\)

    從而獲得K個方程,裏面有K個邏輯迴歸的機率分佈。

    解出這個K元一次方程組,獲得K元邏輯迴歸的機率分佈以下:

    \(P(y=k|x,\theta ) =  e^{x\theta_k} \bigg/ 1+\sum\limits_{t=1}^{K-1}e^{x\theta_t}\)  k = 1,2,...K-1

    \(P(y=K|x,\theta ) =  1 \bigg/ 1+\sum\limits_{t=1}^{K-1}e^{x\theta_t}\)

    多元邏輯迴歸的損失函數推導以及優化方法和二元邏輯迴歸相似,這裏就不累述。

7、7.小結

    邏輯迴歸尤爲是二元邏輯迴歸是很是常見的模型,訓練速度很快,雖然使用起來沒有支持向量機(SVM)那麼佔主流,可是解決普通的分類問題是足夠了,訓練速度也比起SVM要快很多。若是你要理解機器學習分類算法,那麼第一個應該學習的分類算法我的以爲應該是邏輯迴歸。理解了邏輯迴歸,其餘的分類算法再學習起來應該沒有那麼難了。

 

 (歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)

相關文章
相關標籤/搜索