邏輯回歸(logistic regression)


邏輯回歸從線性回歸引申而來,對回歸的結果進行 logistic 函數運算,將范圍限制在[0,1]區間,並更改損失函數為二值交叉熵損失,使其可用於2分類問題(通過得到的概率值與閾值比較進行分類)。邏輯回歸要求輸入的標簽數據是01分布(伯努利分布),而線性回歸則是對任意連續值的回歸。出世:由統計學家 David Cox 在 1958 年提出。

從對數幾率引入

一個事件發生的概率與不發生的概率的比值稱為幾率。對數幾率(log odds)或稱logit函數定義為:\(logit(p)=\log {p\over 1-p} \in \mathbb R\). 其中 \(p\) 為事件發生的概率。

我們希望得到一個模型使得樣本被划分為正類的對數幾率是特征 \(x\) 的線性組合,即\(\log{P(Y=1|x)\over P(Y=0|x)}=w\cdot x\)。並且當 \(w\cdot x \to +\infty\)\(P(Y=1)\to 1\).

\[\begin{align} \log{P(Y=1|x)\over P(Y=0|x)} =& \log{P(Y=1|x)\over 1-P(Y=1|x)}=wx \\ \Longrightarrow & {P(Y=1|x)\over 1-P(Y=1|x)}=e^{wx} \\ \Rightarrow P(Y=1|x)=& {e^{wx} \over 1+e^{wx}} = {1\over 1+e^{-wx}} \end{align} \]

因此二項邏輯回歸模型定義為:

\[\begin{align} P(Y=1|x)=& {e^{w\cdot x}\over 1+e^{w\cdot x}}={1\over 1+e^{-wx}} \\ P(Y=0|x)=& 1-P(Y=1|x) \end{align} \]

可以看出邏輯回歸正是對輸入進行線性組合后應用 sigmoid 函數。此外,logit 對數幾率函數與 logistic 函數互為反函數。

值的注意的是 sigmoid 是 logistic 分布的一種特例。

logistic 分布[1]

變量 \(X\) 具有 logistic 分布是指 \(X\) 具有以下分布函數 F(x) 和密度函數 f(x) :

\[\begin{align} F(x)&=P(X\le x)={1\over 1+e^{-(x-\mu)/\gamma}} \\ f(x)&=F'(x)=\dfrac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2} \end{align} \]

式子中,\(\mu\)是位置參數,\(\gamma>0\)是形狀參數.
logistic 分布函數D(x)是一條S型曲線,概率密度函數P(x)是類似正態分布的鍾型曲線.圖示如下[2]

logistic-curve

模型參數估計

可以應用極大似然估計法估計模型參數:
\(P(Y=1|x)=\pi(x),P(Y=0|x)=1-\pi(x)\)
似然函數為:

\[\Pi_{i=1}^N[\pi(x_i)]^{y_i} [1-\pi(x_i)]^{1-y_i} \]

對數似然函數為:

\[\begin{align} L(w)&=\log \Pi_{i=1}^N[\pi(x_i)]^{y_i} [1-\pi(x_i)]^{1-y_i} \\ &=\sum_{i=1}^N[y_i\log\pi(x_i)+(1-y_i)\log(1-\pi(x_i))] \end{align} \]

對L(w)求極大值,得到w的估計值.而我們實際中求-L(w)的極小值,即二值交叉熵損失(binary cross entropy).
二項邏輯回歸的參數估計法可以推廣到多項邏輯回歸,即softmax.

損失函數

如果用平方誤差(MSE)作為邏輯回歸的損失函數,那么函數曲線將是跳躍式的,非凸的(non-convex),原因是logistic函數將數據范圍限制在[0,1]區間,而真實標簽值非0即1.最小化 MSE 損失容易陷入局部極小點.邏輯回歸損失是如下的分情況的凸函數(單個x與y的損失):

\[\text{Cost}(h_\theta(x),y)=\begin{cases} -\log(h_\theta(x)) && \text{, $y=1$} \\ -\log(1-h_\theta(x)) && \text{, $y=0$} \end{cases} \]

符合直覺和邏輯.累計損失函數可以轉化為如下(同時加上了正則項):

\[J(\theta)=[-{1\over m}\sum_{i=1}^m\big(y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log (1-h_\theta(x^{(i)}))\big)]+{\lambda \over 2m}\sum_{j=1}^n\theta_j^2 \]

可以看出, \(J(\theta)\) 與極大似然估計法所得的對數似然函數一致. 其中參數 \(\theta\) 同線性回歸一樣,用來對特征線性求和,可以使用梯度下降或者牛頓法來求解. 但邏輯回歸最終要經過sigmoid函數得到輸出:\(h_{\theta}(x)=g(\theta^{T}x)\)

\[g(z)={1\over 1+e^{-z}} \tag{sigmoid} \]

損失對\(\theta\)的偏導數為

\[\frac{\partial}{\partial\theta_{j}}J(\theta) ={1\over m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \]

偏導數推導也比較簡單, 參考公式推導. 梯度下降公式為:

\[\theta_j := \theta_j-\alpha{1\over m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \]

在使用sigmoid激活函數時,MSE 損失得的W、b的梯度包含σ′(z),因此存在反向傳播收斂速度慢的問題,而交叉熵損失的梯度不包含σ′(z)。通常情況下,在使用sigmoid激活函數時,利用交叉熵損失函數肯定比均方差損失函數效果更好。

vs 回歸模型

邏輯回歸和線性回歸都可看做廣義的線性回歸。邏輯回歸僅比線性回歸多了sigmoid函數非線性映射。
線性回歸在整個實數域內敏感度一致,而邏輯回歸將結果壓縮到[0,1]以內,在遠離0點的位置不敏感,可以更好地擬合數據。
當然,邏輯回歸是用於分類,線性回歸用於回歸。

為什么LR模型的損失函數是交叉熵,而線性回歸模型的損失函數卻是最小二乘呢?能否隨意確定一個損失函數作為目標呢?

模型的損失函數由各自的響應變量y的概率分布決定,對於線性回歸模型,其輸出是連續值,所以我們對於該問題假設y服從正態分布;相對的,LR模型一般用來解決二分類問題,所以其輸出是0/1,故而我們假設其輸出服從伯努利分布;而進一步地,兩者的損失函數都是通過極大似然估計推導的來的,所以模型的損失函數並非隨意確定。[3]

分類模型與回歸模型之間有種種聯系,比如 SVM 模型可以看作邏輯回歸加L2正則項, 並使用了不同的損失函數. 預測結果的概率值可以通過 Platt's scaling 得到.

為什么不使用回歸模型來做分類?[4]
比如對於二分類, 做一個線性回歸模型,然后通過預測值與閾值的比較進行分類.
這是一種不好的做法, 因為閾值不好確定, 隨着數據集的變動, 閾值也需要有較大變化.

首先明確邏輯回歸(分類)與線性回歸的區別: 線性回歸是去擬合數據的連續值屬性, 而邏輯回歸是預測屬於類別的概率,因此邏輯回歸是一個回歸問題. 邏輯回歸通過概率輸出與閾值(如0.5)的比較確定最終分類,也因此常被看作分類問題.

線性回歸擬合
線性回歸數據擾動
邏輯回歸

vs 最大熵模型

最大熵模型: 在約束條件下最大化條件概率分布的條件熵,約束條件是特征函數相對聯合分布的期望等於特征函數相對於模型和條件分布的期望。通過求解這個約束最優化問題(轉為拉格朗日對偶問題[1:1] ), 可以得到在給定輸入變量 x 時,輸出變量 y 的條件分布:

\[P(y | \mathbf{x}, \boldsymbol\theta) = \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x}, y) \right) }{ \sum_{\mathbf{y} \in \textit{Dom}(y)} { \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x}, y) \right) } } \]

此處\(\textit{Dom}(y)\)是y所有可能取值的集合。我們可以看出這正是softmax的公式形式.
當y的類別為2類時上式與邏輯回歸之間的顯著差別在於特征函數.

\[f (x,y) = \begin{cases} g(x) & y=y_1 \\ 0 & y=y_0 \end{cases} \]

即僅在y=y1時抽取 x的特征。在y=y0時不抽任何特征(直接返回全為 0 的特征向量)。[5]

\[P(y|x) = \begin{cases} \sigma(\theta \cdot g(x)) & y=y_1 \\ 1-\sigma(\theta \cdot g(x)) & y=y_0 \end{cases} \]

可以得到與邏輯回歸相同的表達式.

邏輯回歸是最大熵模型的一個特殊例子(二類的情況).二項式分布的最大熵等價於二項式指數形式(sigmoid)的最大似然;
多項式分布的最大熵等價於多項式分布指數形式(softmax)的最大似然。[6]

多值交叉熵(softmax)

\(\pi(x)_u\)表示輸入 x 得到的 y=u 的概率,

\[\pi(x)_u=\frac{e^{w_u\cdot x}}{\sum_{v=1}^k e^{w_v \cdot x}} \]

我們的目標是最大化\(\pi(x_i)_{y_i}\),最大熵模型的極大似然估計是:

\[L(w)=\prod_{i=1}^n \pi(x_i)_{y_i} \]

另外, 再說說多項式分布:
假設類別\(y\in \{1,...,k\}\),每個類別統計的樣本個數分別為\(n_1,n_2,\cdots,n_k\),且\(\sum_{i=1}^k n_i=n\).假設樣本服從多項式分布且相互獨立,那么概率密度函數為

\[P(D|\theta)={n!\over n_1!\cdot n_2!\cdots n_k!}\prod_{i=1}^k p_i^{n_i} \]

取對數得:

\[\log P(D|\theta)=\log n!-\log n_1!\cdot n_2!\cdots n_k!+\sum_{i=1}^k n_i\log p_i \]

前邊的log項與參數\(\theta\)無關,因此最大化似然函數等價於最小化:

\[-\sum_{i=1}^k n_i\log p_i \]

vs 感知機

同:原始模型均為二分類,訓練方法都是使用梯度下降法。
異:感知機是符號函數sign,輸出為類別1/-1;LR是sigmoid輸出為概率值。

vs Linear SVM

  • Linear SVM和LR都是線性分類器
  • Linear SVM不直接依賴數據分布,分類平面不受一類點影響;LR則受所有數據點的影響,如果不同類別數據嚴重不平衡需要先對數據做balancing。
  • Linear SVM依賴數據表達的距離測度,所以需要對數據先做normalization(歸一化);LR不受其影響
  • Linear SVM依賴penalty的系數,實驗中需要做validation
  • Linear SVM和LR的performance都會收到outlier的影響,其敏感程度而言,誰更好很難下明確結論。

正則項

  • L2 解決過擬合
  • L1解決數據稀疏性問題.,比如Google13年出的預估方法-FTRL模型,雖然是在線學習算法,但主要是為了解決預估時的稀疏性問題。
  • 超大規模稀疏LR模型學習問題,LR模型自身是做不到的。這個時候需要我們為它選擇一個學習算法和分布式系統。在分布式環境下,約束優化求解理想方案之一-ADMM算法(交叉方向乘子法),可用於求解形式為”loss function + 正則項”目標函數極值問題。

L1和L2正則先驗分別服從什么分布

從信息論的角度看,向系統加入了正確先驗這個信息,肯定會提高系統的性能。
L1是拉普拉斯分布,L2是高斯分布。

拉普拉斯分布:

\[f(x|\mu,b)={1\over 2b}e^{-{|x-\mu|\over b}} \]

模型的優勢

邏輯回歸相比其它更復雜的模型的優勢:

  • LR 能以概率的形式輸出結果,而非只是 0,1 判定; 而其它模型如 SVM 難以用概率表示,雖然存在多種概率校准方法, 但仍不能與LR的概率形式相比;
  • LR 的可解釋性強,可控度高;
  • 訓練快,feature engineering 之后效果好;
  • 因為結果是概率,可以做 ranking model;
  • 添加 feature 很簡單。

缺點

  • 容易欠擬合,一般准確度不太高
  • 只能處理兩分類問題. (可以應用多個邏輯回歸實現多分類,類似SVM的方式; 另外對於父子類別同時分類的情況,使用邏輯回歸要比Softmax等方式效果好)

在現實中很多推薦系統都是拿 LR 做基礎版本的,其作用不容小覷.

常見應用場景

  • 預估問題場景(如推薦、廣告系統中的點擊率預估,轉化率預估等)
  • 分類場景(如用戶畫像中的標簽預測,判斷內容是否具有商業價值,判斷點擊作弊等.

為什么要對特征進行離散化

在工業界,很少直接將連續值作為邏輯回歸模型的特征輸入,而是將連續特征離散化為一系列0、1特征(one-hot編碼)交給邏輯回歸模型,這樣做的優勢有以下幾點:[7]

  1. 離散特征的增加和減少都很容易,易於模型的快速迭代;
  2. 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易擴展;
  3. 離散化后的特征對異常數據有很強的魯棒性:比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常數據“年齡300歲”會給模型造成很大的干擾;
  4. 邏輯回歸屬於廣義線性模型,表達能力受限;單變量離散化為N個后,每個變量有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合;
  5. 離散化后可以進行特征交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力;
  6. 特征離散化后,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎么划分區間是門學問;

李沐曾經說過:模型是使用離散特征還是連續特征,其實是一個“海量離散特征+簡單模型” 同 “少量連續特征+復雜模型”的權衡。既可以離散化用線性模型,也可以用連續特征加深度學習。就看是喜歡折騰特征還是折騰模型了。通常來說,前者容易,而且可以n個人一起並行做,有成功經驗;后者目前看很贊,能走多遠還須拭目以待。

邏輯回歸並行化

對於邏輯回歸,有些可以並行化,但是有些是很難並行化的(或者說很難無損的並行化)。比如FTRL這類在線算法較難並行。一般的邏輯回歸計算簡單,存儲資源占用低,很容易並行。

優化方式: 一階的 Gradient Descent (GD-LR), 二階的L-BFGS, 以及ADMM.

開源的並行化代碼: 在分布式機器學習框架Angel中分別提供了利用Gradient Descent、ADMM兩種優化方法計算的LR算法。

Gradient Descent (GD-LR)

邏輯回歸的cost function對參數的偏導數是:

\[\frac{\partial J}{\partial \theta}=\frac{1}{M} {\sum_{i=1}^{M}{(h_\theta(x^{(i)})-y^{(i)}})\times x^{(i)}} \]

參數更新需要所有樣本的損失的平均值,而每個樣本的損失計算僅與該樣本有關, 因此很容易實現並行化. 我們能夠很容易地想到MapReduce的思想, Map划分樣本,Reduce收集樣本梯度. 但是MapReduce存在需要文件IO,Reduce單點問題擴展性差等問題.而現代的深度學習框架多基於MPI實現並行計算. 另外,在計算總體的損失更新參數后需要分發給各計算節點, 這通常采用參數服務器的設計方式.

如果數據量大到集群都撐不下時,我們一般也並不需要每次迭代更新參數時計算所有樣本,而是選取一部分進行Mini-batch gradient Descent(或稱SGD).

僅按樣本並行

將樣本划分為 B 塊(隨機不重復), 每塊的樣本集合記作\(S_k\), 則有:

\[\frac{\partial J}{\partial \theta}= \frac{1}{M} \sum^{B}_{k=1}{\sum_{i \in S_k}{(h_\theta(x^{(i)})-y^{(i)}})\times x^{(i)}} \]

這樣就可以實現按樣本划分的並行化加速了,就是這么簡單。[8]

特征並行[9]

如果特征維數比較多,如廣告系統中的特征維度高達上億,這種情況下內存也不夠用, 可以對特征進行分組, 拆分到不同的機器進行計算. 這樣將MxN的訓練樣本划分到mxn的網格集群中進行並行計算,每台機器計算量為(M/m)x(N/n).
那么這里需要考慮的問題是特征能否並行? 該怎樣並行?
每個樣本的梯度是: \(G_i=(h_\theta(x^{(i)})-y^{(i)})\times x^{(i)}\)
其中\(h_\theta(x^{(i)})-y^{(i)}=\sigma(\theta^{T}x^{(i)})-y^{(i)}\) 是標量, 而 \(x^{(i)}\) 是向量. \(\sigma(\theta^{T}x^{(i)})\) 需要計算樣本 \(x^{(i)}\) 的所有特征分量與參數的乘積,求和之后執行sigmoid運算. 因此在集群網格中第r行的計算節點計算相應分量(第c列對應的特征向量)的 \(\theta_c^{T}x^{(r,c)}\) 之后得到 \(\sigma(\theta^{T}x^{(i)})\) 標量, 然后再回傳到第r行的每一個計算節點, 進而計算\(G_{r,c}=(h_\theta(x^{(r,c)})-y^{(r)})\times x^{(r,c)}\).
現在只需對每一列分別求平均值即可得到用來更新參數的梯度向量 \(G_\theta\).

ADMM[10][11]

用 ADMM 求解LogisticRegression的優化方法稱作ADMM_LR。ADMM算法是一種求解約束問題的最優化方法,它適用廣泛。相比於SGD,ADMM在精度要求不高的情況下,在少數迭代輪數時就達到一個合理的精度,但是收斂到很精確的解則需要很多次迭代。
ADMM算法結合了對偶分解法(Dual Decomposition)增廣拉格朗日乘子法(Augmented Lagrangians and the Method of Multipliers)的優勢,它可以在滿足較弱收斂條件的情況下,分解目標函數,交替地更新變量,直至算法收斂。
在ADMM在每一步的優化過程中,可以與牛頓法等高精度算法相結合進行求解。

在Angel的實現上,采用樣本並行的方式, 每個計算節點上使用L-BFGS, 使用參數服務器匯總計算整體的參數.


  1. 《統計學習方法》(李航,清華大學出版社) ↩︎ ↩︎

  2. http://mathworld.wolfram.com/LogisticDistribution.html ↩︎

  3. http://izhaoyi.top/2017/07/08/lr/ ↩︎

  4. https://stats.stackexchange.com/questions/22381/why-not-approach-classification-through-regression ↩︎

  5. https://www.zhihu.com/question/24094554 ↩︎

  6. Logistic Regression 的前世今生(理論篇) https://blog.csdn.net/cyh_24/article/details/50359055 ↩︎

  7. http://wangxin123.com/2017/10/19/機器學習(一):回歸算法/ ↩︎

  8. Logistic回歸的CPU並行化及其 Batch Gradient Ascent 的實現 https://zhuanlan.zhihu.com/p/20511129 ↩︎

  9. 並行邏輯回歸 http://blog.sina.com.cn/s/blog_6cb8e53d0101oetv.html ↩︎

  10. Boyd S, Parikh N, Chu E, et al. Distributed optimization and statistical learning via the alternating direction method of multipliers. Foundations and Trends® in Machine Learning, 2011, 3(1): 1-122. ↩︎

  11. https://github.com/Tencent/angel/blob/master/docs/algo/admm_lr_on_angel.md ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM