class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)
Parameters:
penalty:"l1" or "l2"(default)
用于指定懲罰中使用的標(biāo)準(zhǔn)酵熙。The ‘newton-cg’, ‘sag’ and ‘lbfgs’ solvers support only l2 penalties.
dual : bool, default: False
Dual or primal formulation. Dual formulation is only implemented for l2 penalty with liblinear solver. Prefer dual=False when n_samples > n_features.
tol : float, default: 1e-4
Tolerance for stopping criteria.
C : float, default: 1.0
Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.
fit_intercept : bool, default: True
Specifies if a constant (a.k.a. bias or intercept) should be added to the decision function.
指定是否應(yīng)將常量(又名偏差或截距)添加到?jīng)Q策函數(shù)中筋遭。
intercept_scaling : float, default 1.
Useful only when the solver ‘liblinear’ is used and self.fit_intercept is set to True. In this case, x becomes [x, self.intercept_scaling], i.e. a “synthetic” feature with constant value equal to intercept_scaling is appended to the instance vector. The intercept becomes intercept_scaling * synthetic_feature_weight.
Note! the synthetic feature weight is subject to l1/l2 regularization as all other features. To lessen the effect of regularization on synthetic feature weight (and therefore on the intercept) intercept_scaling has to be increased.
class_weight : dict or ‘balanced’, default: None
Weights associated with classes in the form {class_label: weight}. If not given, all classes are supposed to have weight one.
The “balanced” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies in the input data as n_samples / (n_classes * np.bincount(y)).
Note that these weights will be multiplied with sample_weight (passed through the fit method) if sample_weight is specified.
New in version 0.17: class_weight=’balanced’
random_state : int, RandomState instance or None, optional, default: None
The seed of the pseudo random number generator to use when shuffling the data. If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by np.random. Used when solver == ‘sag’ or ‘liblinear’.
solver : {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},
default: ‘liblinear’ Algorithm to use in the optimization problem.
For small datasets, ‘liblinear’ is a good choice, whereas ‘sag’ and
‘saga’ are faster for large ones.
For multiclass problems, only ‘newton-cg’, ‘sag’, ‘saga’ and ‘lbfgs’
handle multinomial loss; ‘liblinear’ is limited to one-versus-rest schemes.
‘newton-cg’, ‘lbfgs’ and ‘sag’ only handle L2 penalty, whereas
‘liblinear’ and ‘saga’ handle L1 penalty.
Note that ‘sag’ and ‘saga’ fast convergence is only guaranteed on features with approximately the same scale. You can preprocess the data with a scaler from sklearn.preprocessing.
New in version 0.17: Stochastic Average Gradient descent solver.
New in version 0.19: SAGA solver.
max_iter : int, default: 100
Useful only for the newton-cg, sag and lbfgs solvers. Maximum number of iterations taken for the solvers to converge.
multi_class : str, {‘ovr’, ‘multinomial’}, default: ‘ovr’
Multiclass option can be either ‘ovr’ or ‘multinomial’. If the option chosen is ‘ovr’, then a binary problem is fit for each label. Else the loss minimised is the multinomial loss fit across the entire probability distribution. Does not work for liblinear solver.
New in version 0.18: Stochastic Average Gradient descent solver for ‘multinomial’ case.
verbose : int, default: 0
For the liblinear and lbfgs solvers set verbose to any positive number for verbosity.
表示詳細(xì)信息启上,verbose = 0表示設(shè)置運(yùn)行時(shí)不顯示詳細(xì)信息
warm_start : bool, default: False
When set to True, reuse the solution of the previous call to fit as initialization, otherwise, just erase the previous solution. Useless for liblinear solver.
New in version 0.17: warm_start to support lbfgs, newton-cg, sag, saga solvers.
當(dāng)設(shè)置成True,使用之前的解決方法作為初始擬合认烁,否則釋放之前的解決方法。
熱啟動(dòng)參數(shù),bool類(lèi)型蒸甜。默認(rèn)為False。如果為T(mén)rue余佛,則下一次訓(xùn)練是以追加樹(shù)的形式進(jìn)行(重新使用上一次的調(diào)用作為初始化)柠新。
n_jobs : int, default: 1
Number of CPU cores used when parallelizing over classes if multi_class=’ovr’”. This parameter is ignored when the [
](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#id1)solver
is set to ‘liblinear’ regardless of whether ‘multi_class’ is specified or not. If given a value of -1, all cores are used.
附————————————————————————————————————
LogisticRegression,一共有14個(gè)參數(shù):
邏輯回歸參數(shù)詳細(xì)說(shuō)明
參數(shù)說(shuō)明如下:
penalty:懲罰項(xiàng)辉巡,str類(lèi)型恨憎,可選參數(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ì)過(guò)擬合(overfit)程梦,但是如果要說(shuō)是不是加了約束就會(huì)好,這個(gè)沒(méi)有人能回答放椰,只能說(shuō)作烟,加約束的情況下,理論上應(yīng)該可以獲得泛化能力更強(qiáng)的結(jié)果砾医。
dual:對(duì)偶或原始方法拿撩,bool類(lèi)型,默認(rèn)為False如蚜。對(duì)偶方法只用在求解線性多核(liblinear)的L2懲罰項(xiàng)上压恒。當(dāng)樣本數(shù)量>樣本特征的時(shí)候影暴,dual通常設(shè)置為False。
tol:停止求解的標(biāo)準(zhǔn)探赫,float類(lèi)型型宙,默認(rèn)為1e-4。就是求解到多少的時(shí)候伦吠,停止妆兑,認(rèn)為已經(jīng)求出最優(yōu)解。
c:正則化系數(shù)λ的倒數(shù)毛仪,float類(lèi)型搁嗓,默認(rèn)為1.0。必須是正浮點(diǎn)型數(shù)箱靴。像SVM一樣腺逛,越小的數(shù)值表示越強(qiáng)的正則化。
fit_intercept:是否存在截距或偏差衡怀,bool類(lèi)型棍矛,默認(rèn)為T(mén)rue。
intercept_scaling:僅在正則化項(xiàng)為”liblinear”抛杨,且fit_intercept設(shè)置為T(mén)rue時(shí)有用够委。float類(lèi)型,默認(rèn)為1蝶桶。
-
class_weight:用于標(biāo)示分類(lèi)模型中各種類(lèi)型的權(quán)重慨绳,可以是一個(gè)字典或者’balanced’字符串,默認(rèn)為不輸入真竖,也就是不考慮權(quán)重脐雪,即為None。如果選擇輸入的話恢共,可以選擇balanced讓類(lèi)庫(kù)自己計(jì)算類(lèi)型權(quán)重战秋,或者自己輸入各個(gè)類(lèi)型的權(quán)重。舉個(gè)例子讨韭,比如對(duì)于0,1的二元模型脂信,我們可以定義class_weight={0:0.9,1:0.1},這樣類(lèi)型0的權(quán)重為90%透硝,而類(lèi)型1的權(quán)重為10%狰闪。如果class_weight選擇balanced,那么類(lèi)庫(kù)會(huì)根據(jù)訓(xùn)練樣本量來(lái)計(jì)算權(quán)重濒生。某種類(lèi)型樣本量越多埋泵,則權(quán)重越低,樣本量越少,則權(quán)重越高丽声。當(dāng)class_weight為balanced時(shí)礁蔗,類(lèi)權(quán)重計(jì)算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples為樣本數(shù),n_classes為類(lèi)別數(shù)量,np.bincount(y)會(huì)輸出每個(gè)類(lèi)的樣本數(shù)谆扎,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。
-
那么class_weight有什么作用呢磺浙?
- 在分類(lèi)模型中,我們經(jīng)常會(huì)遇到兩類(lèi)問(wèn)題:
- 第一種是誤分類(lèi)的代價(jià)很高喊巍。比如對(duì)合法用戶(hù)和非法用戶(hù)進(jìn)行分類(lèi)屠缭,將非法用戶(hù)分類(lèi)為合法用戶(hù)的代價(jià)很高箍鼓,我們寧愿將合法用戶(hù)分類(lèi)為非法用戶(hù)崭参,這時(shí)可以人工再甄別,但是卻不愿將非法用戶(hù)分類(lèi)為合法用戶(hù)款咖。這時(shí)何暮,我們可以適當(dāng)提高非法用戶(hù)的權(quán)重。
- 第二種是樣本是高度失衡的铐殃,比如我們有合法用戶(hù)和非法用戶(hù)的二元樣本數(shù)據(jù)10000條海洼,里面合法用戶(hù)有9995條,非法用戶(hù)只有5條富腊,如果我們不考慮權(quán)重坏逢,則我們可以將所有的測(cè)試集都預(yù)測(cè)為合法用戶(hù),這樣預(yù)測(cè)準(zhǔn)確率理論上有99.95%赘被,但是卻沒(méi)有任何意義是整。這時(shí),我們可以選擇balanced民假,讓類(lèi)庫(kù)自動(dòng)提高非法用戶(hù)樣本的權(quán)重浮入。提高了某種分類(lèi)的權(quán)重,相比不考慮權(quán)重羊异,會(huì)有更多的樣本分類(lèi)劃分到高權(quán)重的類(lèi)別事秀,從而可以解決上面兩類(lèi)問(wèn)題。
-
random_state:隨機(jī)數(shù)種子野舶,int類(lèi)型易迹,可選參數(shù),默認(rèn)為無(wú)平道,僅在正則化優(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:使用了開(kāi)源的liblinear庫(kù)實(shí)現(xiàn)先嬉,內(nèi)部使用了坐標(biāo)軸下降法來(lái)迭代優(yōu)化損失函數(shù)。
lbfgs:擬牛頓法的一種楚堤,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來(lái)迭代優(yōu)化損失函數(shù)疫蔓。
newton-cg:也是牛頓法家族的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來(lái)迭代優(yōu)化損失函數(shù)身冬。
sag:即隨機(jī)平均梯度下降衅胀,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來(lái)計(jì)算梯度酥筝,適合于樣本數(shù)據(jù)多的時(shí)候滚躯。
saga:線性收斂的隨機(jī)優(yōu)化算法的的變重。
-
總結(jié):
- liblinear適用于小數(shù)據(jù)集嘿歌,而sag和saga適用于大數(shù)據(jù)集因?yàn)樗俣雀臁?/li>
- 對(duì)于多分類(lèi)問(wèn)題掸掏,只有newton-cg,sag,saga和lbfgs能夠處理多項(xiàng)損失,而liblinear受限于一對(duì)剩余(OvR)宙帝。啥意思丧凤,就是用liblinear的時(shí)候,如果是多分類(lèi)問(wèn)題步脓,得先把一種類(lèi)別作為一個(gè)類(lèi)別愿待,剩余的所有類(lèi)別作為另外一個(gè)類(lèi)別。一次類(lèi)推靴患,遍歷所有類(lèi)別仍侥,進(jìn)行分類(lèi)。
- newton-cg,sag和lbfgs這三種優(yōu)化算法時(shí)都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù)蚁廓,因此不能用于沒(méi)有連續(xù)導(dǎo)數(shù)的L1正則化访圃,只能用于L2正則化。而liblinear和saga通吃L1正則化和L2正則化相嵌。
- 同時(shí)腿时,sag每次僅僅使用了部分樣本進(jìn)行梯度迭代,所以當(dāng)樣本量少的時(shí)候不要選擇它饭宾,而如果樣本量非常大批糟,比如大于10萬(wàn),sag是第一選擇看铆。但是sag不能用于L1正則化徽鼎,所以當(dāng)你有大量的樣本,又需要L1正則化的話就要自己做取舍了。要么通過(guò)對(duì)樣本采樣來(lái)降低樣本量否淤,要么回到L2正則化悄但。
- 從上面的描述,大家可能覺(jué)得石抡,既然newton-cg, lbfgs和sag這么多限制檐嚣,如果不是大樣本,我們選擇liblinear不就行了嘛啰扛!錯(cuò)嚎京,因?yàn)閘iblinear也有自己的弱點(diǎn)!我們知道隐解,邏輯回歸有二元邏輯回歸和多元邏輯回歸鞍帝。對(duì)于多元邏輯回歸常見(jiàn)的有one-vs-rest(OvR)和many-vs-many(MvM)兩種。而MvM一般比OvR分類(lèi)相對(duì)準(zhǔn)確一些煞茫。郁悶的是liblinear只支持OvR帕涌,不支持MvM,這樣如果我們需要相對(duì)精確的多元邏輯回歸時(shí)溜嗜,就不能選擇liblinear了宵膨。也意味著如果我們需要相對(duì)精確的多元邏輯回歸不能使用L1正則化了。
max_iter:算法收斂最大迭代次數(shù)炸宵,int類(lèi)型,默認(rèn)為10谷扣。僅在正則化優(yōu)化算法為newton-cg, sag和lbfgs才有用土全,算法收斂的最大迭代次數(shù)。
-
multi_class:分類(lèi)方式選擇參數(shù)会涎,str類(lèi)型裹匙,可選參數(shù)為ovr和multinomial,默認(rèn)為ovr末秃。ovr即前面提到的one-vs-rest(OvR)概页,而multinomial即前面提到的many-vs-many(MvM)。如果是二元邏輯回歸练慕,ovr和multinomial并沒(méi)有任何區(qū)別惰匙,區(qū)別主要在多元邏輯回歸上。
-
*OvR和MvM有什么不同*****铃将?
- OvR的思想很簡(jiǎn)單项鬼,無(wú)論你是多少元邏輯回歸,我們都可以看做二元邏輯回歸劲阎。具體做法是绘盟,對(duì)于第K類(lèi)的分類(lèi)決策,我們把所有第K類(lèi)的樣本作為正例,除了第K類(lèi)樣本以外的所有樣本都作為負(fù)例龄毡,然后在上面做二元邏輯回歸吠卷,得到第K類(lèi)的分類(lèi)模型。其他類(lèi)的分類(lèi)模型獲得以此類(lèi)推沦零。
- 而MvM則相對(duì)復(fù)雜撤嫩,這里舉MvM的特例one-vs-one(OvO)作講解。如果模型有T類(lèi)蠢终,我們每次在所有的T類(lèi)樣本里面選擇兩類(lèi)樣本出來(lái)序攘,不妨記為T(mén)1類(lèi)和T2類(lèi),把所有的輸出為T(mén)1和T2的樣本放在一起寻拂,把T1作為正例程奠,T2作為負(fù)例,進(jìn)行二元邏輯回歸祭钉,得到模型參數(shù)瞄沙。我們一共需要T(T-1)/2次分類(lèi)。
- 可以看出OvR相對(duì)簡(jiǎn)單慌核,但分類(lèi)效果相對(duì)略差(這里指大多數(shù)樣本分布情況距境,某些樣本分布下OvR可能更好)。而MvM分類(lèi)相對(duì)精確垮卓,但是分類(lèi)速度沒(méi)有OvR快垫桂。如果選擇了ovr,則4種損失函數(shù)的優(yōu)化方法liblinear粟按,newton-cg,lbfgs和sag都可以選擇诬滩。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了。
-
verbose:日志冗長(zhǎng)度灭将,int類(lèi)型疼鸟。默認(rèn)為0。就是不輸出訓(xùn)練過(guò)程庙曙,1的時(shí)候偶爾輸出結(jié)果空镜,大于1,對(duì)于每個(gè)子模型都輸出捌朴。
warm_start:熱啟動(dòng)參數(shù)吴攒,bool類(lèi)型。默認(rèn)為False男旗。如果為T(mén)rue舶斧,則下一次訓(xùn)練是以追加樹(shù)的形式進(jìn)行(重新使用上一次的調(diào)用作為初始化)。
n_jobs:并行數(shù)察皇。int類(lèi)型茴厉,默認(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)行程序蜕依。