【ML】一文詳盡系列之邏輯回歸
- 2019 年 11 月 26 日
- 筆記
模型介紹
Logistic Regression 是一個非常經典的演算法,其中也包含了非常多的細節,曾看到一句話:如果面試官問你熟悉哪個機器學習模型,可以說 SVM,但千萬別說 LR,因為細節真的太多了。
Logistic Regression 雖然被稱為回歸,但其實際上是分類模型,並常用於二分類。Logistic Regression 因其簡單、可並行化、可解釋強深受工業界喜愛。
Logistic 回歸的本質是:假設數據服從這個分布,然後使用極大似然估計做參數的估計。
1.1 Logistic 分布
Logistic 分布是一種連續型的概率分布,其分布函數和密度函數分別為:
其中, 表示位置參數, 為形狀參數。我們可以看下其影像特徵:

Logistic 分布是由其位置和尺度參數定義的連續分布。Logistic 分布的形狀與正態分布的形狀相似,但是 Logistic 分布的尾部更長,所以我們可以使用 Logistic 分布來建模比正態分布具有更長尾部和更高波峰的數據分布。在深度學習中常用到的 函數就是 Logistic 的分布函數在 的特殊形式。
1.2 Logistic 回歸
之前說到 Logistic 回歸主要用於分類問題,我們以二分類為例,對於所給數據集假設存在這樣的一條直線可以將數據完成線性可分。

決策邊界可以表示為 ,假設某個樣本點 那麼可以判斷它的類別為 1,這個過程其實是感知機。
Logistic 回歸還需要加一層,它要找到分類概率 與輸入向量 的直接關係,然後通過比較概率值來判斷類別。
考慮二分類問題,給定數據集
考慮到 取值是連續的,因此它不能擬合離散變數。可以考慮用它來擬合條件概率 ,因為概率的取值也是連續的。
但是對於 (若等於零向量則沒有什麼求解的價值), 取值為 R ,不符合概率取值為 0 到 1,因此考慮採用廣義線性模型。
最理想的是單位階躍函數:
但是這個階躍函數不可微,對數幾率函數是一個常用的替代函數:
於是有:
我們將 視為 為正例的概率,則 為 為其反例的概率。兩者的比值稱為幾率(odds),指該事件發生與不發生的概率比值,若事件發生的概率為 。則對數幾率:
將 視為類後驗概率估計,重寫公式有:
也就是說,輸出 的對數幾率是由輸入 的線性函數表示的模型,這就是邏輯回歸模型。當 的值越接近正無窮, 概率值也就越接近 1。因此邏輯回歸的思路是,先擬合決策邊界(不局限於線性,還可以是多項式),再建立這個邊界與分類的概率聯繫,從而得到了二分類情況下的概率。
在這我們思考個問題,我們使用對數幾率的意義在哪?通過上述推導我們可以看到 Logistic 回歸實際上是使用線性回歸模型的預測值逼近分類任務真實標記的對數幾率,其優點有:
- 直接對分類的概率建模,無需實現假設數據分布,從而避免了假設分布不準確帶來的問題;
- 不僅可預測出類別,還能得到該預測的概率,這對一些利用概率輔助決策的任務很有用;
- 對數幾率函數是任意階可導的凸函數,有許多數值優化演算法都可以求出最優解。
1.3 代價函數
邏輯回歸模型的數學形式確定後,剩下就是如何去求解模型中的參數。在統計學中,常常使用極大似然估計法來求解,即找到一組參數,使得在這組參數下,我們的數據的似然度(概率)最大。
設:
似然函數:
為了更方便求解,我們對等式兩邊同取對數,寫成對數似然函數:
在機器學習中我們有損失函數的概念,其衡量的是模型預測錯誤的程度。如果取整個數據集上的平均對數似然損失,我們可以得到:
即在邏輯回歸模型中,我們最大化似然函數和最小化損失函數實際上是等價的。
1.4 求解
求解邏輯回歸的方法有非常多,我們這裡主要聊下梯度下降和牛頓法。優化的主要目標是找到一個方向,參數朝這個方向移動之後使得損失函數的值能夠減小,這個方向往往由一階偏導或者二階偏導各種組合求得。邏輯回歸的損失函數是:
1.4.1 隨機梯度下降
梯度下降是通過 對 的一階導數來找下降方向,並且以迭代的方式來更新參數,更新方式為 :
其中 為迭代次數。每次更新參數後,可以通過比較 小於閾值或者到達最大迭代次數來停止迭代。
1.4.2 牛頓法
牛頓法的基本思路是,在現有極小點估計值的附近對 f(x) 做二階泰勒展開,進而找到極小點的下一個估計值。假設 為當前的極小值估計值,那麼有:
然後令 φ,得到了 。因此有迭代更新式:
其中 為海森矩陣:
此外,這個方法需要目標函數是二階連續可微的,本文中的 是符合要求的。
1.5 正則化
正則化是一個通用的演算法和思想,所以會產生過擬合現象的演算法都可以使用正則化來避免過擬合。
在經驗風險最小化的基礎上(也就是訓練誤差最小化),儘可能採用簡單的模型,可以有效提高泛化預測精度。如果模型過於複雜,變數值稍微有點變動,就會引起預測精度問題。正則化之所以有效,就是因為其降低了特徵的權重,使得模型更為簡單。
正則化一般會採用 範式或者 範式,其形式分別為 和 。
1.5.1 L1 正則化
回歸,相當於為模型添加了這樣一個先驗知識: 服從零均值拉普拉斯分布。首先看看拉普拉斯分布長什麼樣子:
由於引入了先驗知識,所以似然函數這樣寫:
取 再取負,得到目標函數:
等價於原始損失函數的後面加上了 正則,因此 正則的本質其實是為模型增加了「模型參數服從零均值拉普拉斯分布」這一先驗知識。
1.5.2 L2 正則化
回歸,相當於為模型添加了這樣一個先驗知識: 服從零均值正態分布。
首先看看正態分布長什麼樣子:
由於引入了先驗知識,所以似然函數這樣寫:
取 再取負,得到目標函數:
等價於原始的損失函數後面加上了 正則,因此 正則的本質其實是為模型增加了「模型參數服從零均值正態分布」這一先驗知識。
1.5.3 L1 和 L2 的區別
從上面的分析中我們可以看到, 正則化增加了所有權重 參數的絕對值之和逼迫更多 為零,也就是變稀疏( 因為其導數也趨 0, 奔向零的速度不如 給力了)。我們對稀疏規則趨之若鶩的一個關鍵原因在於它能實現特徵的自動選擇。一般來說,大部分特徵 都是和最終的輸出 沒有關係或者不提供任何資訊的。在最小化目標函數的時候考慮 這些額外的特徵,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的特徵權重反而會被考慮,從而干擾了對正確 的預測。 正則化的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些無用的特徵,也就是把這些特徵對應的權重置為 0。
正則化中增加所有權重 參數的平方之和,逼迫所有 儘可能趨向零但不為零( 的導數趨於零)。因為在未加入 正則化發生過擬合時,擬合函數需要顧忌每一個點,最終形成的擬合函數波動很大,在某些很小的區間里,函數值的變化很劇烈,也就是某些 值非常大。為此, 正則化的加入就懲罰了權重變大的趨勢。
我們以二維樣本為例,圖解闡述加入 正則化和 正則化之後目標函數求解時發生的變化。
- 原函數曲線等高線(同顏色曲線上,每一組 帶入後值都相同)

那現在我們看下加了 正則化和 正則化之後,目標函數求解的時候,最終解會有什麼變化。

從上邊兩幅圖中我們可以看出:
- 如果不加 和 正則化的時候,對於線性回歸這種目標函數凸函數的話,我們最終的結果就是最裡邊的紫色的小圈圈等高線上的點。
- 當加入 正則化的時候,我們先畫出 的影像,也就是一個菱形,代表這些曲線上的點算出來的 範數 都為 。那我們現在的目標是不僅是原曲線算的值要小(越來越接近中心的紫色圈圈),還要使得這個菱形越小越好( 越小越好)。那麼還和原來一樣的話,過中心紫色圈圈的那個菱形明顯很大,因此我們要取到一個恰好的值。那麼如何求值呢?

- 以同一條原曲線目標等高線來說,現在以最外圈的紅色等高線為例,我們看到,對於紅色曲線上的每個點都可做一個菱形,根據上圖可知,當這個菱形與某條等高線相切(僅有一個交點)的時候,這個菱形最小,上圖相割對比較大的兩個菱形對應的 範數更大。用公式說這個時候能使得在相同的 ,由於相切的時候的 $ C||w||_1}小,即w_1|+|w_2|所以能夠使得frac{1N} sum_{i = 1}^N{(y_i -w^T x_i)^2 }+ C|w||_{1$ 更小;
- 有了第一條的說明我們可以看出,最終加入 範數得到的解一定是某個菱形和某條原函數等高線的切點。現在有個比較重要的結論來了,我們經過觀察可以看到,幾乎對於很多原函數等高曲線,和某個菱形相交的時候及其容易相交在坐標軸(比如上圖),也就是說最終的結果,解的某些維度及其容易是 0,比如上圖最終解是 ,這也就是我們所說的 更容易得到稀疏解(解向量中 0 比較多)的原因;
- 當然光看著圖說, 的菱形更容易和等高線相交在坐標軸一點都沒說服力,只是個感性的認識,我們接下來從更嚴謹的方式來證明,簡而言之就是假設現在我們是一維的情況下 ,其中 是目標函數, 是沒加 正則化項前的目標函數, 是 正則項,要使得 0 點成為最值可能的點,雖然在 0 點不可導,但是我們只需要讓 0 點左右的導數異號,即 即可也就是 的情況下,0 點都是可能的最值點。
當加入 正則化的時候,分析和 正則化是類似的,也就是說我們僅僅是從菱形變成了圓形而已,同樣還是求原曲線和圓形的切點作為最終解。當然與 範數比,我們這樣求的 範數的從圖上來看,不容易交在坐標軸上,但是仍然比較靠近坐標軸。因此這也就是我們老說的, 範數能讓解比較小(靠近 0),但是比較平滑(不等於 0)。
綜上所述,我們可以看見,加入正則化項,在最小化經驗誤差的情況下,可以讓我們選擇解更簡單(趨向於 0)的解。
結構風險最小化:在經驗風險最小化的基礎上(也就是訓練誤差最小化),儘可能採用簡單的模型,以此提高泛化預測精度。
因此,加正則化項就是結構風險最小化的一種實現。
正則化之所以能夠降低過擬合的原因在於,正則化是結構風險最小化的一種策略實現。
簡單總結下:
給 loss function 加上正則化項,能使新得到的優化目標函數 ,需要在 和 中做一個權衡,如果還像原來只優化 的情況下,那可能得到一組解比較複雜,使得正則項 比較大,那麼 就不是最優的,因此可以看出加正則項能讓解更加簡單,符合奧卡姆剃刀理論,同時也比較符合在偏差和方差(方差表示模型的複雜度)分析中,通過降低模型複雜度,得到更小的泛化誤差,降低過擬合程度。
正則化就是在 loss function 後邊所加正則項為 範數,加上 範數容易得到稀疏解(0 比較多)。 正則化就是 loss function 後邊所加正則項為 範數的平方,加上 正則相比於 正則來說,得到的解比較平滑(不是稀疏),但是同樣能夠保證解中接近於 0(但不是等於 0,所以相對平滑)的維度比較多,降低模型的複雜度。
1.6 並行化
從邏輯回歸的求解方法中我們可以看到,無論是隨機梯度下降還是牛頓法,或者是沒有提到的擬牛頓法,都是需要計算梯度的,因此邏輯回歸的並行化最主要的就是對目標函數梯度計算的並行化。
我們看到目標函數的梯度向量計算中只需要進行向量間的點乘和相加,可以很容易將每個迭代過程拆分成相互獨立的計算步驟,由不同的節點進行獨立計算,然後歸併計算結果。
下圖是一個標籤和樣本矩陣,行為特徵向量,列為特徵維度。

sample_matrix
樣本矩陣按行劃分,將樣本特徵向量分布到不同的計算節點,由各計算節點完成自己所負責樣本的點乘與求和計算,然後將計算結果進行歸併,則實現了按行並行的 LR。按行並行的 LR 解決了樣本數量的問題,但是實際情況中會存在針對高維特徵向量進行邏輯回歸的場景,僅僅按行進行並行處理,無法滿足這類場景的需求,因此還需要按列將高維的特徵向量拆分成若干小的向量進行求解。

並行計算總共會被分為兩個並行化計算步驟和兩個結果歸併步驟:
步驟一:各節點並行計算點乘,計算 ,其中 , 表示第 t 次迭代中節點 上的第 k 個特徵向量與特徵權重分量的點乘, 為第 t 次迭代中特徵權重向量在第 c 列節點上的分量;步驟二:對行號相同的節點歸併點乘結果:

步驟三:各節點獨立算標量與特徵向量相乘:
可以理解為由第 r 行節點上部分樣本計算出的目標函數梯度向量在第 c 列節點上的分量。
步驟四:對列號相同的節點進行歸併:
就是目標函數的梯度向量 在第 c 列節點上的分量,對其進行歸併得到目標函數的梯度向量:
這個過程如下圖所示:

所以並行計算 LR 的流程如下所示。

所以並行 LR 實際上就是在求解損失函數最優解的過程中,針對尋找損失函數下降方向中的梯度方向計算作了並行化處理,而在利用梯度確定下降方向的過程中也可以採用並行化。
與其他模型的對比
2.1 與線性回歸
邏輯回歸是在線性回歸的基礎上加了一個 函數(非線形)映射,使得邏輯回歸稱為了一個優秀的分類演算法。本質上來說,兩者都屬於廣義線性模型,但他們兩個要解決的問題不一樣,邏輯回歸解決的是分類問題,輸出的是離散值,線性回歸解決的是回歸問題,輸出的連續值。
我們需要明確 函數到底起了什麼作用:
- 線性回歸是在實數域範圍內進行預測,而分類範圍則需要在 ,邏輯回歸減少了預測範圍;
- 線性回歸在實數域上敏感度一致,而邏輯回歸在 0 附近敏感,在遠離 0 點位置不敏感,這個的好處就是模型更加關注分類邊界,可以增加模型的魯棒性。
2.2 與最大熵模型
邏輯回歸和最大熵模型本質上沒有區別,最大熵在解決二分類問題時就是邏輯回歸,在解決多分類問題時就是多項邏輯回歸。
首先進行符號定義:
- 表示,輸入時 ,輸出的 的概率;
- 是一個指示函數,若 ,則 ,否則 ;
- 我們的目標就是從訓練數據中,學習得到一個模型,使得 最大化,也就是輸入 ,預測結果是 的概率最大,也就是使得 最大。
對於邏輯回歸而言:
我們這裡可以用更泛化的形式來表示 π:
回到我們的目標:令 最大,可以用極大似然估計的方法來求解。
然後我們求偏導:
另偏導數為 0:
使用 這個函數,我們可以重寫等式:
想要證明邏輯回歸跟最大熵模型是等價的,那麼,只要能夠證明它們的 是相同,結論自然就出來了。現在,我們不知道最大熵模型的 ,但是我們知道下面的一些性質:
利用資訊理論,我們可以得到 的熵,定義如下:
現在,我們有了目標: 最大,也有了上面的4個約束條件。求解約束最優化問題,可以通過拉格朗日乘子,將約束最優化問題轉換為無約束最優化的對偶問題。我們的拉格朗日式子可以寫成如下:
對 求偏導,得到:
令偏導 = 0,得到:
從而得到:
因為有約束條件:
所以:
因此,可以得到:
把 代入 ,並且簡化一下式子:
這就是邏輯回歸中提到的那個泛化的式子,這就證明了邏輯回歸是最大熵模型的一個特殊例子。到此,邏輯回歸與最大熵模型的關係就解釋完畢了。
2.3 與 SVM
相同點:
- 都是分類演算法,本質上都是在找最佳分類超平面;
- 都是監督學習演算法;
- 都是判別式模型,判別模型不關心數據是怎麼生成的,它只關心數據之間的差別,然後用差別來簡單對給定的一個數據進行分類;
- 都可以增加不同的正則項。
不同點:
- LR 是一個統計的方法,SVM 是一個幾何的方法;
- SVM 的處理方法是只考慮 Support Vectors,也就是和分類最相關的少數點去學習分類器。而邏輯回歸通過非線性映射減小了離分類平面較遠的點的權重,相對提升了與分類最相關的數據點的權重;
- 損失函數不同:LR 的損失函數是交叉熵,SVM 的損失函數是 HingeLoss,這兩個損失函數的目的都是增加對分類影響較大的數據點的權重,減少與分類關係較小的數據點的權重。對 HingeLoss 來說,其零區域對應的正是非支援向量的普通樣本,從而所有的普通樣本都不參與最終超平面的決定,這是支援向量機最大的優勢所在,對訓練樣本數目的依賴大減少,而且提高了訓練效率;
- LR 是參數模型,SVM 是非參數模型,參數模型的前提是假設數據服從某一分布,該分布由一些參數確定(比如正太分布由均值和方差確定),在此基礎上構建的模型稱為參數模型;非參數模型對於總體的分布不做任何假設,只是知道總體是一個隨機變數,其分布是存在的(分布中也可能存在參數),但是無法知道其分布的形式,更不知道分布的相關參數,只有在給定一些樣本的條件下,能夠依據非參數統計的方法進行推斷。所以 LR 受數據分布影響,尤其是樣本不均衡時影響很大,需要先做平衡,而 SVM 不直接依賴於分布;
- LR 可以產生概率,SVM 不能;
- LR 不依賴樣本之間的距離,SVM 是基於距離的;
- LR 相對來說模型更簡單好理解,特別是大規模線性分類時並行計算比較方便。而 SVM 的理解和優化相對來說複雜一些,SVM 轉化為對偶問題後,分類只需要計算與少數幾個支援向量的距離,這個在進行複雜核函數計算時優勢很明顯,能夠大大簡化模型和計算。
2.4 與樸素貝葉斯
樸素貝葉斯和邏輯回歸都屬於分類模型,當樸素貝葉斯的條件概率 服從高斯分布時,它計算出來的 形式跟邏輯回歸是一樣的。
兩個模型不同的地方在於:
- 邏輯回歸是判別式模型 ,樸素貝葉斯是生成式模型 :判別式模型估計的是條件概率分布,給定觀測變數 x 和目標變數 y 的條件模型,由數據直接學習決策函數 或者條件概率分布 作為預測的模型。判別方法關心的是對於給定的輸入 x,應該預測什麼樣的輸出 y;而生成式模型估計的是聯合概率分布,基本思想是首先建立樣本的聯合概率概率密度模型 ,然後再得到後驗概率 ,再利用它進行分類,生成式更關心的是對於給定輸入 x 和輸出 y 的生成關係;
- 樸素貝葉斯的前提是條件獨立,每個特徵權重獨立,所以如果數據不符合這個情況,樸素貝葉斯的分類表現就沒邏輯會好了。
模型細節
3.1 為什麼適合離散特徵
我們在使用邏輯回歸的時候很少會把數據直接丟給 LR 來訓練,我們一般會對特徵進行離散化處理,這樣做的優勢大致有以下幾點:
- 離散後稀疏向量內積乘法運算速度更快,計算結果也方便存儲,容易擴展;
- 離散後的特徵對異常值更具魯棒性,如 age>30 為 1 否則為 0,對於年齡為 200 的也不會對模型造成很大的干擾;
- LR 屬於廣義線性模型,表達能力有限,經過離散化後,每個變數有單獨的權重,這相當於引入了非線性,能夠提升模型的表達能力,加大擬合;
- 離散後特徵可以進行特徵交叉,提升表達能力,由 M+N 個變數編程 M*N 個變數,進一步引入非線形,提升了表達能力;
- 特徵離散後模型更穩定,如用戶年齡區間,不會因為用戶年齡長了一歲就變化;
總的來說,特徵離散化以後起到了加快計算,簡化模型和增加泛化能力的作用。
3.2 為什麼不用平方誤差
假設目標函數是 MSE,即:
這裡 的導數項為:
根據 w 的初始化,導數值可能很小(想像一下 函數在輸入較大時的梯度)而導致收斂變慢,而訓練途中也可能因為該值過小而提早終止訓練(梯度消失)。
另一方面,交叉熵的梯度如下,當模型輸出概率偏離於真實概率時,梯度較大,加快訓練速度,當擬合值接近於真實概率時訓練速度變緩慢,沒有 MSE 的問題。
引用
[1] https://zhuanlan.zhihu.com/p/35356992
[2] https://www.zhihu.com/question/37096933/answer/70426653
[3] https://blog.csdn.net/sinat_27652257/article/details/80543604
[4] https://www.zhihu.com/question/21704547
[5] https://www.zhihu.com/question/26768865
[6] https://blog.csdn.net/songbinxu/article/details/79633790#%E5%9B%9Blr-%E6%AD%A3%E5%88%99%E5%8C%96
[7] https://blog.csdn.net/yang090510118/article/details/39478033
[8] http://blog.sina.com.cn/s/blog_6cb8e53d0101oetv.html
[9] https://www.zhihu.com/question/31989952/answer/54184582
The End