邏輯迴歸算法梳理
邏輯迴歸與線性迴歸聯繫與區別
線性迴歸
通常來講,線性迴歸,是利用數理統計中迴歸分析,來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法。表達形式爲,爲誤差服從均值爲0的正態分佈。適用於有監督學習的預測。

一元線性迴歸分析:,只包含一個自變量和一個因變量,且二者的關係可以用一條直線近似表示
多元線性迴歸分析:,包括兩個或兩個以上的自變量,並且因變量和自變量是線性關係。
邏輯迴歸(Logistic Regression)
邏輯迴歸原理
與線性迴歸不同,邏輯迴歸主要用於解決分類問題,那麼線性迴歸能不能做同樣的事情呢?舉個例子,比如惡性腫瘤和良性腫瘤的判定。加入我們通過擬合數據得到線性迴歸方程和一個閾值,用閾值判定是良性還是惡性
如上圖,size
小於某值就是良性,否則惡性。但是"噪聲"對線性方程的影響特別大,會大大降低分類準確性。例如再加三個樣本就可以使方程變成這樣:

那麼Logistics迴歸是怎麼做的呢?如果不能找到一個絕對數值判定腫瘤的性質,就用概率的方法,預測出一個概率,比如>0.5判定爲惡性的。(以上轉載自吳恩達機器學習視頻教材)
Sigmoid函數
邏輯迴歸首先把樣本映射到之間的數值,這就歸功於sigmoid函數,可以把任何連續的值映射到之間,數越大越傾向於,越小越趨近於sigmoid函數公式如下:
判定邊界:對多元線性迴歸方程求sigmoid函數
找到一組,假設得到 的直線,把樣本分爲兩類。把帶入函數,概率值,就判定爲負樣本。這條直線就是判定邊界,如下圖:
邏輯迴歸的損失函數
線性迴歸的損失函數對邏輯迴歸不可用,因爲邏輯迴歸的值是0或1,求距離平均值會是一條不斷彎曲的曲線,不是理想的凸函數。一個適合邏輯迴歸的損失定義方法如下:
其中是一個概率值,表示正樣本,表示負樣本。當是正樣本時,如果給定的概率特別小(預測爲負樣本),損失就會很大;給定的概率很大(預測爲正樣本),損失就會接近。損失值的函數如圖:
帶L2正則項的損失函數:
邏輯迴歸的優缺點
優點:
- 適合需要得到一個分類概率的場景。
- 計算代價不高,容易理解實現。LR在時間和內存需求上相當高效。它可以應用於分佈式數據,並且還有在線算法實現,用較少的資源處理大型數據。
- LR對於數據中小噪聲的魯棒性很好,並且不會受到輕微的多重共線性的特別影響。(嚴重的多重共線性則可以使用邏輯迴歸結合L2正則化來解決,但是若要得到一個簡約模型,L2正則化並不是最好的選擇,因爲它建立的模型涵蓋了全部的特徵。)
缺點:
- 容易欠擬合,分類精度不高。
- 數據特徵有缺失或者特徵空間很大時表現效果並不好。
正則化與模型評估指標
L1、L2正則化:
必備知識:
給定向量 ,
L0範數:並不是一個真正的範數,它主要被用來度量向量中非零元素的個數;
L1範數:向量各個元素絕對值之和;
L2範數:向量各個元素的平方求和然後求平方根;
Lp範數:向量各個元素絕對值的p次方求和然後求 1/p 次方;
範數:響亮的各個元素求絕對值,取最大那個元素的絕對值
L1範數正則化:就是通過向目標函數中添加L1範數,使的學習到的結果滿足稀疏化,用於特徵選擇。
模型評估
使用混淆矩陣做進一步分析。
如果預測的是0,真實值是0,就爲TN;如果預測爲1,真實值爲0,就爲FP;預測爲0,真實值爲1,就爲FN,預測爲1,真實值爲1,就爲TP。
(1)精準率
精準率:預測結果爲1的時候,預測正確的概率
原因:在有偏(極度偏斜)數據中,通常將1作爲真正關注的對象,那麼在這種情況下預測正確的概率就作爲精準率。(比如:我們真正關心的是預測出了多少癌症病人,而實際上得癌症的又有多少人,即我們預測患癌症的成功率爲多少)
(2)召回率
我們關注的事件真實的發生的情況下,成功預測的概率(比如:現有的癌症患者有多少人,而我們能預測出多少人)
(3) score
有時候需要同時關注精準率和召回率,所以運用新的指標F1 score,兼顧精準率和召回率
,是精準率和召回率的調和平均值:
樣本不均衡時解決辦法
什麼是樣本不均衡
在分類中,訓練數據不均衡是指不同類別下的樣本數目相差巨大。舉兩個例子:
①在一個二分類問題中,訓練集中class 1的樣本數比上class 2的樣本數的比值爲60:1。使用邏輯迴歸進行分類,最後結果是其忽略了class 2,將所有的訓練樣本都分類爲class 1。
②在三分類問題中,三個類別分別爲A,B,C,訓練集中A類的樣本佔70%,B類的樣本佔25%,C類的樣本佔5%。最後我的分類器對類A的樣本過擬合了,而對其它兩個類別的樣本欠擬合
那麼訓練數據不均衡會導致什麼問題呢?
如果訓練集的90%的樣本是屬於同一個類的,而我們的分類器將所有的樣本都分類爲該類,在這種情況下,該分類器是無效的,儘管最後的分類準確度爲90%。所以在數據不均衡時,準確度(Accuracy)這個評價指標參考意義就不大了。實際上,如果不均衡比例超過4:1,分類器就會偏向於大的類別。
解決辦法:
- 擴充數據集
首先想到能否獲得更多數據,尤其是小類(該類樣本數據極少)的數據,更多的數據往往能得到更多的分佈信息。
- 對數據集進行重採樣
過採樣(over-sampling),對小類的數據樣本進行過採樣來增加小類的數據樣本個數,即採樣的個數大於該類樣本的個數。
欠採樣(under-sampling),對大類的數據樣本進行欠採樣來減少大類的數據樣本個數,即採樣的個數少於該類樣本的個數。
採樣算法容易實現,效果也不錯,但可能增大模型的偏差(Bias),因爲放大或者縮小某些樣本的影響相當於改變了原數據集的分佈。對不同的類別也要採取不同的採樣比例,但一般不會是1:1,因爲與現實情況相差甚遠,壓縮大類的數據是個不錯的選擇。
- 人造數據
一種簡單的產生人造數據的方法是:在該類下所有樣本的每個屬性特徵的取值空間中隨機選取一個組成新的樣本,即屬性值隨機採樣。此方法多用於小類中的樣本,不過它可能破壞原屬性的線性關係。如在圖像中,對一幅圖像進行扭曲得到另一幅圖像,即改變了原圖像的某些特徵值,但是該方法可能會產生現實中不存在的樣本。
sklearn參數詳解
sklearn.linear_model.LogisticRegression官方API:
官方API:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
參考文檔
- https://www.jianshu.com/p/821194a77d22
- 《機器學習》周志華
- 吳恩達斯坦福機器學習公開課
- 《統計機器學習》李航