邏輯迴歸(Logistic Regression)是機器學習中的一種分類模型,由於算法的簡單和高效,在實際中應用非常廣泛。本文作為美團機器學習InAction系列中的一篇,主要關注邏輯迴歸算法的數學模型和參數求解方法,最後也會簡單討論下邏輯迴歸和貝葉斯分類的關係,以及在多分類問題上的推廣。

邏輯迴歸

問題

實際工作中,我們可能會遇到如下問題:

  1. 預測一個用户是否點擊特定的商品
  2. 判斷用户的性別
  3. 預測用户是否會購買給定的品類
  4. 判斷一條評論是正面的還是負面的

這些都可以看做是分類問題,更準確地,都可以看做是二分類問題。同時,這些問題本身對美團也有很重要的價值,能夠幫助我們更好的瞭解我們的用户,服務我們的用户。要解決這些問題,通常會用到一些已有的分類算法,比如邏輯迴歸,或者支持向量機。它們都屬於有監督的學習,因此在使用這些算法之前,必須要先收集一批標註好的數據作為訓練集。有些標註可以從log中拿到(用户的點擊,購買),有些可以從用户填寫的信息中獲得(性別),也有一些可能需要人工標註(評論情感極性)。另一方面,知道了一個用户或者一條評論的標籤後,我們還需要知道用什麼樣的特徵去描述我們的數據,對用户來説,可以從用户的瀏覽記錄和購買記錄中獲取相應的統計特徵,而對於評論來説,最直接的則是文本特徵。這樣拿到數據的特徵和標籤後,就得到一組訓練數據:

 

D=(x1,y1),(x2,y2)...(xN,yN)D=(x1,y1),(x2,y2)...(xN,yN)

 

其中 xixi 是一個 mm 維的向量,xi=[xi1,xi2,...,xim]xi=[x1i,x2i,...,xmi] ,yy 在 {0, 1} 中取值。(本文用{1,0}表示正例和負例,後文沿用此定義。)

我們的問題可以簡化為,如何找到這樣一個決策函數y∗=f(x)y∗=f(x),它在未知數據集上能有足夠好的表現。至於如何衡量一個二分類模型的好壞,我們可以用分類錯誤率這樣的指標:Err=1N∑1[y∗=y]Err=1N∑1[y∗=y] 。也可以用準確率,召回率,AUC等指標來衡量。

值得一提的是,模型效果往往和所用特徵密切相關。特徵工程在任何一個實用的機器學習系統中都是必不可少的,機器學習InAction系列已有一篇文章中對此做了詳細的介紹,本文不再詳細展開。

模型

sigmoid 函數

在介紹邏輯迴歸模型之前,我們先引入sigmoid函數,其數學形式是:

 

g(x)=11+e−xg(x)=11+e−x

 

對應的函數曲線如下圖所示:

從上圖可以看到sigmoid函數是一個s形的曲線,它的取值在[0, 1]之間,在遠離0的地方函數的值會很快接近0/1。這個性質使我們能夠以概率的方式來解釋(後邊延伸部分會簡單討論為什麼用該函數做概率建模是合理的)。

決策函數

一個機器學習的模型,實際上是把決策函數限定在某一組條件下,這組限定條件就決定了模型的假設空間。當然,我們還希望這組限定條件簡單而合理。而邏輯迴歸模型所做的假設是:

 

P(y=1|x;θ)=g(θTx)=11+e−θT∗xP(y=1|x;θ)=g(θTx)=11+e−θT∗x

 

這裏的 g(h)g(h) 是上邊提到的 sigmoid 函數,相應的決策函數為:

 

y∗=1,ifP(y=1|x)>0.5y∗=1,ifP(y=1|x)>0.5

 

選擇0.5作為閾值是一個一般的做法,實際應用時特定的情況可以選擇不同閾值,如果對正例的判別準確性要求高,可以選擇閾值大一些,對正例的召回要求高,則可以選擇閾值小一些。

參數求解

模型的數學形式確定後,剩下就是如何去求解模型中的參數。統計學中常用的一種方法是最大似然估計,即找到一組參數,使得在這組參數下,我們的數據的似然度(概率)越大。在邏輯迴歸模型中,似然度可表示為:

 

L(θ)=P(D|θ)=∏P(y|x;θ)=∏g(θTx)y(1−g(θTx))1−yL(θ)=P(D|θ)=∏P(y|x;θ)=∏g(θTx)y(1−g(θTx))1−y

 

取對數可以得到對數似然度:

 

l(θ)=∑ylogg(θTx)+(1−y)log(1−g(θTx))l(θ)=∑ylog⁡g(θTx)+(1−y)log⁡(1−g(θTx))

 

另一方面,在機器學習領域,我們更經常遇到的是損失函數的概念,其衡量的是模型預測錯誤的程度。常用的損失函數有0-1損失,log損失,hinge損失等。其中log損失在單個數據點上的定義為−ylogp(y|x)−(1−y)log1−p(y|x)−ylog⁡p(y|x)−(1−y)log⁡1−p(y|x)

如果取整個數據集上的平均log損失,我們可以得到

 

J(θ)=−1Nl(θ)J(θ)=−1Nl(θ)

 

即在邏輯迴歸模型中,我們最大化似然函數和最小化log損失函數實際上是等價的。對於該優化問題,存在多種求解方法,這裏以梯度下降的為例説明。梯度下降(Gradient Descent)又叫作最速梯度下降,是一種迭代求解的方法,通過在每一步選取使目標函數變化最快的一個方向調整參數的值來逼近最優值。基本步驟如下:

  • 選擇下降方向(梯度方向,∇J(θ)∇J(θ))
  • 選擇步長,更新參數 θi=θi−1−αi∇J(θi−1)θi=θi−1−αi∇J(θi−1)
  • 重複以上兩步直到滿足終止條件

其中損失函數的梯度計算方法為:

 

∂J∂θ=−1n∑i(yi−y∗i)xi+λθ∂J∂θ=−1n∑i(yi−yi∗)xi+λθ

 

沿梯度負方向選擇一個較小的步長可以保證損失函數是減小的,另一方面,邏輯迴歸的損失函數是凸函數(加入正則項後是嚴格凸函數),可以保證我們找到的局部最優值同時是全局最優。此外,常用的凸優化的方法都可以用於求解該問題。例如共軛梯度下降,牛頓法,LBFGS等。

分類邊界

知道如何求解參數後,我們來看一下模型得到的最後結果是什麼樣的。很容易可以從sigmoid函數看出,當θTx>0θTx>0 時,y=1y=1,否則 y=0y=0。θTx=0θTx=0 是模型隱含的分類平面(在高維空間中,我們説是超平面)。所以説邏輯迴歸本質上是一個線性模型,但是,這不意味着只有線性可分的數據能通過LR求解,實際上,我們可以通過特徵變換的方式把低維空間轉換到高維空間,而在低維空間不可分的數據,到高維空間中線性可分的機率會高一些。下面兩個圖的對比説明了線性分類曲線和非線性分類曲線(通過特徵映射)。

 

左圖是一個線性可分的數據集,右圖在原始空間中線性不可分,但是在特徵轉換 [x1,x2]=>[x1,x2,x21,x22,x1x2][x1,x2]=>[x1,x2,x12,x22,x1x2] 後的空間是線性可分的,對應的原始空間中分類邊界為一條類橢圓曲線。

正則化

當模型的參數過多時,很容易遇到過擬合的問題。這時就需要有一種方法來控制模型的複雜度,典型的做法在優化目標中加入正則項,通過懲罰過大的參數來防止過擬合:

 

J(θ)=−1N∑ylogg(θTx)+(1−y)log(1−g(θTx))+λ∥w∥pJ(θ)=−1N∑ylog⁡g(θTx)+(1−y)log⁡(1−g(θTx))+λ‖w‖p

 

一般情況下,取p=1p=1或p=2p=2,分別對應L1,L2正則化,兩者的區別可以從下圖中看出來,L1正則化(左圖)傾向於使參數變為0,因此能產生稀疏解。

 

實際應用時,由於我們數據的維度可能非常高,L1正則化因為能產生稀疏解,使用的更為廣泛一些。

延伸

生成模型和判別模型

邏輯迴歸是一種判別模型,表現為直接對條件概率P(y|x)建模,而不關心背後的數據分佈P(x,y)。而高斯貝葉斯模型(Gaussian Naive Bayes)是一種生成模型,先對數據的聯合分佈建模,再通過貝葉斯公式來計算樣本屬於各個類別的後驗概率,即:

 

p(y|x)=P(x|y)P(y)∑P(x|y)P(y)p(y|x)=P(x|y)P(y)∑P(x|y)P(y)

 

通常假設P(x|y)是高斯分佈,P(y)是多項式分佈,相應的參數都可以通過最大似然估計得到。如果我們考慮二分類問題,通過簡單的變化可以得到:

 

logP(y=1|x)P(y=0|x)=logP(x|y=1)P(x|y=0)+logP(y=1)P(y=0)=−(x−μ1)22σ21+(x−μ0)22σ20+θ0log⁡P(y=1|x)P(y=0|x)=log⁡P(x|y=1)P(x|y=0)+log⁡P(y=1)P(y=0) =−(x−μ1)22σ12+(x−μ0)22σ02 +θ0

 

如果 σ1=σ0σ1=σ0,二次項會抵消,我們得到一個簡單的線性關係:

 

logP(y=1|x)P(y=0|x)=θTxlog⁡P(y=1|x)P(y=0|x)=θTx

 

由上式進一步可以得到:

 

P(y=1|x)=eθTx1+eθTx=11+e−θTxP(y=1|x)=eθTx1+eθTx=11+e−θTx

 

可以看到,這個概率和邏輯迴歸中的形式是一樣的。這種情況下GNB 和 LR 會學習到同一個模型。實際上,在更一般的假設(P(x|y)的分佈屬於指數分佈族)下,我們都可以得到類似的結論。

多分類(softmax)

如果yy不是在[0,1]中取值,而是在KK個類別中取值,這時問題就變為一個多分類問題。有兩種方式可以出處理該類問題:一種是我們對每個類別訓練一個二元分類器(One-vs-all),當KK個類別不是互斥的時候,比如用户會購買哪種品類,這種方法是合適的。如果KK個類別是互斥的,即 y=iy=i 的時候意味着 yy 不能取其他的值,比如用户的年齡段,這種情況下 Softmax 迴歸更合適一些。Softmax 迴歸是直接對邏輯迴歸在多分類的推廣,相應的模型也可以叫做多元邏輯迴歸(Multinomial Logistic Regression)。模型通過 softmax 函數來對概率建模,具體形式如下:

 

P(y=i|x,θ)=eθTix∑KjeθTjxP(y=i|x,θ)=eθiTx∑jKeθjTx

 

而決策函數為:y∗=argmaxiP(y=i|x,θ)y∗=argmaxiP(y=i|x,θ)

對應的損失函數為:

 

J(θ)=−1N∑iN∑jK1[yi=j]logeθTix∑eθTkxJ(θ)=−1N∑iN∑jK1[yi=j]log⁡eθiTx∑eθkTx

 

類似的,我們也可以通過梯度下降或其他高階方法來求解該問題,這裏不再贅述。

應用

本文開始部分提到了幾個在實際中遇到的問題,這裏以預測用户對品類的購買偏好為例,介紹一下美團是如何用邏輯迴歸解決工作中問題的。該問題可以轉換為預測用户在未來某個時間段是否會購買某個品類,如果把會購買標記為1,不會購買標記為0,就轉換為一個二分類問題。我們用到的特徵包括用户在美團的瀏覽,購買等歷史信息,見下表

類別

特徵

用户

購買頻次,瀏覽頻次,時間,地理位置 ...

品類

銷量,購買用户,瀏覽用户 ...

交叉

購買頻次,瀏覽頻次,購買間隔 ...

其中提取的特徵的時間跨度為30天,標籤為2天。生成的訓練數據大約在7000萬量級(美團一個月有過行為的用户),我們人工把相似的小品類聚合起來,最後有18個較為典型的品類集合。如果用户在給定的時間內購買某一品類集合,就作為正例。喲了訓練數據後,使用Spark版的LR算法對每個品類訓練一個二分類模型,迭代次數設為100次的話模型訓練需要40分鐘左右,平均每個模型2分鐘,測試集上的AUC也大多在0.8以上。訓練好的模型會保存下來,用於預測在各個品類上的購買概率。預測的結果則會用於推薦等場景。

由於不同品類之間正負例分佈不同,有些品類正負例分佈很不均衡,我們還嘗試了不同的採樣方法,最終目標是提高下單率等線上指標。經過一些參數調優,品類偏好特徵為推薦和排序帶來了超過1%的下單率提升。

此外,由於LR模型的簡單高效,易於實現,可以為後續模型優化提供一個不錯的baseline,我們在排序等服務中也使用了LR模型。

總結

邏輯迴歸的數學模型和求解都相對比較簡潔,實現相對簡單。通過對特徵做離散化和其他映射,邏輯迴歸也可以處理非線性問題,是一個非常強大的分類器。因此在實際應用中,當我們能夠拿到許多低層次的特徵時,可以考慮使用邏輯迴歸來解決我們的問題。

參考資料

  • Trevor Hastie et al. The elements of statistical learning
  • Andrew Ng, CS 229 lecture notes
  • C.M. Bishop, Pattern recognition and machine learning
  • Andrew Ng et al. On discriminative vs. generative classifiers:a comparison of logistic regression and naïve bayes