線性模型之邏輯回歸(LR)(原理、公式推導、模型對比、常見面試點),3種類型的梯度下降算法總結,李宏毅機器學習筆記2:Gradient Descent(附帶詳細的原理推導過程),L0、L1、L2范數正則化

參考資料(要是對於本文的理解不夠透徹,必須將以下博客認知閱讀,方可全面了解LR):

(1).

(2).

(3).

(4).

(5).

(6).

 

一、邏輯回歸介紹

  邏輯回歸(Logistic Regression)是一種廣義線性回歸。線性回歸解決的是回歸問題,預測值是實數範圍,邏輯回歸則相反,解決的是分類問題,預測值是[0,1]範圍。所以邏輯回歸名為回歸,實為分類。接下來讓我們用一句話來概括邏輯回歸(LR):

邏輯回歸假設數據服從伯努利分佈,通過極大化似然函數的方法,運用梯度下降來求解參數,來達到將數據二分類的目的。

這句話包含了五點,接下來一一介紹:

  • 邏輯回歸的假設
  • 邏輯回歸的損失函數
  • 邏輯回歸的求解方法
  • 邏輯回歸的目的
  • 邏輯回歸如何分類

 二、邏輯回歸的假設

任何的模型都是有自己的假設,在這個假設下模型才是適用的。邏輯回歸的第一個基本假設是假設數據服從伯努利分佈。

伯努利分佈:是一個離散型概率分佈,若成功,則隨機變量取值1;若失敗,隨機變量取值為0。成功概率記為p,失敗為q = 1-p。

在邏輯回歸中,既然假設了數據分佈服從伯努利分佈,那就存在一個成功和失敗,對應二分類問題就是正類和負類,那麼就應該有一個樣本為正類的概率p,和樣本為負類的概率q = 1- p。具體我們寫成這樣的形式:

邏輯回歸的第二個假設是正類的概率由sigmoid的函數計算,即

即:

寫在一起:

個人理解,解釋一下這個公式,並不是用了樣本的標籤y,而是說你想要得到哪個的概率,y = 1時意思就是你想得到正類的概率,y = 0時就意思是你想要得到負類的概率。另外在求參數時,這個y是有用的,這點在下面會說到。

另外關於這個值,  是個概率,還沒有到它真正能成為預測標籤的地步,更具體的過程應該是分別求出正類的概率,即y = 1時,和負類的概率,y = 0時,比較哪個大,因為兩個加起來是1,所以我們通常默認的是只用求正類概率,只要大於0.5即可歸為正類,但這個0.5是人為規定的,如果願意的話,可以規定為大於0.6才是正類,這樣的話就算求出來正類概率是0.55,那也不能預測為正類,應該預測為負類。

 理解了二元分類回歸的模型,接着我們就要看模型的損失函數了,我們的目標是極小化損失函數來得到對應的模型係數θ

 三、邏輯回歸的損失函數

 回顧下線性回歸的損失函數,由於線性回歸是連續的,所以可以使用模型誤差的的平方和來定義損失函數。但是邏輯回歸不是連續的,自然線性回歸損失函數定義的經驗就用不上了。不過我們可以用最大似然法(MLE)來推導出我們的損失函數。有點人把LR的loss function成為log損失函數,也有人把它稱為交叉熵損失函數(Cross Entropy)。

極大似然估計:利用已知的樣本結果信息,反推最具有可能(最大概率)導致這些樣本結果出現的模型參數值(模型已定,參數未知)

如何理解這句話呢?

再聯繫到邏輯回歸里,一步步來分解上面這句話,首先確定一下模型是否已定,模型就是用來預測的那個公式:

參數就是裏面的  ,那什麼是樣本結果信息,就是我們的x,y,是我們的樣本,分別為特徵和標籤,我們的已知信息就是在特徵取這些值的情況下,它應該屬於y類(正或負)。

反推最具有可能(最大概率)導致這些樣本結果出現的參數,舉個例子,我們已經知道了一個樣本點,是正類,那麼我們把它丟入這個模型后,它預測的結果一定得是正類啊,正類才是正確的,才是我們所期望的,我們要盡可能的讓它最大,這樣才符合我們的真實標籤。反過來一樣的,如果你丟的是負類,那這個式子計算的就是負類的概率,同樣我們要讓它最大,所以此時不用區分正負類。

這樣串下來,一切都說通了,概括一下:

一個樣本,不分正負類,丟入模型,多的不說,就是一個字,讓它大

一直只提了一個樣本,但對於整個訓練集,我們當然是期望所有樣本的概率都達到最大,也就是我們的目標函數,本身是個聯合概率,但是假設每個樣本獨立,那所有樣本的概率就可以由以下公式推到:

設:

似然函數:

為了更方便求解,我們對等式兩邊同取對數,寫成對數似然函數:

在機器學習中我們有損失函數的概念,其衡量的是模型預測錯誤的程度。如果取整個數據集上的平均對數似然損失,我們可以得到:

即在邏輯回歸模型中,我們最大化似然函數和最小化損失函數實際上是等價的。所以說LR的loss function可以由MLE推導出來。

 四、邏輯回歸損失函數的求解

解邏輯回歸的方法有非常多,主要有梯度下降(一階方法)和牛頓法(二階方法)。優化的主要目標是找到一個方向,參數朝這個方向移動之後使得損失函數的值能夠減小,這個方嚮往往由一階偏導或者二階偏導各種組合求得。邏輯回歸的損失函數是:

隨機梯度下降:梯度下降是通過 J(w) 對 w 的一階導數來找下降方向,初始化參數w之後,並且以迭代的方式來更新參數,更新方式為 :

其中 k 為迭代次數。每次更新參數后,可以通過比較  小於閾值或者到達最大迭代次數來停止迭代。

梯度下降又有隨機梯度下降,批梯度下降,small batch 梯度下降三種方式:

  • 簡單來說 批梯度下降會獲得全局最優解,缺點是在更新每個參數的時候需要遍歷所有的數據,計算量會很大,並且會有很多的冗餘計算,導致的結果是當數據量大的時候,每個參數的更新都會很慢。
  • 隨機梯度下降是以高方差頻繁更新,優點是使得sgd會跳到新的和潛在更好的局部最優解,缺點是使得收斂到局部最優解的過程更加的複雜。
  • 小批量梯度下降結合了sgd和batch gd的優點,每次更新的時候使用n個樣本。減少了參數更新的次數,可以達到更加穩定收斂結果,一般在深度學習當中我們採用這種方法。

加分項,看你了不了解諸如Adam,動量法等優化方法(在這就不展開了,以後有時間的話專門寫一篇關於優化方法的)。因為上述方法其實還有兩個致命的問題:

  • 第一個是如何對模型選擇合適的學習率。自始至終保持同樣的學習率其實不太合適。因為一開始參數剛剛開始學習的時候,此時的參數和最優解隔的比較遠,需要保持一個較大的學習率儘快逼近最優解。但是學習到後面的時候,參數和最優解已經隔的比較近了,你還保持最初的學習率,容易越過最優點,在最優點附近來回振蕩,通俗一點說,就很容易學過頭了,跑偏了。
  • 第二個是如何對參數選擇合適的學習率。在實踐中,對每個參數都保持的同樣的學習率也是很不合理的。有些參數更新頻繁,那麼學習率可以適當小一點。有些參數更新緩慢,那麼學習率就應該大一點。

有關梯度下降原理以及優化算法詳情見我的博客:

 

任何模型都會面臨過擬合問題,所以我們也要對邏輯回歸模型進行正則化考慮。常見的有L1正則化和L2正則化。

L1 正則化

LASSO 回歸,相當於為模型添加了這樣一個先驗知識:w 服從零均值拉普拉斯分佈。 首先看看拉普拉斯分佈長什麼樣子:

由於引入了先驗知識,所以似然函數這樣寫:

取 log 再取負,得到目標函數:

等價於原始損失函數的後面加上了 L1 正則,因此 L1 正則的本質其實是為模型增加了“模型參數服從零均值拉普拉斯分佈”這一先驗知識。

L2 正則化

Ridge 回歸,相當於為模型添加了這樣一個先驗知識:w 服從零均值正態分佈。

首先看看正態分佈長什麼樣子:

由於引入了先驗知識,所以似然函數這樣寫:

取 ln 再取負,得到目標函數:

等價於原始的損失函數後面加上了 L2 正則,因此 L2 正則的本質其實是為模型增加了“模型參數服從零均值正態分佈”這一先驗知識。

其餘有關正則化的內容詳見:

五、邏輯回歸的目的

 該函數的目的便是將數據二分類,提高準確率。

六、邏輯回歸如何分類

這個在上面的時候提到了,要設定一個閾值,判斷正類概率是否大於該閾值,一般閾值是0.5,所以只用判斷正類概率是否大於0.5即可。

七、為什麼LR不使用平方誤差(MSE)當作損失函數?

1.  平方誤差損失函數加上sigmoid的函數將會是一個非凸的函數,不易求解,會得到局部解,用對數似然函數得到高階連續可導凸函數,可以得到最優解。

2.  其次,是因為對數損失函數更新起來很快,因為只和x,y有關,和sigmoid本身的梯度無關。如果你使用平方損失函數,你會發現梯度更新的速度和sigmod函數本身的梯度是很相關的。sigmod函數在它在定義域內的梯度都不大於0.25。這樣訓練會非常的慢。

八、邏輯回歸的優缺點

優點:

  • 形式簡單,模型的可解釋性非常好。從特徵的權重可以看到不同的特徵對最後結果的影響,某個特徵的權重值比較高,那麼這個特徵最後對結果的影響會比較大。
  • 模型效果不錯。在工程上是可以接受的(作為baseline),如果特徵工程做的好,效果不會太差,並且特徵工程可以大家并行開發,大大加快開發的速度。
  • 訓練速度較快。分類的時候,計算量僅僅只和特徵的數目相關。並且邏輯回歸的分佈式優化sgd發展比較成熟,訓練的速度可以通過堆機器進一步提高,這樣我們可以在短時間內迭代好幾個版本的模型。
  • 資源佔用小,尤其是內存。因為只需要存儲各個維度的特徵值。
  • 方便輸出結果調整。邏輯回歸可以很方便的得到最後的分類結果,因為輸出的是每個樣本的概率分數,我們可以很容易的對這些概率分數進行cut off,也就是劃分閾值(大於某個閾值的是一類,小於某個閾值的是一類)。

缺點:

  • 準確率並不是很高。因為形式非常的簡單(非常類似線性模型),很難去擬合數據的真實分佈。
  • 很難處理數據不平衡的問題。舉個例子:如果我們對於一個正負樣本非常不平衡的問題比如正負樣本比 10000:1.我們把所有樣本都預測為正也能使損失函數的值比較小。但是作為一個分類器,它對正負樣本的區分能力不會很好。
  • 處理非線性數據較麻煩。邏輯回歸在不引入其他方法的情況下,只能處理線性可分的數據,或者進一步說,處理二分類的問題 。
  • 邏輯回歸本身無法篩選特徵。有時候,我們會用gbdt來篩選特徵,然後再上邏輯回歸。

 

 

西瓜書中提到了如何解決LR缺點中的藍色字體所示的缺點:

 

九、 邏輯斯特回歸為什麼要對特徵進行離散化。

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

十、與其他模型的對比

與SVM

相同點

1. 都是線性分類器。本質上都是求一個最佳分類超平面。都是監督學習算法。
2. 都是判別模型。通過決策函數,判別輸入特徵之間的差別來進行分類。

  • 常見的判別模型有:KNN、SVM、LR。
  • 常見的生成模型有:樸素貝恭弘=叶 恭弘斯,隱馬爾可夫模型。

 

不同點

(1). 本質上是損失函數不同
LR的損失函數是交叉熵:

SVM的目標函數:

  • 邏輯回歸基於概率理論,假設樣本為正樣本的概率可以用sigmoid函數(S型函數)來表示,然後通過極大似然估計的方法估計出參數的值。
  • 支持向量機基於幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面。

(2). 兩個模型對數據和參數的敏感程度不同

  • SVM考慮分類邊界線附近的樣本(決定分類超平面的樣本)。在支持向量外添加或減少任何樣本點對分類決策面沒有任何影響;
  • LR受所有數據點的影響。直接依賴數據分佈,每個樣本點都會影響決策面的結果。如果訓練數據不同類別嚴重不平衡,則一般需要先對數據做平衡處理,讓不同類別的樣本盡量平衡。
  • LR 是參數模型,SVM 是非參數模型,參數模型的前提是假設數據服從某一分佈,該分佈由一些參數確定(比如正太分佈由均值和方差確定),在此基礎上構建的模型稱為參數模型;非參數模型對於總體的分佈不做任何假設,只是知道總體是一個隨機變量,其分佈是存在的(分佈中也可能存在參數),但是無法知道其分佈的形式,更不知道分佈的相關參數,只有在給定一些樣本的條件下,能夠依據非參數統計的方法進行推斷。

(3). SVM 基於距離分類,LR 基於概率分類。

  • SVM依賴數據表達的距離測度,所以需要對數據先做 normalization;LR不受其影響。

(4). 在解決非線性問題時,支持向量機採用核函數的機制,而LR通常不採用核函數的方法。

  • SVM算法里,只有少數幾個代表支持向量的樣本參与分類決策計算,也就是只有少數幾個樣本需要參与核函數的計算。
  • LR算法里,每個樣本點都必須參与分類決策的計算過程,也就是說,假設我們在LR里也運用核函數的原理,那麼每個樣本點都必須參与核計算,這帶來的計算複雜度是相當高的。尤其是數據量很大時,我們無法承受。所以,在具體應用時,LR很少運用核函數機制。

(5). 在小規模數據集上,Linear SVM要略好於LR,但差別也不是特別大,而且Linear SVM的計算複雜度受數據量限制,對海量數據LR使用更加廣泛。

(6). SVM的損失函數就自帶正則,而 LR 必須另外在損失函數之外添加正則項。

那怎麼根據特徵數量和樣本量來選擇SVM和LR模型呢?Andrew NG的課程中給出了以下建議:

 

  • 如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
  • 如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
  • 如果Feature的數量比較小,而樣本數量很多,需要手工添加一些feature變成第一種情況。(LR和不帶核函數的SVM比較類似。)

 

插入一個知識點:判別模型與生成模型的區別?

公式上看

  • 生成模型: 學習時先得到P(x,y),繼而得到 P(y|x)。預測時應用最大后驗概率法(MAP)得到預測類別 y。
  • 判別模型: 直接學習得到P(y|x),利用MAP得到 y。或者直接學得一個映射函數 y=f(x) 。

直觀上看

  • 生成模型: 關注數據是如何生成的
  • 判別模型: 關注類別之間的差別

數據要求:生成模型需要的數據量比較大,能夠較好地估計概率密度;而判別模型對數據樣本量的要求沒有那麼多。

更多區別見

 

與樸素貝恭弘=叶 恭弘斯

相同點

樸素貝恭弘=叶 恭弘斯和邏輯回歸都屬於分類模型,當樸素貝恭弘=叶 恭弘斯的條件概率  服從高斯分佈時,它計算出來的 P(Y=1|X) 形式跟邏輯回歸是一樣的。

不同點

  • 邏輯回歸是判別式模型 p(y|x),樸素貝恭弘=叶 恭弘斯是生成式模型 p(x,y):判別式模型估計的是條件概率分佈,給定觀測變量 x 和目標變量 y 的條件模型,由數據直接學習決策函數 y=f(x) 或者條件概率分佈 P(y|x) 作為預測的模型。判別方法關心的是對於給定的輸入 x,應該預測什麼樣的輸出 y;而生成式模型估計的是聯合概率分佈,基本思想是首先建立樣本的聯合概率概率密度模型 P(x,y),然後再得到后驗概率 P(y|x),再利用它進行分類,生成式更關心的是對於給定輸入 x 和輸出 y 的生成關係;
  • 樸素貝恭弘=叶 恭弘斯的前提是條件獨立,每個特徵權重獨立,所以如果數據不符合這個情況,樸素貝恭弘=叶 恭弘斯的分類表現就沒邏輯會好了。

十一、多分類問題(LR解決多分類問題)

參考西瓜書!!!

現實中我們經常遇到不只兩個類別的分類問題,即多分類問題,在這種情形下,我們常常運用“拆分”的策略,通過多個二分類學習器來解決多分類問題,即將多分類問題拆解為多個二分類問題,訓練出多個二分類學習器,最後將多個分類結果進行集成得出結論。最為經典的拆分策略有三種:“一對一”(OvO)、“一對其餘”(OvR)和“多對多”(MvM),核心思想與示意圖如下所示。

  • OvO:給定數據集D,假定其中有N個真實類別,將這N個類別進行兩兩配對(一個正類/一個反類),從而產生N(N-1)/2個二分類學習器,在測試階段,將新樣本放入所有的二分類學習器中測試,得出N(N-1)個結果,最終通過投票產生最終的分類結果。

          優點:它在一定程度上規避了數據集 unbalance 的情況,性能相對穩定,並且需要訓練的模型數雖然增多,但是每次訓練時訓練集的數量都降低很多,其訓練效率會提高。

     缺點:訓練出更多的 Classifier,會影響預測時間。

  • OvM:給定數據集D,假定其中有N個真實類別,每次取出一個類作為正類,剩餘的所有類別作為一個新的反類,從而產生N個二分類學習器,在測試階段,得出N個結果,若僅有一個學習器預測為正類,則對應的類標作為最終分類結果。

    優點:普適性還比較廣,可以應用於能輸出值或者概率的分類器,同時效率相對較好,有多少個類別就訓練多少個分類器。

    缺點:很容易造成訓練集樣本數量的不平衡(Unbalance),尤其在類別較多的情況下,經常容易出現正類樣本的數量遠遠不及負類樣本的數量,這樣就會造成分類器的偏向性。

  • MvM:給定數據集D,假定其中有N個真實類別,每次取若干個類作為正類,若干個類作為反類(通過ECOC碼給出,編碼),若進行了M次劃分,則生成了M個二分類學習器,在測試階段(解碼),得出M個結果組成一個新的碼,最終通過計算海明/歐式距離選擇距離最小的類別作為最終分類結果。

 

十一、邏輯回歸實例(數據來源於Kaggle)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!