羅吉斯迴歸與其他模型的關係_機器學習

來源:互聯網
上載者:User
【機器學習演算法系列之二】淺析Logistic Regression  發表於 2016-01-09  |  分類於 project experience  |   |   12573 本文是受rickjin老師的啟發,談談關於logistic regression的一些內容,雖然已經有珠玉在前,但還是做一下自己的總結。在尋找資料的過程中,越看越覺得lr實在是博大精深,囊括的內容太多太多了,本文只能淺顯的提到某些方面。

【轉載請註明出處】https://chenrudan.github.io/blog/2016/01/09/logisticregression.html

本文是受rickjin老師的啟發,談談關於logistic regression的一些內容,雖然已經有珠玉在前,但還是做一下自己的總結。在尋找資料的過程中,越看越覺得lr實在是博大精深,囊括的內容太多太多了,本文只能淺顯的提到某些方面。文章的內容如下: 1. 起源 2. 模型介紹與公式推導 2.1 Logistic Distribution 2.2 Binomial logistic regression model 3. 解法 3.1 梯度下降法 3.2 牛頓法 3.3 BFGS 4. 正則化 4.1 過擬合 4.2 正則化的兩種方法 5. 羅吉斯迴歸與其他模型關係 5.1 羅吉斯迴歸與線性迴歸 5.2 羅吉斯迴歸與最大熵 5.3 羅吉斯迴歸與svm 5.4 羅吉斯迴歸與樸素貝葉斯 5.5 羅吉斯迴歸與能量函數 6. 並行化 7. 小結 8. 引用 1. 起源

logistic regression的起源主要分為幾個階段,從開始想到logistic這個詞,到發現logistic function,再推匯出logit function,最後才命名logistic regression。這些過程都是大量的研究者們共同努力發現的,只是在曆史的長河中,很多人被漸漸遺忘了。

logistic起源於對人口數量增長情況的研究,最重要的工作是Pierre François Verhulst在1838年提出了對人口增長的公式描述(這人是個比利時人,寫的文章是法語的,一個字都看不懂,下面的內容都是看了一篇將研究人口數量增長發展曆程的書[1]才知道的…),他博士畢業於根特大學的數學系,是個數學教授和人口學家。在1835年Verhulst的同鄉人Adolphe Quetelet發表了一篇關於討論人口增長的文章,文中認為人口不可能一直是幾何(指數)增長,而會被與增長速度平方成比例的一種阻力而影響,但是這篇論文只有猜想沒有數學理論基礎,卻極大的啟發了Verhulst。因此在1838年Verhulst發表了關於人口數量增長的論文,就是在這篇論文裡面他推匯出了logistic equation,文章中談到一個重要觀點,隨著時間的增加,一個國家的大小(我理解為資源)和這個國家人們的生育能力限制了人口的增長,人口數量會漸漸趨近一個穩定值。厲害的是他將這個過程用公式給描述出來了,他從人口數量增長的速度公式入手,即人口數量 P(t) P(t)對時間t的導數:

∂P∂t=rP(1−PK) ∂P∂t=rP(1−PK)

其中 K K就是他認為人口數量穩定的值,當 P(t) P(t)遠小於 K K時,求導公式後一項約等於0,那麼就變成了 ∂P∂t≃rP ∂P∂t≃rP,這個階段人口增長速度與人口數量和一個常數的乘積成正比,並且在漸漸層大。然後對這個式子求解一階線性微分方程得到 P(t)≃P(0)ert P(t)≃P(0)ert。當 P(t) P(t)接近 K K時,人口增長速度開始漸漸層小,同樣求解二階微分方程(論文中是將二階轉化成一階求解),然後將二者整合在一起得到最初的形式。

P(t)=P(0)ert1+P(0)(ert−1)/K P(t)=P(0)ert1+P(0)(ert−1)/K

他將法國英國等過十幾年的人口實際資料拿來跟這個公式對比之後發現確實擬合的很不錯。但他當時並沒有那麼多年的資料,下圖1是在他過世以後人們總結的300年來的人口增長分布,可以看到非常漂亮的擬合了logisitc分布的累積分布函數走勢。但是當時這個公式並沒有名字,直到1845年他發表了另外一篇重要文章[2],他給這個公式起了一個名字——“logistic”,此外在這篇文章中,他發現在$P(t)K/2 時 時P(t)$呈凹增長(通過求二階導來分析,這裡略)。這個增長的趨勢類似logistic分布的機率密度函數。

圖1 比利時的人口增長數量圖(圖來源[2])

然而在後來的幾十年內人們都沒有意識到這個工作的重要性,很多人都獨立的研究出了這個增長現象,直到1922年一個叫做Raymond Pearl的人口學家注意到Verhulst在1838年就已經提出了這個現象和公式,並在他的文章中也使用了logistic function來稱呼它,並且沿用至今。在1920年Pearl[3]在研究美國人口增長規律時提出了另外一種表示logistic function的方法。

y=beax1+ceax y=beax1+ceax

基於這個運算式,Joseph Berkson在1944年提出了logit function, logit=In(1−QQ) logit=In(1−QQ),假如 Q=11+ea−bx Q=11+ea−bx,結果就是 logit=a−bx logit=a−bx。

後來,在1958年David Cox提出了logistic regression[4]。他的文章是為瞭解決這樣一個問題,有一組取值為0,1的觀測值,它們的取值 Yi Yi依賴於一些獨立變數 xi xi, 當 Yi=1 Yi=1時對應的機率為 θi=pr(Yi=1) θi=pr(Yi=1)。由於 θi θi限制在[0,1]之間,因此假設 θi θi與 xi xi的關係符合logit function,即 logitθi≡logθi1−θi=α+βxi logitθi≡logθi1−θi=α+βxi,文章主要在分析如何求解裡面的參數 β β,這裡就不提了。由於用到了logistic function,而這個問題本身又個迴歸問題(建立觀測值與獨立變數之間的關係),因而它被稱呼為logistic regression。

貌似Cox在這篇文章中並不是刻意提出logistic regression,但確實這個詞第一次出現就是在這篇文章中,雖然Cox之前已經有很多人做過這方面的研究了,但是他們沒給個名字,因此Cox成了提出logistic regression的人。這個故事告訴我們一個道理,無論是發文章還是寫軟體一定要取一個言簡意賅又好聽又好記的名字…

以上是羅吉斯迴歸的曆史發展中比較有代表性的幾件事(我認為的…還有好多論文沒時間細看…),J.S Cramer[5]在他的文章中有更加詳細的討論。它是由數學家對人口發展規律研究得出,後來又被應用到了微生物生長情況的研究,後來又被應用解決經濟學相關問題,直到發展到今天作為一個非常重要的演算法而存在於各行各業。羅吉斯迴歸作為Regression Analysis的一個分支,它實際上還受到很多Regression Analysis相關技術的啟發,例如Berkson就是基於probit function提出的logit function。光它的起源到應用就能寫一本書出來了,難怪rickjin老師說lr其實非常非常複雜… 2.模型介紹與公式推導

上面說過了邏輯斯蒂迴歸的起源,下面討論一下完整的模型,首先介紹一下何為邏輯斯蒂分布,再由邏輯斯蒂分布推出羅吉斯迴歸。 2.1 Logistic Distribution

隨機變數X服從邏輯斯蒂分布,即X的累積分布函數為上文提到過的logistic function。對分布函數求導得到了機率密度函數。公式如下,參數影響參考圖2(圖來自維基百科,它的參數s就是統計學習方法上的 γ γ)

F(x)=P(X⩽x)=11+e−(x−μ)/γ F(x)=P(X⩽x)=11+e−(x−μ)/γ

f(x)=F′(x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2 f(x)=F′(x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2

圖2 不同參數對logistic分布的影響(圖片來源維基百科)

可以看到 μ μ影響的是中心對稱點的位置, γ γ越小中心點附近增長的速度越快。而常常在深度學習中用到的非線性變換sigmoid函數是邏輯斯蒂分布的 γ=1,μ=0 γ=1,μ=0的特殊形式。 2.2 Binomial logistic regression model

圖3 資料樣本

羅吉斯迴歸是為瞭解決分類問題,根據一些已知的訓練集訓練好模型,再對新的資料進行預測屬於哪個類。如圖3所示,有一些屬於兩個類的資料,目標是判斷圓圈屬於哪一類。也就是說羅吉斯迴歸的目標是找到一個有足夠好區分度的決策邊界,從而能夠將兩類很好的分開。假設已經存在這樣一個邊界,針對於圖中這種線性可分的情況,這條邊界是
輸入特徵向量的線性組合,假設輸入的特徵向量為 x∈Rn x∈Rn(圖中輸入向量為二維), Y Y取值為0,1。那麼決策邊界可以表示為 w1x1+w2x2+b=0 w1x1+w2x2+b=0,假如存在一個例子使得 hw(x)=w1x1+w2x2+b>0 hw(x)=w1x1+w2x2+b>0,那麼可以判斷它類別為1,這個過程實際上是感知機,即只通過決策函數的符號來判斷屬於哪一類。而羅吉斯迴歸需要再進一步,它要找到分類機率 P(Y=1) P(Y=1)與輸入向量 x x的直接關係,然後通過比較機率值來判斷類別,而剛好上文中的logit function能滿足這樣的要求,它令決策函數的輸出值 wTx+b wTx+b等於機率值比值取對數 logP(Y=1|x)1−P(Y=1|x) logP(Y=1|x)1−P(Y=1|x),求解這個式子得到了輸入向量 x x下導致產生兩類的機率為:

P(Y=1|x)=ew⋅x+b1+ew⋅x+b(1) P(Y=1|x)=ew⋅x+b1+ew⋅x+b(1)

P(Y=0|x)=11+ew⋅x+b(2) P(Y=0|x)=11+ew⋅x+b(2)

其中 w w稱為權重, b b稱為偏置,其中的 w⋅x+b w⋅x+b看成對 x x的線性函數。然後對比上面兩個機率值,機率值大的就是x對應的類。有時候為了書寫方便,會將 b b寫入 w w,即 w=(w0,w1,…,wn) w=(w0,w1,…,wn)其中 w0=b w0=b,並取 x0=1 x0=1。又已知一個事件發生的幾率odds是指該事件發生與不發生的機率比值,二分類情況下即 P(Y=1|x)P(Y=0|x)=P(Y=1|x)1−P(Y=1|x) P(Y=1|x)P(Y=0|x)=P(Y=1|x)1−P(Y=1|x)。取odds的對數就是上面提到的logit function, logit(P(Y=1|x))=logP(Y=1|x)1−P(Y=1|x)=w⋅x logit(P(Y=1|x))=logP(Y=1|x)1−P(Y=1|x)=w⋅x。從而可以得到一種對羅吉斯迴歸的定義,輸出 Y=1 Y=1的對數幾率是由輸入 x x的線性函數表示的模型,即邏輯斯蒂迴歸模型(李航.《統計機器學習》)。而直接考察公式1可以得到另一種對羅吉斯迴歸的定義,線性函數的值越接近正無窮,機率值就越接近1;線性值越接近負無窮,機率值越接近0,這樣的模型是邏輯斯蒂迴歸模型(李航.《統計機器學習》)。因此羅吉斯迴歸的思路是,先擬合決策邊界(這裡的決策邊界不局限於線性,還可以是多項式),再建立這個邊界與分類的機率聯絡,從而得到了二分類情況下的機率。這裡有個非常棒的博文[6]推薦,闡述了羅吉斯迴歸的思路。

在推導多分類的問題時,是假設 wT1x+b1=P(Y=1|x)P(Y=K|x) w1Tx+b1=P(Y=1|x)P(Y=K|x)、 wT2x+b2=P(Y=2|x)P(Y=K|x) w2Tx+b2=P(Y=2|x)P(Y=K|x)…等,再推匯出 P(Y=K|x)=11+∑K−1k=1ewTkx P(Y=K|x)=11+∑k=1K−1ewkTx、 P(Y=1|x)=ewT1x1+∑K−1k=1ewTkx P(Y=1|x)=ew1Tx1+∑k=1K−1ewkTx等。

有了上面的分類機率,就可以建立似然函數,通過極大似然估計法來確定模型的參數。設 P(Y=1|x)=hw(x) P(Y=1|x)=hw(x),似然函數為 ∏[hw(xi)]yi[1−hw(xi)](1−yi) ∏[hw(xi)]yi[1−hw(xi)](1−yi),對數似然函數為

L(w)=∑i=1NlogP(yi|xi;w)=∑i=1N[yiloghw(xi)+(1−yi)log(1−hw(xi))](3) L(w)=∑i=1NlogP(yi|xi;w)=∑i=1N[yiloghw(xi)+(1−yi)log(1−hw(xi))](3)

3.解法

最佳化羅吉斯迴歸的方法有非常多[7],有python的不同實現[8],這裡只談談梯度下降,牛頓法和BFGS。最佳化的主要目標是找到一個方向,參數朝這個方向移動之後使得似然函數的值能夠減小,這個方嚮往往由一階偏導或者二階偏導各種組合求得。羅吉斯迴歸的損失函數是

minJ(w)=min−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))](4) minJ(w)=min−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))](4)

先把 J(w) J(w)對 wj wj的一階二階偏導求出來,且分別用 g g和 H H表示。 g g是梯度向量, H H是海森矩陣。這裡只考慮一個執行個體 yi yi產生的似然函數對一個參數 wj wj的偏導。

gj=∂J(w)∂wj=y(i)hw(x(i))hw(x(i))(1−hw(x(i)))(−x(i)j)+(1−y(i))11−hw(x(i))hw(x(i))(1−hw(x(i)))x(i)j=(y(i)−hw(x(i)))x(i)(5) gj=∂J(w)∂wj=y(i)hw(x(i))hw(x(i))(1−hw(x(i)))(−xj(i))+(1−y(i))11−hw(x(i))hw(x(i))(1−hw(x(i)))xj(i)=(y(i)−hw(x(i)))x(i)(5)

Hmn=∂2J(w)∂wm∂wn=hw(x(i))(1−hw(x(i)))x(i)mx(i)n(6) Hmn=∂2J(w)∂wm∂wn=hw(x(i))(1−hw(x(i)))xm(i)xn(i)(6)

這幾種方法一般都是採用迭代的方式來逐步逼近極小值,需要給定參數 w0 w0作為起點,並且需要一個閾值 ϵ ϵ來判斷迭代何時停止。 3.1 梯度下降法

梯度下降是通過 J(w) J(w)對 w w的一階導數來找下降方向,並且以迭代的方式來更新參數,更新方式為 wk+1j=wkj+αgj wjk+1=wjk+αgj, k k為迭代次數。每次更新參數後,可以通過比較 ||J(wk+1)−J(wk)|| ||J(wk+1)−J(wk)||或者 ||wk+1−wk|| ||wk+1−wk||與某個閾值 ϵ ϵ大小的方式來停止迭代,即比閾值小就停止。 3.2 牛頓法

牛頓法的基本思路是,在現有極小點估計值的附近對f(x)做二階泰勒展開,進而找到極小點的下一個估計值[9]。假設 wk wk為當前的極小值估計值,那麼有

φ(w)=J(wk)+J′(wk)(w−wk)+12J′′(wk)(w−wk)2(7) φ(w)=J(wk)+J′(wk)(w−wk)+12J″(wk)(w−wk)2(7)

然後令 φ′(w)=0 φ′(w)=0,得到了 w=wk−J′(wk)J′′(wk) w=wk−J′(wk)J″(wk)。因此有迭代更新式,

wk+1=wk−J′(wk)J′′(wk)=wk−H−1k⋅gk(8) wk+1=wk−J′(wk)J″(wk)=wk−Hk−1⋅gk(8)

此方法中也需要一個閾值 ϵ ϵ,當 ||gk||<epsilon ||gk||<epsilon時停止迭代。此外,這個方法需要目標函數是二階連續可微的,本文中的 J(w) J(w)是符合要求的。 3.3 BFGS

由於牛頓法中需要求解二階偏導,這個計算量會比較大,而且有時目標函數求出的海森矩陣無法保持正定,因此提出了擬牛頓法。擬牛頓法是一些演算法的總稱,它們的目標是通過某種方式來近似表示森海矩陣(或者它的逆矩陣)。例如BFGS就是一種擬牛頓法,它是由四個發明人的首字母組合命名,是求解無約束非線性最佳化問題最常用的方法之一。目標是用迭代的方式逼近海森矩陣 H H,假設這個逼近值為 Bk≈Hk Bk≈Hk,那麼希望通過計算 Bk+1=Bk+ΔBk Bk+1=Bk+ΔBk能夠達到目的。並且假設 ΔBk=αuuT+βvvT ΔBk=αuuT+βvvT,而由3.2可知, Δw=wk+1−wk=(H−1)k+1(gk+1−gk)=(H−1)kΔg Δw=wk+1−wk=(H−1)k+1(gk+1−gk)=(H−1)kΔg,將 Bk+1 Bk+1的更新式代入,可以得到

Δg=BkΔg+(αuTΔw)u+(βvTΔw)v(9) Δg=BkΔg+(αuTΔw)u+(βvTΔw)v(9)

此處,直接令 αuTΔw=1 αuTΔw=1、 βvTΔw=−1 βvTΔw=−1、 u=Δg u=Δg和 v=BkΔw v=BkΔw,那麼可以求得 α=1(Δg)TΔw α=1(Δg)TΔw和 β=−1(Δw)TBkΔw β=−1(Δw)TBkΔw。從而再代入求 ΔBk ΔBk的式子就可以得到更新的式子

ΔBk=Δg(Δg)T(Δg)TΔw−BkΔw(Δw)TBk(Δw)TBkΔw(10) ΔBk=Δg(Δg)T(Δg)TΔw−BkΔw(Δw)TBk(Δw)TBkΔw(10)

這裡還會對(10)進行變換,通過Sherman-Morrison公式直接求出 (B−1)k+1 (B−1)k+1與 (B−1)k (B−1)k,用 Dk+1 Dk+1和 Dk Dk來表。更新公式變成了

Dk+1=(I−Δw(Δg)T(Δg)TΔw)Dk(I−Δg(Δw)T(Δg)TΔw)+Δw(Δw)T(Δg)TΔw(11) Dk+1=(I−Δw(Δg)T(Δg)TΔw)Dk(I−Δg(Δw)T(Δg)TΔw)+Δw(Δw)T(Δg)TΔw(11)

用BFGS來更新參數的流程如下: 確定改變數, (Δw)k=−Dk⋅gk (Δw)k=−Dk⋅gk 更新參數, wk+1=wk+λ(Δw)k wk+1=wk+λ(Δw)k 求出 Δg=gk+1−gk Δg=gk+1−gk 由(11)求出 Dk+1 Dk+1

式子的係數 λ=argminJ(wk+λ(Δw)k) λ=argminJ(wk+λ(Δw)k),即在求得下降方向上來從很多值中搜尋最優的下降大小,這裡我覺得可以用學習率替代。因此,這個更新方法跟牛頓法的區別是,它是在更新參數 w w之後更新一下近似森海矩陣的值,而牛頓法是在更新 w w之前完全的計算一遍森海矩陣。還有一種從計算上改進BFGS的方法稱為L-BFGS,不直接儲存森海矩陣,而是通過儲存計算過程中產生的部分 Δw(g)k−m+1,k−m+2,…,k Δw(g)k−m+1,k−m+2,…,k,從而減少了參數儲存所需空間。 4.正則化

正則化不是只有羅吉斯迴歸存在,它是一個通用的演算法和思想,所以會產生過擬合現象的演算法都可以使用正則化來避免過擬合,在談正則化之前先聊聊什麼是過擬合。 4.1 過擬合

之前的模型介紹和演算法求解可以通過訓練資料集(圖2中的三角形和星形)將分類模型訓練好,從而可以預測一個新資料(例如圖2中的粉色圓圈)的分類,這種對新資料進行預測的能力稱為泛化能力。而對新資料預測的結果不好就是泛化能力差,一般來說泛化能力差都是由於發生了過擬合現象。過擬合現象是指對訓練資料預測很好但是對未知資料預測不行的現象,通常都是因為模型過於複雜,或者訓練資料太少。即當 complexityofthemodeltrainingsetsize complexityofthemodeltrainingsetsize比值太大的情況下會發生過擬合。模型複雜體現在兩個方面,一是參數過多,二是參數值過大。參數值過大會導致導數非常大,那麼擬合的函數波動就會非常大,即下圖所示,從左至右分別是欠擬合、擬合和過擬合。

圖4 同樣資料下欠擬合,擬合和過擬合(圖片來源[12])

在模型過於複雜的情況下,模型會學習到很多特徵,從而導致可能把所有訓練樣本都擬合到,就像上圖中一樣,擬合的曲線將每一個點都正確的分類了。舉個例子,假如要預測一個房子是貴還是便宜,房子的面積和所屬的地區是有用的特徵,但假如訓練集中剛好所有貴的房子都是開發商A開發,便宜的都是開發商B開發,那麼當模型變複雜能學習到的特徵變多之後,房子是哪個開發商的會被模型認為是個有用特徵,但是實際上這點不能成為判斷的標準,這個現象就是過擬合。因此在這個例子中可以看到,解決的方法有兩個,一個是減少學習的特徵不讓模型學到開發商的特徵,一是增加訓練集,讓訓練集有貴房子是B開發的樣本。

從而,解決過擬合可以從兩個方面入手,一是減少模型複雜度,一是增加訓練集個數。而正則化就是減少模型複雜度的一個方法。 4.2 正則化的兩種方法

由於模型的參數個數一般是由人為指定和調節的,所以正則化常常是用來限制模型參數值不要過大,也被稱為懲罰項。一般是在目標函數(經驗風險)中加上一個正則化項 Φ(w) Φ(w)即

J(w)=−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))]+λΦ(w)(12) J(w)=−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))]+λΦ(w)(12)

而這個正則化項一般會採用L1範數或者L2範數。其形式分別為 Φ(w)=||x||1 Φ(w)=||x||1和 Φ(w)=||x||2 Φ(w)=||x||2。

首先針對L1範數 ϕ(w)=|w| ϕ(w)=|w|,當採用梯度下降方式來最佳化目標函數時,對目標函數進行求導,正則化項導致的梯度變化當 wj>0 wj>0是取1,當 wj<0 wj<0時取-1.

從而導致的參數 wj wj減去了學習率與(13)式的乘積,因此當 wj wj大於0的時候, wj wj會減去一個正數,導致 wj wj減小,而當 wj wj小於0的時候, wj wj會減去一個負數,導致 wj wj又變大,因此這個正則項會導致參數 wj wj取值趨近於0,也就是為什麼L1正則能夠使權重稀疏,這樣參數值就受到控制會趨近於0。L1正則還被稱為 Lasso regularization。

然後針對L2範數 ϕ(w)=∑nj=1w2j ϕ(w)=∑j=1nwj2,同樣對它求導,得到梯度變化為 ∂Φ(w)∂wj=2wj ∂Φ(w)∂wj=2wj(一般會用 λ2 λ2來把這個係數2給消掉)。同樣的更新之後使得 wj wj的值不會變得特別大。在機器學習中也將L2正則稱為weight decay,在迴歸問題中,關於L2正則的迴歸還被稱為Ridge Regression嶺迴歸。weight decay還有一個好處,它使得目標函數變為凸函數,梯度下降法和L-BFGS都能收斂到全域最優解。

需要注意的是,L1正則化會導致參數值變為0,但是L2卻只會使得參數值減小,這是因為L1的導數是固定的,參數值每次的改變數是固定的,而L2會由於自己變小改變數也變小。而(12)式中的 λ λ也有著很重要的作用,它在權衡擬合能力和泛化能力對整個模型的影響, λ λ越大,對參數值懲罰越大,泛化能力越好。

此外,從貝葉斯的角度而言,正則化項實際上是給了模型一個先驗知識,L2正則相當於添加了一個均值為0共變數為 1/λ 1/λ的高斯分布先驗(將L2正則表示為 λ2wTw λ2wTw),當 λ λ為0,即不添加正則項,那麼可以看成共變數是無窮大, w w可以不受控制變成任意大。當 λ λ越大,即共變數越小,那麼參數值的取值方差會變小,模型會趨向於穩定(參考[10]最高票答案)。 5. 羅吉斯迴歸與其他模型的關係 5.1 羅吉斯迴歸與線性迴歸

在談兩者關係之前,需要討論的是,羅吉斯迴歸中使用到的sigmoid函數到底起到了什麼作用。下圖的例子中,需要判斷腫瘤是惡性還是良性,其中橫軸是腫瘤大小,縱軸是線性函數 hw(x)=wTx+b hw(x)=wTx+b的取值,因此在左圖中可以根據訓練集(圖中的紅叉)找到一條決策邊界,並且以0.5作為閾值,將 hw(x)⩾0.5 hw(x)⩾0.5情況預測為惡性腫瘤,這種方式在這種資料比較集中的情況下好用,但是一旦出現如右圖中的離群點,它會導致學習到的線性函數偏離(它產生的權重改變數會比較大),從而原先設定的0.5閾值就不好用了,此時要麼調整閾值要麼調整線性函數。如果我們調節閾值,在這個圖裡線性函數取值看起來是0~1,但是在其他情況下可能就是從 −∞ −∞到 ∞ ∞,所以閾值的大小很難確定,假如能夠把 wTx+b wTx+b的值變換到一個能控制的範圍那麼閾值就好確定了,所以找到了sigmoid函數,將 wTx+b wTx+b值對應到了(0,1),並且解釋成機率。而如果調節線性函數,那麼最需要的是減少離群點的影響,離群點往往會導致比較大的 |wTx+b| |wTx+b|值,通過sigmoid函數剛好能夠削弱這種類型值的影響,這種值經過sigmoid之後接近0或者1,從而對 wj wj的偏導數為 hw(x(i))(1−hw(x(i)))x(i)j hw(x(i))(1−hw(x(i)))xj(i),無論接近0還是1這個導數都是非常小的。因此可以說sigmoid在羅吉斯迴歸中起到了兩個作用,一是將線性函數的結果映射到了(0,1),一是減少了離群點的影響。

圖5 良性惡性腫瘤分類(圖來源[12])

有了上面的分析基礎,再來看看羅吉斯迴歸和線性迴歸的關係(線性迴歸我這裡就不展開說了,不清楚的可以看看[11]),有的人覺得羅吉斯迴歸本質上就是線性迴歸,它們倆都要學習一個線性函數,羅吉斯迴歸無非是多加了一層函數映射,但是我對線性迴歸的理解是在擬合輸入向量x的分布,而羅吉斯迴歸中的線性函數是在擬合決策邊界,它們的目標是不一樣的。所以我不覺得羅吉斯迴歸比線性迴歸好,它們倆要解決的問題不一樣。但它們都可以用一個東西來概括,那就是廣義線性模型GLM(Generalized linear models)[12]。先介紹何為指數簇(exponential family),當某個隨機變數的機率分布可以表示為 p(y;η)=b(y)exp(ηTT(y)−a(η)) p(y;η)=b(y)exp(ηTT(y)−a(η))時就可以說它屬於指數簇,通過調整 η η可以獲得不同的分布。對應於線性迴歸與羅吉斯迴歸的高斯分布與伯努利分布就是屬於指數簇的,例如取 T(y)=y T(y)=y、 a(η)=−log(1−ϕ)=log(1+eη) a(η)=−log(1−ϕ)=log(1+eη)以及 b(y)=1 b(y)=1代入上式得到 p(y;η)=exp(ylog(ϕ1−ϕ)+log(1−ϕ))=exp(ylogϕ+log(1−ϕ))=ϕy(1−ϕ)1−y p(y;η)=exp(ylog(ϕ1−ϕ)+log(1−ϕ))=exp(ylogϕ+log(1−ϕ))=ϕy(1−ϕ)1−y。

GLM需要滿足下面三個條件。 在給定觀測值x和參數w情況下,輸出y服從參數為 η η的指數簇分布 預測的值 hw(x)=E[y|x] hw(x)=E[y|x] η=wTx η=wTx

因此,選擇合適的參數就能分析出線性迴歸和羅吉斯迴歸都是GLM的一種特例,有時會看到有的人會從GLM出發將羅吉斯迴歸的公式給推匯出來。總之,線性迴歸和羅吉斯迴歸是屬於同一種模型,但是它們要解決的問題不一樣,前者解決的是regression問題,後者解決的是classification問題,前者的輸出是連續值,後者的輸出是離散值,而且前者的損失函數是輸出y的高斯分布,後者損失函數是輸出的伯努利分布。 5.2 羅吉斯迴歸與最大熵

最大熵在解決二分類問題時就是羅吉斯迴歸,在解決多分類問題時就是多項羅吉斯迴歸。為了證明最大熵模型跟羅吉斯迴歸的關係,那麼就要證明兩者求出來的模型是一樣的,即求出來的h(x)的形式應該是一致的。由於最大熵是通過將有約束條件的條件極值問題轉變成拉格朗日對偶問題來求解,模型的熵為

−∑v=1k∑i=1mh(x(i))vlog(h(x(i))v)(14) −∑v=1k∑i=1mh(x(i))vlog(h(x(i))v)(14)

並假設約束條件如下,其中 v,u v,u是輸出類別的index, j j是對應輸入向量 x x的index, A(u,y(i)) A(u,y(i))是指示函數,兩個值相等輸出1,其他輸出0[13]。而第三個約束是通過令公式(5)等於0得來的,它的意義是參數 wu,j wu,j最好的取值是讓每一個樣本i對應 h(x(i))u h(x(i))u的行為接近指示函數 A(u,y(i)) A(u,y(i))。

⎧⎩⎨⎪⎪⎪⎪h(x)v⩾0∑kv=1h(x)v=1∑mi=1h(x(i))ux(i)j=∑mi=1A(u,y(i))x(i)j always  always  for all u,j(15) {h(x)v⩾0 always ∑v=1kh(x)v=1 always ∑i=1mh(x(i))uxj(i)=∑i=1mA(u,y(i))xj(i) for all u,j(15)

通過約束條件(15)可以直接推匯出softmax的公式。基於這一點,再回過頭來看《統計學習方法》上的約束條件,如果假設 P(y|x)=h(x) P(y|x)=h(x),公式左邊的 f(x,y) f(x,y)實際上取值一直為1,那麼這兩個約束條件實際上是一樣的。

∑x,yP(x)˜P(y|x)f(x,y)=∑x,yP(x,y)˜f(x,y)(16) ∑x,yP(x)~P(y|x)f(x,y)=∑x,yP(x,y)~f(x,y)(16)

因此,可以這樣說,最大熵在解決二分類問題時就是羅吉斯迴歸,在解決多分類問題時就是多項羅吉斯迴歸。此外,最大熵與羅吉斯迴歸都稱為對數線性模型(log linear model)。 5.3 羅吉斯迴歸與svm

羅吉斯迴歸和svm作為經典的分類演算法,被放在一起討論的次數特別多,知乎和Quora上每種意見都非常有意思都從不同角度有分析,建議都可以看看[14][15][16]。這裡只討論一些我贊同的觀點。要是不清楚svm的由來,建議看JerryLead的系列部落格[17],我這裡就不提了。

相同點: 都是分類演算法 都是監督學習演算法 都是判別模型 都能通過核函數方法針對非線性情況分類 目標都是找一個分類超平面 都能減少離群點的影響

不同點: 損失函數不同,羅吉斯迴歸是cross entropy loss,svm是hinge loss 羅吉斯迴歸在最佳化參數時所有樣本點都參與了貢獻,svm則只取離分離超平面最近的支援向量樣本。這也是為什麼羅吉斯迴歸不用核函數,它需要計算的樣本太多。並且由於羅吉斯迴歸受所有樣本的影響,當樣本不均衡時需要平衡一下每一類的樣本個數。 羅吉斯迴歸對機率建模,svm對分類超平面建模 羅吉斯迴歸是處理經驗風險最小化,svm是結構風險最小化。這點體現在svm內建L2正則化項,羅吉斯迴歸並沒有 羅吉斯迴歸通過非線性變換減弱分離平面較遠的點的影響,svm則只取支援向量從而消去較遠點的影響 羅吉斯迴歸是統計方法,svm是幾何方法 5.4 羅吉斯迴歸與樸素貝葉斯

這兩個演算法有一些相似之處,並且在對比判別模型和產生模型,它們作為典型的分類演算法經常被提及,因此這裡也做一個小小的總結。

相同點是,它們都能解決分類問題和都是監督學習演算法。此外,有意思的是,當假設樸素貝葉斯的條件機率 P(X|Y=ck) P(X|Y=ck)服從高斯分布時Gaussian Naive Bayes,它計算出來的 P(Y=1|X) P(Y=1|X)形式跟羅吉斯迴歸是一樣的[18]。

不同的地方在於,羅吉斯迴歸為判別模型求的是 p(y|x) p(y|x),樸素貝葉斯為產生模型求的是 p(x,y) p(x,y)。前者需要迭代最佳化,後者不需要。在資料量少的情況下後者比前者好,資料量足夠的情況下前者比後者好。由於樸素貝葉斯假設了條件機率 P(X|Y=ck) P(X|Y=ck)是條件獨立的,也就是每個特徵權重是獨立的,如果資料不符合這個情況,樸素貝葉斯的分類表現就沒有羅吉斯迴歸好。 5.5 羅吉斯迴歸與能量模型

(3月3日補充)

基於能量的模型不是一個具體的演算法,而是一種架構思想,它認為輸入輸出變數之間的依賴關係用一個值表示 E(x,y) E(x,y),這個值稱為能量,對關係建模的這個函數叫能量函數 。如果在保持輸入變數不變的情況下,對應正確輸出時能量低,對應錯誤輸出時能量高,那麼這個模型就是有用的。

因此當給定了訓練集S,能量模型的構造和訓練由四部分組成[19]: 有合適的能量函數 E(W,Y,X) E(W,Y,X) inference演算法,針對一個給定的輸入變數X和能量函數形式,找到一個Y值使得能量最小,即 Y∗=argminY∈yE(W,Y,X) Y∗=argminY∈yE(W,Y,X) 有loss函數 L(W,S) L(W,S),用來衡量在訓練集S下能量函數的好壞 learning演算法,用來找合適的參數W,在一系列能量函數中選擇讓損失函數最小化的能量函數。

可以看出13步通過選擇不同的能量函數和損失函數來構造不同的模型,24步是如何訓練這樣的一個模型。

因此當我們假設要解決二分類問題時,y取值為-1和1,如果假設能量函數為 E(W,Y,X)=−YGw(X)=WTX E(W,Y,X)=−YGw(X)=WTX,損失函數採用negative log-likelihood loss,那麼可以求得損失函數具體形式為 Lnll(W,S)=1P∑Pi=1log(1+exp(−2YiWTX)) Lnll(W,S)=1P∑i=1Plog(1+exp(−2YiWTX)),這個形式與把(1)(2)代入公式(3)後得到的損失函數公式是一致的,說明這種組合下,產生的演算法就是羅吉斯迴歸。因此羅吉斯迴歸是能量模型的一種特例。

而此處,同樣針對二分類問題,假如能量函數保持不變,損失函數採用hinge loss,並加上一個正則化項,那麼就能夠推匯出SVM的損失函數運算式(SVM的核函數體現在能量函數中,這裡為了方便解釋沒有具體展開說)。這也是為什麼說羅吉斯迴歸與svm最本質的區別就是損失函數不同。 6. 並行化

由於找不到特別多的並行化資料,這裡就分析一下博主馮揚給出的實現[20]。實際上羅吉斯迴歸的並行化最主要的目標就是計算梯度。將目標的label變為-1和1,那麼梯度公式可以整合在一起變成 ∑Mi=1(11+exp(y(i)wTx(i))−1)y(i)x(i) ∑i=1M(11+exp(y(i)wTx(i))−1)y(i)x(i),梯度計算裡面最主要的就是矩陣乘法,一般的做法都是想辦法將矩陣切割成大小合適的塊。針對二分類,現在有M個樣本,N個特徵,假如有m*n個計算節點,並且將計算節點排列成m行n列,那麼每個節點分配M/m個樣本,N/n個特徵,如下圖所示。

圖6 並行LR的資料分割(圖片來源[20])

原文的標示我不太習慣,下面都改成了ij,並畫出了矩陣運算的過程圖。其中 X(i,j),i∈[1,m],j∈[1,n] X(i,j),i∈[1,m],j∈[1,n]表示輸入資料被分塊後的第i行第j列的塊。

X(i,j),k X(i,j),k表示這個塊中的第k行, Wj Wj表示參數的第j塊。

第一步計算

d(i,j),k=WTjX(i,j),k d(i,j),k=WjTX(i,j),k

第二步計算

di,k=∑j=1nd(i,j),k di,k=∑j=1nd(i,j),k

圖7 並行LR的求梯度12步

第三步計算

G(i,j)=∑k=1M/m(11+exp(yi,kdi,k)−1)yi,kX(i,j),k G(i,j)=∑k=1M/m(11+exp(yi,kdi,k)−1)yi,kX(i,j),k

第四步計算

Gj=∑i=1mG(i,j) Gj=∑i=1mG(i,j)

圖6 並行LR的求梯度34步

從而,經過上面的分解步驟可以將羅吉斯迴歸來做並行化計算。 7. 總結

這篇文章寫了好幾天,有時候寫著寫著就把自己繞進去了,因為可以展開說的地方太多了,寫完這些內容,我又找了一些面試題看了看,理論部分基本上都能覆蓋到了,但是涉及到真正的應用還是要再花時間去瞭解,最後的並行化理解還不夠透徹,矩陣乘法我用gpu實現過,但是並沒有接觸過海量的資料,也不知道真正的問題會發生在什麼地方。羅吉斯迴歸可以從很多方面來解釋來理解,確實是個很美麗的演算法。 8. 引用

[1] Verhulst and the logistic equation (1838)

[2] Mathematical enquiries on the law of population growth

[3] Proceedings of the national academy of sciences

[4] The regression analysis of binary sequences

[5] The Origins of Logistic Regression

[6] 機器學習系列(2)用初等數學視角解讀羅吉斯迴歸

[7] A comparison of numerical optimizers for logistic regression

[8] Numerical optimizers for Logistic Regression

[9] 牛頓法與擬牛頓法學習筆記(一)牛頓法

[10] 知乎:機器學習中使用「正則化來防止過擬合」到底是一個什麼原理

[11] 多變數線性迴歸 Linear Regression with multiple variable

[12] CS229 Lecture notes

[13] The equivalence of logistic regression and maximum entropy models

[14] Linear SVM 和 LR 有什麼異同。

[15] SVM和logistic迴歸分別在什麼情況下使用。

[16] Support Vector Machines: What is the difference between Linear SVMs and Logistic Regression?

[17] 支援向量機svm

[18] GENERATIVE AND DISCRIMINATIVE CLASSIFIERS: NAIVE BAYES AND LOGISTIC REGRESSION

[19] A Tutorial on Energy-Based Models

[20] 並行羅吉斯迴歸

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.