機器學習 logistic

2021-09-12 12:15:39 字數 4289 閱讀 7841

一、面對缺失資料集的方法:

1.使用可用特徵的均值來填補缺失值;

2.使用特殊值來填補缺失值,如-1;

3.忽略有缺失值的樣本;

4.使用相似樣本的均值添補缺失值;

5.使用另外的機器學習演算法**缺失值。

二、預處理資料做兩件事:

如果測試集中一條資料的特徵值已經確實,那麼我們選擇實數0來替換所有缺失值,因為本文使用logistic回歸。因此這樣做不會影響回歸係數的值。sigmoid(0)=0.5,即它對結果的**不具有任何傾向性。

如果測試集中一條資料的類別標籤已經缺失,那麼我們將該類別資料丟棄,因為類別標籤與特徵不同,很難確定採用某個合適的值來替換。

三、sigmoid函式的優化避免報錯:

def sigmoid(inx):

if inx >= 0:

return 1.0 / (1 + exp(-inx))

else:

return exp(inx) / (1 + exp(inx))

四、float()這些一定要注意,不然會報很奇怪的錯誤。

五、使用sklearn構建logistic回歸分類器

引數說明如下:

penalty:懲罰項,str型別,可選引數為l1和l2,預設為l2。用於指定懲罰項中使用的規範。newton-cg、sag和lbfgs求解演算法只支援l2規範。l1g規範假設的是模型的引數滿足拉普拉斯分布,l2假設的模型引數滿足高斯分布,所謂的正規化就是加上對引數的約束,使得模型更不會過擬合(overfit),但是如果要說是不是加了約束就會好,這個沒有人能回答,只能說,加約束的情況下,理論上應該可以獲得泛化能力更強的結果。

dual:對偶或原始方法,bool型別,預設為false。對偶方法只用在求解線性多核(liblinear)的l2懲罰項上。當樣本數量》樣本特徵的時候,dual通常設定為false。

tol:停止求解的標準,float型別,預設為1e-4。就是求解到多少的時候,停止,認為已經求出最優解。

c:正則化係數λ的倒數,float型別,預設為1.0。必須是正浮點型數。像svm一樣,越小的數值表示越強的正則化。

fit_intercept:是否存在截距或偏差,bool型別,預設為true。

intercept_scaling:僅在正則化項為"liblinear",且fit_intercept設定為true時有用。float型別,預設為1。

class_weight:用於標示分類模型中各種型別的權重,可以是乙個字典或者』balanced』字串,預設為不輸入,也就是不考慮權重,即為none。如果選擇輸入的話,可以選擇balanced讓類庫自己計算型別權重,或者自己輸入各個型別的權重。舉個例子,比如對於0,1的二元模型,我們可以定義class_weight=,這樣型別0的權重為90%,而型別1的權重為10%。如果class_weight選擇balanced,那麼類庫會根據訓練樣本量來計算權重。某種型別樣本量越多,則權重越低,樣本量越少,則權重越高。當class_weight為balanced時,類權重計算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples為樣本數,n_classes為類別數量,np.bincount(y)會輸出每個類的樣本數,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。

那麼class_weight有什麼作用呢?

在分類模型中,我們經常會遇到兩類問題:

1.第一種是誤分類的代價很高。比如對合法使用者和非法使用者進行分類,將非法使用者分類為合法使用者的代價很高,我們寧願將合法使用者分類為非法使用者,這時可以人工再甄別,但是卻不願將非法使用者分類為合法使用者。這時,我們可以適當提高非法使用者的權重。

2. 第二種是樣本是高度失衡的,比如我們有合法使用者和非法使用者的二元樣本資料10000條,裡面合法使用者有9995條,非法使用者只有5條,如果我們不考慮權重,則我們可以將所有的測試集都**為合法使用者,這樣**準確率理論上有99.95%,但是卻沒有任何意義。這時,我們可以選擇balanced,讓類庫自動提高非法使用者樣本的權重。提高了某種分類的權重,相比不考慮權重,會有更多的樣本分類劃分到高權重的類別,從而可以解決上面兩類問題。

random_state:隨機數種子,int型別,可選引數,預設為無,僅在正則化優化演算法為sag,liblinear時有用。

solver:優化演算法選擇引數,只有五個可選引數,即newton-cg,lbfgs,liblinear,sag,saga。預設為liblinear。solver引數決定了我們對邏輯回歸損失函式的優化方法,有四種演算法可以選擇,分別是:

liblinear:使用了開源的liblinear庫實現,內部使用了座標軸下降法來迭代優化損失函式。

lbfgs:擬牛頓法的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。

newton-cg:也是牛頓法家族的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。

sag:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區別是每次迭代僅僅用一部分的樣本來計算梯度,適合於樣本資料多的時候。

saga:線性收斂的隨機優化演算法的的變重。

總結:liblinear適用於小資料集,而sag和saga適用於大資料集因為速度更快。

對於多分類問題,只有newton-cg,sag,saga和lbfgs能夠處理多項損失,而liblinear受限於一對剩餘(ovr)。啥意思,就是用liblinear的時候,如果是多分類問題,得先把一種類別作為乙個類別,剩餘的所有類別作為另外乙個類別。一次類推,遍歷所有類別,進行分類。

newton-cg,sag和lbfgs這三種優化演算法時都需要損失函式的一階或者二階連續導數,因此不能用於沒有連續導數的l1正則化,只能用於l2正則化。而liblinear和saga通吃l1正則化和l2正則化。

同時,sag每次僅僅使用了部分樣本進行梯度迭代,所以當樣本量少的時候不要選擇它,而如果樣本量非常大,比如大於10萬,sag是第一選擇。但是sag不能用於l1正則化,所以當你有大量的樣本,又需要l1正則化的話就要自己做取捨了。要麼通過對樣本取樣來降低樣本量,要麼回到l2正則化。

從上面的描述,大家可能覺得,既然newton-cg, lbfgs和sag這麼多限制,如果不是大樣本,我們選擇liblinear不就行了嘛!錯,因為liblinear也有自己的弱點!我們知道,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對於多元邏輯回歸常見的有one-vs-rest(ovr)和many-vs-many(mvm)兩種。而mvm一般比ovr分類相對準確一些。鬱悶的是liblinear只支援ovr,不支援mvm,這樣如果我們需要相對精確的多元邏輯回歸時,就不能選擇liblinear了。也意味著如果我們需要相對精確的多元邏輯回歸不能使用l1正則化了。

max_iter:演算法收斂最大迭代次數,int型別,預設為10。僅在正則化優化演算法為newton-cg, sag和lbfgs才有用,演算法收斂的最大迭代次數。

multi_class:分類方式選擇引數,str型別,可選引數為ovr和multinomial,預設為ovr。ovr即前面提到的one-vs-rest(ovr),而multinomial即前面提到的many-vs-many(mvm)。如果是二元邏輯回歸,ovr和multinomial並沒有任何區別,區別主要在多元邏輯回歸上。

ovr和mvm有什麼不同?

ovr的思想很簡單,無論你是多少元邏輯回歸,我們都可以看做二元邏輯回歸。具體做法是,對於第k類的分類決策,我們把所有第k類的樣本作為正例,除了第k類樣本以外的所有樣本都作為負例,然後在上面做二元邏輯回歸,得到第k類的分類模型。其他類的分類模型獲得以此類推。

而mvm則相對複雜,這裡舉mvm的特例one-vs-one(ovo)作講解。如果模型有t類,我們每次在所有的t類樣本裡面選擇兩類樣本出來,不妨記為t1類和t2類,把所有的輸出為t1和t2的樣本放在一起,把t1作為正例,t2作為負例,進行二元邏輯回歸,得到模型引數。我們一共需要t(t-1)/2次分類。

可以看出ovr相對簡單,但分類效果相對略差(這裡指大多數樣本分佈情況,某些樣本分佈下ovr可能更好)。而mvm分類相對精確,但是分類速度沒有ovr快。如果選擇了ovr,則4種損失函式的優化方法liblinear,newton-cg,lbfgs和sag都可以選擇。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了。

verbose:日誌冗長度,int型別。預設為0。就是不輸出訓練過程,1的時候偶爾輸出結果,大於1,對於每個子模型都輸出。

warm_start:熱啟動引數,bool型別。預設為false。如果為true,則下一次訓練是以追加樹的形式進行(重新使用上一次的呼叫作為初始化)。

n_jobs:並行數。int型別,預設為1。1的時候,用cpu的乙個核心執行程式,2的時候,用cpu的2個核心執行程式。為-1的時候,用所有cpu的核心執行程式。

六、1、logistic回歸的優缺點

優點:實現簡單,易於理解和實現;計算代價不高,速度很快,儲存資源低。

缺點:容易欠擬合,分類精度可能不高。

機器學習 logistic回歸

統計機器學習有兩種常見的機器學習演算法 logistic回歸和svm,這兩種演算法都涉及到優化問題,是非常重要的兩種機器學習演算法,尤其是logistic回歸可能是工程上用的最廣泛的機器學習演算法了。在logistic回歸中訓練分類器就是尋找最佳擬合引數,使用的是最簡單常見優化演算法 梯度下降法。l...

機器學習之logistic回歸

機器學習 回歸 在 機器學習之線性回歸模型 一章中,我們學習了如何使用線性模型進行回歸學習。如果要將線性模型用來分類,就要用到該章結尾介紹的廣義線性模型了。logistic回歸模型採用logistic函式來將線性回歸產生的 值z wtx b 轉化為乙個接近0或1的 y 值 y 11 e z 1 由此...

機器學習實戰 Logistic回歸

11 e z 1 1 e zz w 0x0 w1x1 w2x 2 wn xxz w 0x0 w1x1 w2x 2 wn xx z wt x z w tx 在每個特徵上都乘以乙個回歸係數,然後把所有結果值相加,將這個總和代入sigmoid函式中,進而得到乙個範圍在0 1直接的數值。1類 大於0.5 0...