【机器学习】逻辑回归小结
之前對于LR的介紹已經不少了,有從LR的極大似然概率模型開始推導的,從極大似然開始推導可以得到我們常用的損失函數形式,接下來就可以利用梯度下降方法。也從最大熵模型推導了滿足二項分布的LR模型Hypothesis函數來源,以及滿足多項式分布的Softmax回歸模型。
接下來對LR模型做一個總結。(參照面經等,以后可能會有補充……)
如何凸顯你是一個對邏輯回歸已經非常了解的人呢。那就是用一句話概括它!邏輯回歸假設數據服從伯努利分布,通過極大化似然函數的方法,運用梯度下降來求解參數,來達到將數據二分類的目的。
這里面其實包含了5個點
這些問題是考核你對邏輯回歸的基本了解。
邏輯回歸的基本假設
任何的模型都是有自己的假設,在這個假設下模型才是適用的。邏輯回歸的第一個基本假設是假設數據服從伯努利分布。伯努利分布有一個簡單的例子是拋硬幣,拋中為正面的概率是,拋中為負面的概率是.在邏輯回歸這個模型里面是假設??為樣本為正的概率,為樣本為負的概率。那么整個模型可以描述為:
邏輯回歸的第二個假設是假設樣本為正的概率(實際上這個不算是假設,只是因為在這里我們沒有給出證明,在前面的文章中有講到,可以通過最大熵模型求解得到。)是:
所以邏輯回歸Hypothesis函數的最終形式 :
邏輯回歸的損失函數
邏輯回歸的損失函數是它的極大似然函數:
邏輯回歸的求解方法
由于該極大似然函數無法直接求解,我們一般通過對該函數進行梯度下降來不斷逼急最優解。在這個地方其實會有個加分項,考察你對其他優化方法的了解。因為就梯度下降本身來看的話就有隨機梯度下降,批梯度下降,Mini-batch 梯度下降三種方式,面試官可能會問這三種方式的優劣以及如何選擇最合適的梯度下降方式。
- 簡單來說 批梯度下降會獲得全局最優解,缺點是在更新每個參數的時候需要遍歷所有的數據,計算量會很大,并且會有很多的冗余計算,導致的結果是當數據量大的時候,每個參數的更新都會很慢。
- 隨機梯度下降是以高方差頻繁更新,優點是使得sgd會跳到新的和潛在更好的局部最優解,缺點是使得收斂到局部最優解的過程更加的復雜。
- 小批量梯度下降結合了sgd和batch gd的優點,每次更新的時候使用n個樣本。減少了參數更新的次數,可以達到更加穩定收斂結果,一般在深度學習當中我們采用這種方法。
其實這里還有一個隱藏的更加深的加分項,看你了不了解諸如Adam,動量法等優化方法。因為上述方法其實還有兩個致命的問題。
- 第一個是如何對模型選擇合適的學習率。自始至終保持同樣的學習率其實不太合適。因為一開始參數剛剛開始學習的時候,此時的參數和最優解隔的比較遠,需要保持一個較大的學習率盡快逼近最優解。但是學習到后面的時候,參數和最優解已經隔的比較近了,你還保持最初的學習率,容易越過最優點,在最優點附近來回振蕩,通俗一點說,就很容易學過頭了,跑偏了。
- 第二個是如何對參數選擇合適的學習率。在實踐中,對每個參數都保持的同樣的學習率也是很不合理的。有些參數更新頻繁,那么學習率可以適當小一點。有些參數更新緩慢,那么學習率就應該大一點。這里我們不展開,有空我會專門出一個專題介紹。
邏輯回歸的目的
- 該函數的目的便是將數據二分類,提高準確率。
邏輯回歸如何分類
- 邏輯回歸作為一個回歸(也就是y值是連續的),如何應用到分類上去呢。y值確實是一個連續的變量。邏輯回歸的做法是劃定一個閾值,y值大于這個閾值的是一類,y值小于這個閾值的是另外一類。閾值具體如何調整根據實際情況選擇。一般會選擇0.5做為閾值來劃分。
對邏輯回歸的進一步提問
邏輯回歸雖然從形式上非常的簡單,但是其內涵是非常的豐富。有很多問題是可以進行思考的
邏輯回歸的損失函數為什么要使用極大似然函數(推導后即交叉熵損失)作為損失函數?
損失函數一般有六種,平方損失函數,對數損失函數,指數損失函數,Hinge-Loss,0-1損失函數,絕對值損失函數。將極大似然函數取對數以后等同于對數損失函數。在邏輯回歸這個模型下,對數損失函數的訓練求解參數的速度是比較快的。至于原因大家可以求出這個式子的梯度更新:
這個式子的更新速度只和相關。和sigmoid函數本身的梯度是無關的。這樣更新的速度是可以自始至終都比較的穩定。
為什么不選平方損失函數的呢?其一是因為如果你使用平方損失函數,你會發現梯度更新的速度和sigmod函數本身的梯度是很相關的。sigmod函數在它在定義域內的梯度都不大于0.25。這樣訓練會非常的慢。
邏輯回歸在訓練的過程當中,如果有很多的特征高度相關或者說有一個特征重復了100遍,會造成怎樣的影響?
先說結論,如果在損失函數最終收斂的情況下,其實就算有很多特征高度相關也不會影響分類器的效果。
但是對特征本身來說的話,假設只有一個特征,在不考慮采樣的情況下,你現在將它重復100遍。訓練以后完以后,數據還是這么多,但是這個特征本身重復了100遍,實質上將原來的特征分成了100份,每一個特征都是原來特征權重值的百分之一。
如果在隨機采樣的情況下,其實訓練收斂完以后,還是可以認為這100個特征和原來那一個特征扮演的效果一樣,只是可能中間很多特征的值正負相消了。
為什么我們還是會在訓練的過程當中將高度相關的特征去掉?
- 去掉高度相關的特征會讓模型的可解釋性更好
- 可以大大提高訓練的速度。如果模型當中有很多特征高度相關的話,就算損失函數本身收斂了,但實際上參數是沒有收斂的,這樣會拉低訓練的速度。其次是特征多了,本身就會增大訓練的時間。
- 在模型中如果存在過多的高相關性特征,容易造成矩陣病態,使得收斂極為緩慢。(矩陣病態、Normal Equation)
特征系數的絕對值可以認為是特征的重要性嗎
邏輯回歸的特征系數的絕對值越大,對分類效果的影響越顯著,然而并不能簡單認為特征系數更大的特征更重要。原因有以下亮點:
邏輯回歸實現多分類(之前有講過,不做累述了)
- One Vs One
- One Vs All
- Softmax
為什么用的是交叉熵損失函數(對數損失函數)
- 一方面這是由于樣本分布滿足伯努利分布,可以直接從最大熵模型導出Hypothesis函數(二分類sigmoid,多分類softmax)后用極大似然即可導出目標函數為交叉熵損失函數。
- 另一方面不考慮模型背后的概率意義,選用交叉熵損失函數相比于平方損失函數,可以使得模型在求解最優解的過程中相對平穩,而不至于造成梯度消失等情況。具體參見之前的一篇文章二次損失函數的不足及交叉熵損失softmax詳解
邏輯回歸數據歸一化
- 數據歸一化之后可以使得梯度下降更為快速,同時避免取值較小特征的參數影響更大的問題,可以提升模型的精度。
- 實際上在各種模型中,只要是應用梯度下降等優化方法求解或者需要度量距離又或者關心變量的取值的模型都需要進行數據歸一化,像Adaboost、SVM、LR、Knn、KMeans之類。而像決策樹、RF這樣的模型(概率模型)就不需要進行數據歸一化,因為它們不關心變量的值,而是關心變量的分布和變量之間的條件概率。
邏輯回歸與線性回歸的聯系與區別
邏輯回歸特征的離散化與交叉
篇幅問題,單獨拎出來整理了一篇
邏輯回歸的優缺點總結
?在這里我們總結了邏輯回歸應用到工業界當中一些優點:
- 形式簡單,模型的可解釋性非常好。從特征的權重可以看到不同的特征對最后結果的影響,某個特征的權重值比較高,那么這個特征最后對結果的影響會比較大。
- 模型效果不錯。在工程上是可以接受的(作為baseline),如果特征工程做的好,效果不會太差,并且特征工程可以大家并行開發,大大加快開發的速度。
- 訓練速度較快,易于并行實現。分類的時候,計算量僅僅只和特征的數目相關。并且邏輯回歸的分布式優化sgd發展比較成熟,訓練的速度可以通過堆機器進一步提高,這樣我們可以在短時間內迭代好幾個版本的模型。
- 資源占用小,尤其是內存。因為只需要存儲各個維度的特征值,。
- 方便輸出結果調整。邏輯回歸可以很方便的得到最后的分類結果,因為輸出的是每個樣本的概率分數,我們可以很容易的對這些概率分數進行cutoff,也就是劃分閾值(大于某個閾值的是一類,小于某個閾值的是一類)。
但是邏輯回歸本身也有許多的缺點:
- 準確率并不是很高。因為形式非常的簡單(非常類似線性模型),很難去擬合數據的真實分布。
- 很難處理數據不平衡的問題。舉個例子:如果我們對于一個正負樣本非常不平衡的問題比如正負樣本比 10000:1.我們把所有樣本都預測為正也能使損失函數的值比較小。但是作為一個分類器,它對正負樣本的區分能力不會很好。
- 處理非線性數據較麻煩。邏輯回歸在不引入其他方法的情況下,只能處理線性可分的數據,或者進一步說,處理二分類的問題 。
- 邏輯回歸本身無法篩選特征。有時候,我們會用gbdt來篩選特征,然后再上邏輯回歸。
?
參考文章
邏輯回歸的常見面試點總結
總結
以上是生活随笔為你收集整理的【机器学习】逻辑回归小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】LR与最大熵模型的关系
- 下一篇: 【机器学习】逻辑回归特征的离散化与交叉