機器學習(四)—邏輯回歸LR


邏輯回歸常見問題:https://www.cnblogs.com/ModifyRong/p/7739955.html

推導在筆記上,現在摘取部分要點如下:

(0)

  LR回歸是在線性回歸模型的基礎上,使用sigmoid函數,將線性模型 wTx的結果壓縮到[0,1]之間,使其擁有概率意義。 其本質仍然是一個線性模型,實現相對簡單。在廣告計算和推薦系統中使用頻率極高,是CTR預估模型的基本算法。同時,LR模型也是深度學習的基本組成單元。

  LR回歸屬於概率性判別式模型,之所謂是概率性模型,是因為LR模型是有概率意義的;之所以是判別式模型,是因為LR回歸並沒有對數據的分布進行建模,也就是說,LR模型並不知道數據的具體分布,而是直接將判別函數,或者說是分類超平面求解了出來。

 

(1)邏輯回歸的損失函數為什么要使用極大似然函數作為損失函數?

  • 損失函數一般有四種,平方損失函數,對數損失函數,HingeLoss0-1損失函數,絕對值損失函數。將極大似然函數取對數以后等同於對數損失函數。在邏輯回歸這個模型下,對數損失函數的訓練求解參數的速度是比較快的。至於原因大家可以求出這個式子的梯度更新
    這個式子的更新速度只和xijyi相關。和sigmod函數本身的梯度是無關的。這樣更新的速度是可以自始至終都比較的穩定。
  • 為什么不選平方損失函數的呢?其一是因為如果你使用平方損失函數,你會發現梯度更新的速度和sigmod函數本身的梯度是很相關的。sigmod函數在它在定義域內的梯度都不大於0.25。這樣訓練會非常的慢。

 (2)邏輯回歸在訓練的過程當中,如果有很多的特征高度相關或者說有一個特征重復了100遍,會造成怎樣的影響?

  • 先說結論,如果在損失函數最終收斂的情況下,其實就算有很多特征高度相關也不會影響分類器的效果。
  • 但是對特征本身來說的話,假設只有一個特征,在不考慮采樣的情況下,你現在將它重復100遍。訓練完以后,數據還是這么多,但是這個特征本身重復了100遍,實質上將原來的特征分成了100份,每一個特征都是原來特征權重值的百分之一。
  • 如果在隨機采樣的情況下,其實訓練收斂完以后,還是可以認為這100個特征和原來那一個特征扮演的效果一樣,只是可能中間很多特征的值正負相消了。

(3) 為什么我們還是會在訓練的過程當中將高度相關的特征去掉?

  • 去掉高度相關的特征會讓模型的可解釋性更好
  • 可以大大提高訓練的速度。如果模型當中有很多特征高度相關的話,就算損失函數本身收斂了,但實際上參數是沒有收斂的,這樣會拉低訓練的速度。其次是特征多了,本身就會增大訓練的時間。

(4)邏輯回歸的優缺點總結

  在這里我們總結了邏輯回歸應用到工業界當中一些優點:

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

  但是邏輯回歸本身也有許多的缺點:

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

 (5)預處理數據做兩件事:

  • 如果測試集中一條數據的特征值已經確實,那么我們選擇實數0來替換所有缺失值,因為本文使用Logistic回歸。因此這樣做不會影響回歸系數的值。sigmoid(0)=0.5,即它對結果的預測不具有任何傾向性。
  • 如果測試集中一條數據的類別標簽已經缺失,那么我們將該類別數據丟棄,因為類別標簽與特征不同,很難確定采用某個合適的值來替換。

 (6)邏輯回歸用於多分類:

  有兩種方式可以出處理該類問題:一種是我們對每個類別訓練一個二元分類器(One-vs-all),當K個類別不是互斥的時候,比如用戶會購買哪種品類,這種方法是合適的。

  如果K個類別是互斥的,即 y=i的時候意味着 y 不能取其他的值,比如用戶的年齡段,這種情況下 Softmax 回歸更合適一些。Softmax 回歸是直接對邏輯回歸在多分類的推廣,相應的模型也可以叫做多元邏輯回歸(Multinomial Logistic Regression)。

(7)應用舉例

  這里以預測用戶對品類的購買偏好為例,介紹一下美團是如何用邏輯回歸解決工作中問題的。該問題可以轉換為預測用戶在未來某個時間段是否會購買某個品類,如果把會購買標記為1,不會購買標記為0,就轉換為一個二分類問題。

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

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

 

1、關於模型在各個維度進行不均勻伸縮后,最優解與原來等價嗎? 

  答:等不等價要看最終的誤差優化函數。如果經過變化后最終的優化函數等價則等價。明白了這一點,那么很容易得到,如果對原來的特征乘除某一常數,則等價。做加減和取對數都不等價。

2. 過擬合和欠擬合如何產生,如何解決? 

  欠擬合:根本原因是特征維度過少,導致擬合的函數無法滿足訓練集,誤差較大; 
      解決方法:增加特征維度; 
  過擬合:根本原因是特征維度過大,導致擬合的函數完美的經過訓練集,但對新數據的預測結果差。 
      解決方法:(1)減少特征維度;(2)正則化,降低參數值。

  減少過擬合總結:過擬合主要是有兩個原因造成的:數據太少+模型太復雜 
  (1)獲取更多數據 :從數據源頭獲取更多數據;數據增強(Data Augmentation) :數據增強,常用的方式:上下左右翻轉flip,旋轉圖像,平移變換,隨機剪切crop圖像,圖像尺度變換,改變圖像色差、對比度,仿射變換,扭曲圖像特征,增強圖像噪音(一般使用高斯噪音,鹽椒噪音)等
  (2)使用合適的模型:減少網絡的層數、神經元個數等均可以限制網絡的擬合能力; 
  (3)dropout 
  (3)正則化,在訓練的時候限制權值變大; 
  (4)限制訓練時間;通過評估測試; 
  (4)增加噪聲 Noise: 輸入時+權重上(高斯初始化) 
  (5)結合多種模型: Bagging用不同的模型擬合不同部分的訓練集;Boosting只使用簡單的神經網絡;

3、關於邏輯回歸,連續特征離散化的好處 

  在工業界,很少直接將連續值作為特征喂給邏輯回歸模型,而是將連續特征離散化為一系列0、1特征交給邏輯回歸模型,這樣做的優勢有以下幾點:

  1. 稀疏向量內積乘法運算速度快,計算結果方便存儲,容易scalable(擴展)。

  2. 離散化后的特征對異常數據有很強的魯棒性:比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常數據“年齡300歲”會給模型造成很大的干擾。

  3. 邏輯回歸屬於廣義線性模型,表達能力受限;單變量離散化為N個后,每個變量有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合。

  4. 離散化后可以進行特征交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力。

  5. 特征離散化后,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處於區間相鄰處的樣本會剛好相反,所以怎么划分區間是門學問。

  大概的理解:1)計算簡單;2)簡化模型;3)增強模型的泛化能力,不易受噪聲的影響。

4、一些問題: 
  解決過擬合的方法:數據擴充、正則項、提前終止 
  如何用LR建立一個廣告點擊的模型: 
    特征提取—>特征處理(離散化、歸一化、onehot等)—>找出候選集—->模型訓練,得到結果 
  為什么LR需要歸一化或取對數? 
    符合假設、利於分析、歸一化也有利於梯度下降 
  為什么LR把特征離散化后效果更好? 
    引入非線性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM