1. 程式人生 > >看完這篇,邏輯迴歸80%都懂了

看完這篇,邏輯迴歸80%都懂了

1. 什麼是邏輯迴歸

邏輯迴歸是用來做分類演算法的,大家都熟悉線性迴歸,一般形式是Y=aX+b,y的取值範圍是[-∞, +∞],有這麼多取值,怎麼進行分類呢?不用擔心,偉大的數學家已經為我們找到了一個方法。

也就是把Y的結果帶入一個非線性變換的Sigmoid函式中,即可得到[0,1]之間取值範圍的數S,S可以把它看成是一個概率值,如果我們設定概率閾值為0.5,那麼S大於0.5可以看成是正樣本,小於0.5看成是負樣本,就可以進行分類了。

2. 什麼是Sigmoid函式

函式公式如下:

函式中t無論取什麼值,其結果都在[0,-1]的區間內,回想一下,一個分類問題就有兩種答案,一種是“是”,一種是“否”,那0對應著“否”,1對應著“是”,那又有人問了,你這不是[0,1]的區間嗎,怎麼會只有0和1呢?這個問題問得好,我們假設分類的閾值是0.5,那麼超過0.5的歸為1分類,低於0.5的歸為0分類,閾值是可以自己設定的。

好了,接下來我們把aX+b帶入t中就得到了我們的邏輯迴歸的一般模型方程:

結果P也可以理解為概率,換句話說概率大於0.5的屬於1分類,概率小於0.5的屬於0分類,這就達到了分類的目的。

3. 損失函式是什麼

邏輯迴歸的損失函式是 log loss,也就是對數似然函式,函式公式如下:

公式中的 y=1 表示的是真實值為1時用第一個公式,真實 y=0 用第二個公式計算損失。為什麼要加上log函式呢?可以試想一下,當真實樣本為1是,但h=0概率,那麼log0=∞,這就對模型最大的懲罰力度;當h=1時,那麼log1=0,相當於沒有懲罰,也就是沒有損失,達到最優結果。所以數學家就想出了用log函式來表示損失函式。

最後按照梯度下降法一樣,求解極小值點,得到想要的模型效果。

4.可以進行多分類嗎?

可以的,其實我們可以從二分類問題過度到多分類問題(one vs rest),思路步驟如下:

1.將型別class1看作正樣本,其他型別全部看作負樣本,然後我們就可以得到樣本標記型別為該型別的概率p1。

2.然後再將另外型別class2看作正樣本,其他型別全部看作負樣本,同理得到p2。

3.以此迴圈,我們可以得到該待預測樣本的標記型別分別為型別class i時的概率pi,最後我們取pi中最大的那個概率對應的樣本標記型別作為我們的待預測樣本型別。

總之還是以二分類來依次劃分,並求出最大概率結果。

5.邏輯迴歸有什麼優點

  • LR能以概率的形式輸出結果,而非只是0,1判定。
  • LR的可解釋性強,可控度高(你要給老闆講的嘛…)。
  • 訓練快,feature engineering之後效果贊。
  • 因為結果是概率,可以做ranking model。

6. 邏輯迴歸有哪些應用

  • CTR預估/推薦系統的learning to rank/各種分類場景。
  • 某搜尋引擎廠的廣告CTR預估基線版是LR。
  • 某電商搜尋排序/廣告CTR預估基線版是LR。
  • 某電商的購物搭配推薦用了大量LR。
  • 某現在一天廣告賺1000w+的新聞app排序基線是LR。

7. 邏輯迴歸常用的優化方法有哪些

7.1 一階方法

梯度下降、隨機梯度下降、mini 隨機梯度下降降法。隨機梯度下降不但速度上比原始梯度下降要快,區域性最優化問題時可以一定程度上抑制區域性最優解的發生。

7.2 二階方法:牛頓法、擬牛頓法:

這裡詳細說一下牛頓法的基本原理和牛頓法的應用方式。牛頓法其實就是通過切線與x軸的交點不斷更新切線的位置,直到達到曲線與x軸的交點得到方程解。在實際應用中我們因為常常要求解凸優化問題,也就是要求解函式一階導數為0的位置,而牛頓法恰好可以給這種問題提供解決方法。實際應用中牛頓法首先選擇一個點作為起始點,並進行一次二階泰勒展開得到導數為0的點進行一個更新,直到達到要求,這時牛頓法也就成了二階求解問題,比一階方法更快。我們常常看到的x通常為一個多維向量,這也就引出了Hessian矩陣的概念(就是x的二階導數矩陣)。

缺點:牛頓法是定長迭代,沒有步長因子,所以不能保證函式值穩定的下降,嚴重時甚至會失敗。還有就是牛頓法要求函式一定是二階可導的。而且計算Hessian矩陣的逆複雜度很大。

擬牛頓法: 不用二階偏導而是構造出Hessian矩陣的近似正定對稱矩陣的方法稱為擬牛頓法。擬牛頓法的思路就是用一個特別的表達形式來模擬Hessian矩陣或者是他的逆使得表示式滿足擬牛頓條件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩陣)、 L-BFGS(可以減少BFGS所需的儲存空間)。

8. 邏輯斯特迴歸為什麼要對特徵進行離散化。

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

9. 邏輯迴歸的目標函式中增大L1正則化會是什麼結果。

所有的引數w都會變成0。

10. 程式碼實現

GitHub:https://github.com/NLP-LOVE/ML-NLP/blob/master/Machine%20Learning/2.Logistics%20Regression/demo/CreditScoring.ipynb


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此專案!群號:【541954936】