LogisticRegression蔚龙,一共有14個(gè)參數(shù):
邏輯回歸參數(shù)詳細(xì)說明
參數(shù)說明如下:
- penalty:懲罰項(xiàng)冰评,str類型,可選參數(shù)為l1和l2木羹,默認(rèn)為l2甲雅。用于指定懲罰項(xiàng)中使用的規(guī)范。newton-cg坑填、sag和lbfgs求解算法只支持L2規(guī)范抛人。L1G規(guī)范假設(shè)的是模型的參數(shù)滿足拉普拉斯分布,L2假設(shè)的模型參數(shù)滿足高斯分布脐瑰,所謂的范式就是加上對(duì)參數(shù)的約束妖枚,使得模型更不會(huì)過擬合(overfit),但是如果要說是不是加了約束就會(huì)好苍在,這個(gè)沒有人能回答绝页,只能說,加約束的情況下忌穿,理論上應(yīng)該可以獲得泛化能力更強(qiáng)的結(jié)果抒寂。
- dual:對(duì)偶或原始方法,bool類型掠剑,默認(rèn)為False屈芜。對(duì)偶方法只用在求解線性多核(liblinear)的L2懲罰項(xiàng)上。當(dāng)樣本數(shù)量>樣本特征的時(shí)候,dual通常設(shè)置為False井佑。
- tol:停止求解的標(biāo)準(zhǔn)属铁,float類型,默認(rèn)為1e-4躬翁。就是求解到多少的時(shí)候焦蘑,停止,認(rèn)為已經(jīng)求出最優(yōu)解盒发。
- c:正則化系數(shù)λ的倒數(shù)例嘱,float類型,默認(rèn)為1.0宁舰。必須是正浮點(diǎn)型數(shù)拼卵。像SVM一樣,越小的數(shù)值表示越強(qiáng)的正則化蛮艰。
- fit_intercept:是否存在截距或偏差腋腮,bool類型,默認(rèn)為True壤蚜。
- intercept_scaling:僅在正則化項(xiàng)為”liblinear”即寡,且fit_intercept設(shè)置為True時(shí)有用。float類型袜刷,默認(rèn)為1聪富。
-
class_weight:用于標(biāo)示分類模型中各種類型的權(quán)重,可以是一個(gè)字典或者’balanced’字符串水泉,默認(rèn)為不輸入善涨,也就是不考慮權(quán)重,即為None草则。如果選擇輸入的話,可以選擇balanced讓類庫自己計(jì)算類型權(quán)重蟹漓,或者自己輸入各個(gè)類型的權(quán)重炕横。舉個(gè)例子,比如對(duì)于0,1的二元模型葡粒,我們可以定義class_weight={0:0.9,1:0.1}份殿,這樣類型0的權(quán)重為90%,而類型1的權(quán)重為10%嗽交。如果class_weight選擇balanced卿嘲,那么類庫會(huì)根據(jù)訓(xùn)練樣本量來計(jì)算權(quán)重。某種類型樣本量越多夫壁,則權(quán)重越低拾枣,樣本量越少,則權(quán)重越高。當(dāng)class_weight為balanced時(shí)梅肤,類權(quán)重計(jì)算方法如下:n_samples / (n_classes * np.bincount(y))司蔬。n_samples為樣本數(shù),n_classes為類別數(shù)量姨蝴,np.bincount(y)會(huì)輸出每個(gè)類的樣本數(shù)俊啼,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。
- 那么class_weight有什么作用呢左医?
- 在分類模型中授帕,我們經(jīng)常會(huì)遇到兩類問題:
- 第一種是誤分類的代價(jià)很高。比如對(duì)合法用戶和非法用戶進(jìn)行分類浮梢,將非法用戶分類為合法用戶的代價(jià)很高豪墅,我們寧愿將合法用戶分類為非法用戶,這時(shí)可以人工再甄別黔寇,但是卻不愿將非法用戶分類為合法用戶偶器。這時(shí),我們可以適當(dāng)提高非法用戶的權(quán)重缝裤。
- 第二種是樣本是高度失衡的屏轰,比如我們有合法用戶和非法用戶的二元樣本數(shù)據(jù)10000條,里面合法用戶有9995條憋飞,非法用戶只有5條霎苗,如果我們不考慮權(quán)重,則我們可以將所有的測(cè)試集都預(yù)測(cè)為合法用戶榛做,這樣預(yù)測(cè)準(zhǔn)確率理論上有99.95%唁盏,但是卻沒有任何意義。這時(shí)检眯,我們可以選擇balanced厘擂,讓類庫自動(dòng)提高非法用戶樣本的權(quán)重。提高了某種分類的權(quán)重锰瘸,相比不考慮權(quán)重刽严,會(huì)有更多的樣本分類劃分到高權(quán)重的類別,從而可以解決上面兩類問題避凝。
- 那么class_weight有什么作用呢左医?
- random_state:隨機(jī)數(shù)種子舞萄,int類型,可選參數(shù)管削,默認(rèn)為無倒脓,僅在正則化優(yōu)化算法為sag,liblinear時(shí)有用。
-
solver:優(yōu)化算法選擇參數(shù)含思,只有五個(gè)可選參數(shù)崎弃,即newton-cg,lbfgs,liblinear,sag,saga。默認(rèn)為liblinear。solver參數(shù)決定了我們對(duì)邏輯回歸損失函數(shù)的優(yōu)化方法吊履,有四種算法可以選擇安皱,分別是:
- liblinear:使用了開源的liblinear庫實(shí)現(xiàn),內(nèi)部使用了坐標(biāo)軸下降法來迭代優(yōu)化損失函數(shù)艇炎。
- lbfgs:擬牛頓法的一種酌伊,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。
- newton-cg:也是牛頓法家族的一種缀踪,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)居砖。
- sag:即隨機(jī)平均梯度下降,是梯度下降法的變種驴娃,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來計(jì)算梯度奏候,適合于樣本數(shù)據(jù)多的時(shí)候。
- saga:線性收斂的隨機(jī)優(yōu)化算法的的變重唇敞。
-
總結(jié):
- liblinear適用于小數(shù)據(jù)集蔗草,而sag和saga適用于大數(shù)據(jù)集因?yàn)樗俣雀臁?/li>
- 對(duì)于多分類問題,只有newton-cg,sag,saga和lbfgs能夠處理多項(xiàng)損失疆柔,而liblinear受限于一對(duì)剩余(OvR)咒精。啥意思,就是用liblinear的時(shí)候旷档,如果是多分類問題模叙,得先把一種類別作為一個(gè)類別,剩余的所有類別作為另外一個(gè)類別鞋屈。一次類推范咨,遍歷所有類別,進(jìn)行分類厂庇。
- newton-cg,sag和lbfgs這三種優(yōu)化算法時(shí)都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù)渠啊,因此不能用于沒有連續(xù)導(dǎo)數(shù)的L1正則化,只能用于L2正則化宋列。而liblinear和saga通吃L1正則化和L2正則化昭抒。
- 同時(shí),sag每次僅僅使用了部分樣本進(jìn)行梯度迭代炼杖,所以當(dāng)樣本量少的時(shí)候不要選擇它,而如果樣本量非常大盗迟,比如大于10萬坤邪,sag是第一選擇。但是sag不能用于L1正則化罚缕,所以當(dāng)你有大量的樣本艇纺,又需要L1正則化的話就要自己做取舍了合瓢。要么通過對(duì)樣本采樣來降低樣本量揽祥,要么回到L2正則化。
- 從上面的描述,大家可能覺得幔翰,既然newton-cg, lbfgs和sag這么多限制,如果不是大樣本饰迹,我們選擇liblinear不就行了嘛商架!錯(cuò),因?yàn)閘iblinear也有自己的弱點(diǎn)侣签!我們知道塘装,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對(duì)于多元邏輯回歸常見的有one-vs-rest(OvR)和many-vs-many(MvM)兩種影所。而MvM一般比OvR分類相對(duì)準(zhǔn)確一些蹦肴。郁悶的是liblinear只支持OvR,不支持MvM猴娩,這樣如果我們需要相對(duì)精確的多元邏輯回歸時(shí)阴幌,就不能選擇liblinear了。也意味著如果我們需要相對(duì)精確的多元邏輯回歸不能使用L1正則化了卷中。
- max_iter:算法收斂最大迭代次數(shù)矛双,int類型,默認(rèn)為10仓坞。僅在正則化優(yōu)化算法為newton-cg, sag和lbfgs才有用背零,算法收斂的最大迭代次數(shù)。
-
multi_class:分類方式選擇參數(shù)无埃,str類型徙瓶,可選參數(shù)為ovr和multinomial,默認(rèn)為ovr嫉称。ovr即前面提到的one-vs-rest(OvR)侦镇,而multinomial即前面提到的many-vs-many(MvM)。如果是二元邏輯回歸织阅,ovr和multinomial并沒有任何區(qū)別壳繁,區(qū)別主要在多元邏輯回歸上。
- *OvR和MvM有什么不同*****荔棉?
- OvR的思想很簡(jiǎn)單闹炉,無論你是多少元邏輯回歸,我們都可以看做二元邏輯回歸润樱。具體做法是渣触,對(duì)于第K類的分類決策,我們把所有第K類的樣本作為正例壹若,除了第K類樣本以外的所有樣本都作為負(fù)例嗅钻,然后在上面做二元邏輯回歸皂冰,得到第K類的分類模型。其他類的分類模型獲得以此類推养篓。
- 而MvM則相對(duì)復(fù)雜秃流,這里舉MvM的特例one-vs-one(OvO)作講解。如果模型有T類柳弄,我們每次在所有的T類樣本里面選擇兩類樣本出來舶胀,不妨記為T1類和T2類,把所有的輸出為T1和T2的樣本放在一起语御,把T1作為正例峻贮,T2作為負(fù)例,進(jìn)行二元邏輯回歸应闯,得到模型參數(shù)纤控。我們一共需要T(T-1)/2次分類。
- 可以看出OvR相對(duì)簡(jiǎn)單碉纺,但分類效果相對(duì)略差(這里指大多數(shù)樣本分布情況船万,某些樣本分布下OvR可能更好)。而MvM分類相對(duì)精確骨田,但是分類速度沒有OvR快耿导。如果選擇了ovr,則4種損失函數(shù)的優(yōu)化方法liblinear态贤,newton-cg,lbfgs和sag都可以選擇舱呻。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了。
- *OvR和MvM有什么不同*****荔棉?
- verbose:日志冗長(zhǎng)度悠汽,int類型箱吕。默認(rèn)為0。就是不輸出訓(xùn)練過程柿冲,1的時(shí)候偶爾輸出結(jié)果茬高,大于1,對(duì)于每個(gè)子模型都輸出假抄。
- warm_start:熱啟動(dòng)參數(shù)怎栽,bool類型。默認(rèn)為False宿饱。如果為True熏瞄,則下一次訓(xùn)練是以追加樹的形式進(jìn)行(重新使用上一次的調(diào)用作為初始化)。
- n_jobs:并行數(shù)谬以。int類型巴刻,默認(rèn)為1。1的時(shí)候蛉签,用CPU的一個(gè)內(nèi)核運(yùn)行程序胡陪,2的時(shí)候,用CPU的2個(gè)內(nèi)核運(yùn)行程序碍舍。為-1的時(shí)候柠座,用所有CPU的內(nèi)核運(yùn)行程序。
總結(jié):
- 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單片橡,易于理解和實(shí)現(xiàn)妈经;計(jì)算代價(jià)不高,速度很快捧书,存儲(chǔ)資源低吹泡。
- 缺點(diǎn):容易欠擬合,分類精度可能不高经瓷。
-
其他:
- Logistic回歸的目的是尋找一個(gè)非線性函數(shù)Sigmoid的最佳擬合參數(shù)爆哑,求解過程可以由最優(yōu)化算法完成。
- 改進(jìn)的一些最優(yōu)化算法舆吮,比如sag揭朝。它可以在新數(shù)據(jù)到來時(shí)就完成參數(shù)更新,而不需要重新讀取整個(gè)數(shù)據(jù)集來進(jìn)行批量處理色冀。
- 機(jī)器學(xué)習(xí)的一個(gè)重要問題就是如何處理缺失數(shù)據(jù)潭袱。這個(gè)問題沒有標(biāo)準(zhǔn)答案,取決于實(shí)際應(yīng)用中的需求》嫣瘢現(xiàn)有一些解決方案屯换,每種方案都各有優(yōu)缺點(diǎn)。
- 我們需要根據(jù)數(shù)據(jù)的情況与学,這是Sklearn的參數(shù)彤悔,以期達(dá)到更好的分類效果。