【機器學習】Logistic Regression 的前世今生(理論篇)
版權宣告:如需轉載,請附上本文連結。作者主頁:http://blog.csdn.net/cyh_24 https://blog.csdn.net/cyh24/article/details/50359055
Logistic Regression 的前世今生(理論篇)
本部落格僅為作者記錄筆記之用,不免有很多細節不對之處。
還望各位看官能夠見諒,歡迎批評指正。
部落格雖水,然亦博主之苦勞也。
如需轉載,請附上本文連結,不甚感激!
http://blog.csdn.net/cyh_24/article/details/50359055
寫這篇部落格的動力是源於看到了下面這篇微博:
我在看到這篇微博的時候大為觸動,因為,如果是rickjin來面試我,我想我會死的很慘,因為他問的問題我基本都回答不上來。所以,痛定思痛,我決定今後對一些演算法的理解不能只是停留在表面,而應該至少往前推一步,嘗試看得更遠一些。
對於學習機器學習的人來說,Logistic Regression可以說是一個入門的演算法,演算法本身不復雜,不過也正是因為這個原因,很多人往往忽略了這個演算法的一些內在精髓。
這篇部落格裡,我打算就rickjin問的一些問題,進行總結:
1. LR原理
2. LR的求解數學推導
3. LR的正則化
4. 為什麼LR能比線性迴歸好?
5. LR與MaxEnt的關係
6. 並行化的LR
邏輯迴歸模型
雖然邏輯迴歸 姓 迴歸,不過其實它的真實身份是二分類器。介紹完了姓,我們來介紹一下它的名字,邏輯斯蒂。這個名字來源於邏輯斯蒂分佈:
邏輯斯蒂分佈
設X是連續隨機變數,X服從邏輯斯蒂分佈是指X具有下列的分佈函式和密度函式:
F(x)=P(X≤x)=11+e−(x−μ)/γ
F(x)=P(X≤x)=11+e−(x−μ)/γ
f(x)=F′(X≤x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2
f(x)=F′(X≤x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2
上式中,μμ 表示位置引數,γ>0γ>0 為形狀引數。
有沒有發現F(x)F(x)是啥?有圖你就知道真相了:
有沒有發現右邊很熟悉?沒錯,就是sigmoid 曲線,只不過,這個曲線是以點( μμ, 1212) 為中心對稱。從圖中可以看出,曲線在中心附近增長速度較快,而形狀引數 γγ 值越小,曲線在中心附近增長越快,請自行腦補一下。
二項邏輯迴歸模型
之前說到,邏輯迴歸是一種二分類模型,由條件概率分佈P(Y|X)P(Y|X) 表示,形式就是引數化的邏輯斯蒂分佈。這裡的自變數XX取值為實數,而因變數YY為0或者1。二項LR的條件概率如下:
P(Y=1|x)==ew⋅x1+ew⋅x
P(Y=1|x)==ew⋅x1+ew⋅x
P(Y=0|x)==11+ew⋅x
P(Y=0|x)==11+ew⋅x
一個事件的機率(odds):指該事件發生與不發生的概率比值,若事件發生概率為pp,那麼事件發生的機率就是
odds=p1−p
odds=p1−p
那麼該事件的對數機率(log odds或者logit)就是:
logit(p)=logp1−p
logit(p)=logp1−p
那麼,對邏輯迴歸而言,Y=1Y=1的對數機率就是:
logP(Y=1|x)1−P(Y=1|x)=w⋅x
logP(Y=1|x)1−P(Y=1|x)=w⋅x
也就是說,輸出Y=1Y=1的對數機率是由輸入xx的線性函式表示的模型,這就是 邏輯迴歸模型。當 w⋅xw⋅x的值越接近正無窮,P(Y=1|x)P(Y=1|x) 概率值也就越接近1.
模型的數學形式確定後,剩下就是如何去求解模型中的引數。在統計學中,常常使用極大似然估計法來求解,即找到一組引數,使得在這組引數下,我們的資料的似然度(概率)最大。
設:
P(Y=1|x)=π(x),P(Y=0|x)=1−π(x)
P(Y=1|x)=π(x),P(Y=0|x)=1−π(x)
似然函式:
L(w)=∏[π(xi)]yi[1−π(xi)]1−yi
L(w)=∏[π(xi)]yi[1−π(xi)]1−yi
對數似然函式:
lnL(w)=∑[yilnπ(xi)+(1−yi)ln(1−π(xi))]
lnL(w)=∑[yilnπ(xi)+(1−yi)ln(1−π(xi))]
=∑[yilnπ(xi)1−π(xi)+ln(1−π(xi))]
=∑[yilnπ(xi)1−π(xi)+ln(1−π(xi))]
=∑[yi(w⋅xi)−ln(1+ew⋅xi)]
=∑[yi(w⋅xi)−ln(1+ew⋅xi)]
現在要求 ww 使得L(w)L(w) 最大,有的人可能會有疑問:
在機器學習領域,我們更經常遇到的是損失函式的概念,其衡量的是模型預測錯誤的程度。常用的損失函式有0-1損失,log損失,hinge損失等。通常是最小化損失函式,這裡為啥求極大似然估計?
實際上,對數似然損失在單個資料點上的定義為:
−ylnp(y|x)−(1−y)ln[1−p(y|x)]=−[yilnπ(xi)+(1−yi)ln(1−π(xi))]
−ylnp(y|x)−(1−y)ln[1−p(y|x)]=−[yilnπ(xi)+(1−yi)ln(1−π(xi))]
如果取整個資料集上的平均對數似然損失,我們恰好可以得到:
J(w)=−1NlnL(w)
J(w)=−1NlnL(w)
即在邏輯迴歸模型中,我們最大化似然函式和最小化對數似然損失函式實際上是等價的。
接下來就是對L(w)L(w)求極大值(也可認為是求J(w)J(w)的最小值),得到ww的估計值。邏輯迴歸學習中通常採用的方法是梯度下降法 和 牛頓法。
[先跑個題],講到求極值的方法,突然想到有幾個視覺化的gif圖,能夠很直觀地體現各種演算法的優劣,好東西當然要分享了。
Imgur 網友通過視覺化方法,對比了SGD, momentum, Nesterov, AdaGrad, AdaDelta,
RMSProp等優化演算法在Long Valley, Beale’s Function及Saddle Point情況下的性質。
Long Valley:
Beale’s Function:
Saddle Point:
以後會專門寫一篇來講求極值的方法,這是題外話了,我們還是繼續迴歸邏輯吧,哈哈。
下面介紹使用梯度下降法來求解邏輯迴歸問題。
使用梯度下降法(Gradient Descent)求解邏輯迴歸
演算法(梯度下降法求解邏輯迴歸)
輸入:目標函式:J(w)J(w)(對數似然損失函式),梯度函式: g(w)=∇J(w)g(w)=∇J(w), 計算精度ϵϵ
輸出:J(w)J(w) 的極小值點 w∗w∗
過程:
(1) 取初始值 w0∈Rnw0∈Rn, 令k=0k=0
(2) 計算J(wk)J(wk)
J(wk)=−1NlnL(wk)⇒−lnL(wk)
J(wk)=−1NlnL(wk)⇒−lnL(wk)
=∑[yi(wk⋅xi)−ln(1+ewk⋅xi)]
=∑[yi(wk⋅xi)−ln(1+ewk⋅xi)]
(3) 計算梯度 gk=g(wk)=∇J(w)gk=g(wk)=∇J(w)
g(wk)=∑[xi⋅yi−xi⋅ewk⋅xi1+ewk⋅xi]
g(wk)=∑[xi⋅yi−xi⋅ewk⋅xi1+ewk⋅xi]
=∑[xi⋅yi−π(xi)]
=∑[xi⋅yi−π(xi)]
若||gk||<ϵ||gk||<ϵ ,停止迭代,令
w∗=wk
w∗=wk
否則,令pk=−g(wk)pk=−g(wk),求λkλk,使得
J(wk+λkpk)=min(J(wk+λpk))
J(wk+λkpk)=min(J(wk+λpk))
(4) 令wk+1=wk+λkpkwk+1=wk+λkpk,計算 J(wk+1)J(wk+1)
當||J(wk+1)−J(wk)||<ϵ||J(wk+1)−J(wk)||<ϵ 或 ||wk+1−wk||<ϵ||wk+1−wk||<ϵ,停止迭代,令
w∗=wk+1
w∗=wk+1
(5) 否則,令k=k+1k=k+1,轉(3).
邏輯迴歸的正則化
當模型的引數過多時,很容易遇到過擬合的問題。而正則化是結構風險最小化的一種實現方式,通過在經驗風險上加一個正則化項,來懲罰過大的引數來防止過擬合。
正則化是符合奧卡姆剃刀(Occam’s razor)原理的:在所有可能選擇的模型中,能夠很好地解釋已知資料並且十分簡單的才是最好的模型。
我們來看一下underfitting,fitting跟overfitting的情況:
顯然,最右這張圖overfitting了,原因可能是能影響結果的引數太多了。典型的做法在優化目標中加入正則項,通過懲罰過大的引數來防止過擬合:
J(w)=>J(w)+λ||w||p
J(w)=>J(w)+λ||w||p
p=1或者2,表示L1L1 範數和 L2L2範數,這兩者還是有不同效果的。
L1L1範數:是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則運算元”(Lasso regularization)。那麼,引數稀疏 有什麼好處呢?
一個關鍵原因在於它能實現 特徵的自動選擇。一般來說,大部分特徵 xixi和輸出 yiyi 之間並沒有多大關係。在最小化目標函式的時候考慮到這些額外的特徵 xixi,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的資訊反而會干擾了對正確 yiyi 的預測。稀疏規則化運算元的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些沒有資訊的特徵,也就是把這些特徵對應的權重置為0。
L2L2範數:它有兩個美稱,在迴歸裡面,有人把有它的迴歸叫“嶺迴歸”(Ridge Regression),有人也叫它“權值衰減”(weight decay)。
它的強大之處就是它能 解決過擬合 問題。我們讓 L2L2 範數的規則項 ||w||2||w||2 最小,可以使得 ww 的每個元素都很小,都接近於0,但與 L1L1 範數不同,它不會讓它等於0,而是接近於0,這裡還是有很大區別的。而越小的引數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。咦,你為啥說越小的參數列示的模型越簡單呢? 其實我也不知道,我也是猜,可能是因為引數小,對結果的影響就小了吧。
為了更直觀看出兩者的區別,我再放一張圖:
為了簡單,上圖只考慮了ww為二維(w1,w2)(w1,w2)的情況。彩色等高線是(w1,w2)(w1,w2);而左邊黑色矩形 ||w||1<C||w||1<C 和右邊的圓形 ||w||2<C||w||2<C 是約束條件;相交的黑點就是最優解發生的地方。兩者的區別可以從圖中看出來,L1L1正則化(左圖)傾向於使引數變為0,因此能產生稀疏解。而 L2L2 使 ww 接近0;
一句話總結就是:L1L1 會趨向於產生少量的特徵,而其他的特徵都是0,而 L2L2 會選擇更多的特徵,這些特徵都會接近於0。
為什麼邏輯迴歸比線性迴歸要好?
雖然邏輯迴歸能夠用於分類,不過其本質還是線性迴歸。它僅線上性迴歸的基礎上,在特徵到結果的對映中加入了一層sigmoid函式(非線性)對映,即先把特徵線性求和,然後使用sigmoid函式來預測。然而,正是這個簡單的邏輯函式,使得邏輯迴歸模型成為了機器學習領域一顆耀眼的明星。
下面我們來談談邏輯迴歸與線性迴歸的異同點吧。
假設隨Tumor Size變化,預測病人的腫瘤是惡性(malignant)還是良性(benign)的情況。給出8個資料如下(閾值為0.5):
![此處輸入圖片的描述][10]
圖1.a中,粉色線是預測模型,可以看出,模型能夠完全把結果預測對了,但是圖1.b中藍色線卻預測的很差。
這主要是由於線性迴歸在整個實數域內敏感度一致,而分類範圍,需要在[0,1]之內。而邏輯迴歸就是一種減小預測範圍,將預測值限定為[0,1]間的一種迴歸模型,其迴歸方程與迴歸曲線如下圖所示。邏輯曲線在z=0時,十分敏感,在z>>0或z<<0處,都不敏感,將預測值限定為(0,1)。
邏輯迴歸與最大熵模型MaxEnt的關係?
邏輯迴歸跟最大熵模型到底有啥區別呢?
簡單粗暴 的回答是:邏輯迴歸跟最大熵模型沒有本質區別。邏輯迴歸是最大熵對應類別為二類時的特殊情況,也就是當邏輯迴歸類別擴充套件到多類別時,就是最大熵模型。
下面來詳細地介紹一下:
在進行下面推導之前,先上幾個數學符號定義:
π(x)uπ(x)u 表示,輸入時xx, 輸出的 y=uy=u的概率;
A(u,v)A(u,v) 是一個指示函式,若u=vu=v,則 A(u,v)=1A(u,v)=1;否則 A(u,v)=0A(u,v)=0
我們的目標,就是從訓練資料中,學習得到一個模型,使得 π(x)uπ(x)u 最大化,也就是輸入xx,預測結果是 yy 的概率最大,也就是使得 π(x)yπ(x)y 最大;
回顧邏輯迴歸
標準的邏輯迴歸是二類模型,有:
P(Y=1|x)=π(x)1=ew⋅x1+ew⋅x
P(Y=1|x)=π(x)1=ew⋅x1+ew⋅x
P(Y=0|x)=π(x)0=1−π(x)1
P(Y=0|x)=π(x)0=1−π(x)1
我們用一個更加泛化的形式來表達 π()π(),(只是在這裡,k=2):
π(x)v=ewv⋅x∑ku=1ewu⋅x
π(x)v=ewv⋅x∑u=1kewu⋅x
回到我們的目標:令π(xi)yiπ(xi)yi 最大,可以用極大似然估計的方法來求解。
L(w)=∏i=1nπ(xi)yi
L(w)=∏i=1nπ(xi)yi
lnL(w)=∑i=1nln(π(xi)yi)
lnL(w)=∑i=1nln(π(xi)yi)
對lnL(w)lnL(w)求偏導,得到:
δδwu,jlnL(w)=...=∑i=1,yi=unxij−∑i=1nxijπ(xi)u
δδwu,jlnL(w)=...=∑i=1,yi=unxij−∑i=1nxijπ(xi)u
令偏導等於0,可以得到:
∑i=1nxijπ(xi)u=∑i=1,yi=unxij,(forallu,j)
∑i=1nxijπ(xi)u=∑i=1,yi=unxij,(forallu,j)
使用A(u,yi)A(u,yi) 這個函式,我們可以重寫等式:
∑i=1nxijπ(xi)u=∑i=1nA(u,yi)xij,(forallu,j)
∑i=1nxijπ(xi)u=∑i=1nA(u,yi)xij,(forallu,j)
回顧最大熵模型
想要證明邏輯迴歸跟最大熵模型是等價的,那麼,只要能夠證明它們的 π()π() 是相同,結論自然就出來了。現在,我們不知道最大熵模型的 π()π(),但是我們知道下面的一些性質:
π(x)v≥0always
π(x)v≥0always
∑v=1kπ(x)v=1always
∑v=1kπ(x)v=1always
∑i=1nxijπ(xi)u=∑i=1nA(u,yi)xij,(forallu,j)
∑i=1nxijπ(xi)u=∑i=1nA(u,yi)xij,(forallu,j)
利用資訊理論的只是,我們可以得到π()π() 的熵,定義如下:
−∑v=1k∑i=1nπ(xi)vlog[π(xi)v]
−∑v=1k∑i=1nπ(xi)vlog[π(xi)v]
現在,我們有了目標:∑π()∑π() 最大,也有了上面的4個約束條件。求解約束最優化問題,可以通過拉格朗日乘子,將約束最優化問題轉換為無約束最優化的對偶問題。我們的拉格朗日式子可以寫成如下:
L=∑j=1m∑v=1kwv,j(∑i=1nπ(xi)vxij−A(v,yi)xij)
L=∑j=1m∑v=1kwv,j(∑i=1nπ(xi)vxij−A(v,yi)xij)
+∑v=1k∑i=1nβi(π(xi)v−1)
+∑v=1k∑i=1nβi(π(xi)v−1)
−∑v=1k∑i=1nπ(xi)vlog[π(xi)v]
−∑v=1k∑i=1nπ(xi)vlog[π(xi)v]
對LL求偏導,得到:
δδπ(xi)uL=wu⋅xi+βi−log[π(xi)u]−1
δδπ(xi)uL=wu⋅xi+βi−log[π(xi)u]−1
令偏導=0,得到:wu⋅xi+βi−log[π(xi)u]−1=0wu⋅xi+βi−log[π(xi)u]−1=0,從而得到:
π(xi)u=ewu⋅xi+βi−1
π(xi)u=ewu⋅xi+βi−1
因為有約束條件:∑kv=1π(x)v=1∑v=1kπ(x)v=1,所以,
∑v=1kewv⋅xi+βi−1=1
∑v=1kewv⋅xi+βi−1=1
因此,可以得到
eβ=1/∑v=1kewv⋅xi−1
eβ=1/∑v=1kewv⋅xi−1
把eβeβ 代入π()π(),並且簡化一下式子:
π(x)u=ewu⋅x∑kv=1ewv⋅x
π(x)u=ewu⋅x∑v=1kewv⋅x
有沒有發現這就是邏輯迴歸中,提到的那個泛化的式子,這就證明了邏輯迴歸是最大熵模型的一個特殊例子(k=2)!
到此,邏輯迴歸與最大熵模型的關係就解釋完畢了,總結一下:
邏輯迴歸跟最大熵模型沒有本質區別。邏輯迴歸是最大熵對應類別為二類時的特殊情況
指數簇分佈的最大熵等價於其指數形式的最大似然。
二項式分佈的最大熵解等價於二項式指數形式(sigmoid)的最大似然;
多項式分佈的最大熵等價於多項式分佈指數形式(softmax)的最大似然。
假設分佈求解最大熵,引入拉格朗日函式,求偏導數等於0,直接求出的就是sigmoid函式形式。還有很多指數簇分佈都有對應的最大似然解。而單個指數簇分佈往往表達能力有限,這就需要引入了多個指數簇分佈的混合模型,比如高斯混合,從而引出EM演算法。
Logistic Regression的理論部分講的差不多了,下一篇文章將介紹Logistic Regression的並行化 工程問題。敬請期待…
Please feel free to contact me if you have any questions.
參考文獻
[1]. 李航,《統計學習方法》
[2]. John Mount. *"The equivalence of logistic regression and maximum entropy models"*
[3]. http://tech.meituan.com/intro_to_logistic_regression.html
[4]. http://blog.csdn.net/zouxy09/article/details/24971995
[5]. http://www.tuicool.com/articles/auQFju
---------------------
作者:仙道菜
來源:CSDN
原文:https://blog.csdn.net/cyh_24/article/details/50359055
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- 林軒田機器學習基石課程學習筆記10 — Logistic Regression機器學習筆記
- 林軒田機器學習技法課程學習筆記5 — Kernel Logistic Regression機器學習筆記
- 分散式系統:CAP 理論的前世今生分散式
- 科技新知 | 深度學習的前世今生深度學習
- 吳恩達機器學習課程:程式設計練習 | (2) ex2-logistic regression吳恩達機器學習程式設計
- 重新學習MySQL資料庫開篇:資料庫的前世今生MySql資料庫
- 機器學習之Logistic迴歸機器學習
- 【深度學習基礎-13】非線性迴歸 logistic regression深度學習
- Python裝飾器的前世今生Python
- 最簡單的深度學習演算法——感知器的前世今生深度學習演算法
- 機器學習基礎篇:支援向量機(SVM)理論與實踐機器學習
- 機器學習實戰之Logistic迴歸機器學習
- 機器學習筆記(2): Logistic 迴歸機器學習筆記
- JVM(五)垃圾回收器的前世今生JVM
- Machine Learning (6) - 關於 Logistic Regression (Multiclass Classification) 的小練習Mac
- Machine Learning (7) - 關於 Logistic Regression (Binary Classification) 的小練習Mac
- Machine Learning (9) - 關於 Logistic Regression (Multiclass Classification) 的小練習Mac
- RabbitMQ的前世今生MQ
- InfiniBand 的前世今生
- MySQL 的前世今生MySql
- Mybatis的前世今生MyBatis
- Unicode的前世今生Unicode
- Dubbo的前世今生
- Serverless 的前世今生Server
- IPD的前世今生
- CRM的前世今生
- DBHub的前世今生
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- Logistic regression 為什麼用 sigmoid ?Sigmoid
- Machine Learning (6) - Logistic Regression (Binary Classification)Mac
- Machine Learning (8) - Logistic Regression (Multiclass Classification)Mac
- 計算機字元編碼的前世今生計算機字元
- 決策樹在機器學習的理論學習與實踐機器學習
- 語音助手的前世今生篇之蘋果Siri蘋果
- Webpack前世今生Web
- BigBiGAN的前世今生,走向成熟的特徵抽取器特徵
- React ref 的前世今生React
- React Portal的前世今生React