【zt】LogisticRegression 調(diào)參 & GridSearchCV

資料目錄:

1. LogisticRegression()參數(shù)解析

2.?sklearn-GridSearchCV,CV調(diào)節(jié)超參使用方法

=====================================================================

C: float, optional (default=1.0)

Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.

C為正則化系數(shù)λ的倒數(shù),必須為正數(shù),默認為1。和SVM中的C一樣,值越小,代表正則化越強。

class_weight: {dict, ‘a(chǎn)uto’}, optional考慮類不平衡,類似于代價敏感

Over-/undersamples the samples of each class according to the given weights. If not given, all classes are supposed to have weight one. The ‘a(chǎn)uto’ mode selects weights inversely proportional to class frequencies in the training set.

penalty :正則化參數(shù):’l1’,’l2’.默認是’l2’。

在調(diào)參時如果我們主要的目的只是為了解決過擬合,一般penalty選擇L2正則化就夠了。但是如果選擇L2正則化發(fā)現(xiàn)還是過擬合,即預(yù)測效果差的時候,就可以考慮L1正則化。? 另外,如果模型的特征非常多,我們希望一些不重要的特征系數(shù)歸零,從而讓模型系數(shù)稀疏化的話,也可以使用L1正則化。

penalty參數(shù)的選擇會影響我們損失函數(shù)優(yōu)化算法的選擇。即參數(shù)solver的選擇。

solver:邏輯回歸損失函數(shù)的優(yōu)化方法,有四種算法供選擇

‘newton-cg’:坐標軸下降法來迭代優(yōu)化損失函數(shù)?

‘lbfgs’:, ‘liblinear’:牛頓法變種?

‘sag’:隨機梯度下降

其中‘newton-cg’, ‘lbfgs’, ‘sag’只適用于L2懲罰項的優(yōu)化,liblinear兩種都適用。因為L1正則化的損失函數(shù)不是連續(xù)可導(dǎo)的,而{‘newton-cg’, ‘lbfgs’,‘sag’}這三種優(yōu)化算法時都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù)。而‘liblinear’并沒有這個依賴。

當樣本數(shù)目比較大時,使用sag效果較好,因為它只使用一部分樣本進行訓(xùn)練。

a) liblinear:使用了開源的liblinear庫實現(xiàn),內(nèi)部使用了坐標軸下降法來迭代優(yōu)化損失函數(shù)。

b) lbfgs:擬牛頓法的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。

c) newton-cg:也是牛頓法家族的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。

d) sag:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來計算梯度,適合于樣本數(shù)據(jù)多的時候。

小結(jié):

從上面的描述可以看出,newton-cg、lbfgs和sag這三種優(yōu)化算法時都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù),因此不能用于沒有連續(xù)導(dǎo)數(shù)的L1正則化,只能用于L2正則化。而liblinear通吃L1正則化和L2正則化。

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

但是liblinear也有自己的弱點!我們知道,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對于多元邏輯回歸常見的有one-vs-rest(OvR)和many-vs-many(MvM)兩種。而MvM一般比OvR分類相對準確一些。而liblinear只支持OvR,不支持MvM,這樣如果我們需要相對精確的多元邏輯回歸時,就不能選擇liblinear了。也意味著如果我們需要相對精確的多元邏輯回歸不能使用L1正則化了。


multi_class?

{‘ovr’, ‘multinomial’}, default: ‘ovr’

OvR的思想很簡單,無論你是多少元邏輯回歸,我們都可以看做二元邏輯回歸。multinomial相對復(fù)雜。

官網(wǎng)有個對比兩種分類方式的例子:鏈接地址

ovr即one-vs-rest(OvR),multinomial是many-vs-many(MvM)。如果是二元邏輯回歸,ovr和multinomial并沒有任何區(qū)別,區(qū)別主要在多元邏輯回歸上。

ovr不論是幾元回歸,都當成二元回歸來處理。mvm從從多個類中每次選兩個類進行二元回歸。如果總共有T類,需要T(T-1)/2次分類。

OvR相對簡單,但分類效果相對略差(大多數(shù)樣本分布情況)。而MvM分類相對精確,但是分類速度沒有OvR快。

如果選擇了ovr,則4種損失函數(shù)的優(yōu)化方法liblinear,newton-cg,lbfgs和sag都可以選擇。但是如果選擇了multinomial,則只能選擇newton-cg, lbfgs和sag了。

class_weight:類型權(quán)重參數(shù)。

用于標示分類模型中各種類型的權(quán)重。默認不輸入,即所有的分類的權(quán)重一樣。選擇‘balanced’自動根據(jù)y值計算類型權(quán)重。自己設(shè)置權(quán)重,格式:{class_label: weight}。例如0,1分類的er'yuan二元模型,設(shè)置class_weight={0:0.9, 1:0.1},這樣類型0的權(quán)重為90%,而類型1的權(quán)重為10%。

n_jobs=1?: 并行數(shù)

int:個數(shù);-1:跟CPU核數(shù)一致;1:默認值。

其他參數(shù):

dual=False: 對偶或者原始方法。Dual只適用于正則化相為l2的‘liblinear’的情況,通常樣本數(shù)大于特征數(shù)的情況下,默認為False。

fit_intercept=True: 是否存在截距,默認存在。

intercept_scaling=1: 僅在正則化項為‘liblinear’,且fit_intercept設(shè)置為True時有用。

max_iter=100: 算法收斂的最大迭代次數(shù)。

tol=0.0001: 迭代終止判據(jù)的誤差范圍。

verbose=0: 日志冗長度int:冗長度;0:不輸出訓(xùn)練過程;1:偶爾輸出; >1:對每個子模型都輸出

warm_start=False: 是否熱啟動,如果是,則下一次訓(xùn)練是以追加樹的形式進行(重新使用上一次的調(diào)用作為初始化)。布爾型,默認False。

LogisticRegression類的常用方法

fit(X, y, sample_weight=None)

擬合模型,用來訓(xùn)練LR分類器,其中X是訓(xùn)練樣本,y是對應(yīng)的標記向量

返回對象,self。

fit_transform(X, y=None, **fit_params)

fit與transform的結(jié)合,先fit后transform。返回X_new:numpy矩陣。

predict(X)

用來預(yù)測樣本,也就是分類,X是測試集。返回array。

predict_proba(X)

輸出分類概率。返回每種類別的概率,按照分類類別順序給出。如果是多分類問題,multi_class="multinomial",則會給出樣本對于每種類別的概率。

返回array-like。

score(X, y, sample_weight=None)

返回給定測試集合的平均準確率(mean accuracy),浮點型數(shù)值。

對于多個分類返回,則返回每個類別的準確率組成的哈希矩陣。

注意:在訓(xùn)練模型之前,可以優(yōu)化一下模型參數(shù),用GridSearchCV()函數(shù)【即找到最優(yōu)的超參】——詳見GridSearchCV()相關(guān)資料


上述內(nèi)容匯總自不同網(wǎng)站,但多數(shù)內(nèi)容來自于這個鏈接:http://www.lxweimin.com/p/e51e92a01a9c

-----------------------------------------------------------------------------------------------

【其他】

sklearn-GridSearchCV,CV調(diào)節(jié)超參使用方法:https://blog.csdn.net/u012969412/article/details/72973055

GridSearchCV 簡介:

GridSearchCV,它存在的意義就是自動調(diào)參,只要把參數(shù)輸進去,就能給出最優(yōu)化的結(jié)果和參數(shù)。但是這個方法適合于小數(shù)據(jù)集,一旦數(shù)據(jù)的量級上去了,很難得出結(jié)果。這個時候就是需要動腦筋了。數(shù)據(jù)量比較大的時候可以使用一個快速調(diào)優(yōu)的方法——坐標下降。它其實是一種貪心算法:拿當前對模型影響最大的參數(shù)調(diào)優(yōu),直到最優(yōu)化;再拿下一個影響最大的參數(shù)調(diào)優(yōu),如此下去,直到所有的參數(shù)調(diào)整完畢。這個方法的缺點就是可能會調(diào)到局部最優(yōu)而不是全局最優(yōu),但是省時間省力,巨大的優(yōu)勢面前,還是試一試吧,后續(xù)可以再拿bagging再優(yōu)化。回到sklearn里面的GridSearchCV,GridSearchCV用于系統(tǒng)地遍歷多種參數(shù)組合,通過交叉驗證確定最佳效果參數(shù)。

GridSearchCV官方網(wǎng)址:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

常用參數(shù)解讀:

estimator:所使用的分類器,如estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10), 并且傳入除需要確定最佳的參數(shù)之外的其他參數(shù)。每一個分類器都需要一個scoring參數(shù),或者score方法。

param_grid:值為字典或者列表,即需要最優(yōu)化的參數(shù)的取值,param_grid =param_test1,param_test1 = {'n_estimators':range(10,71,10)}。

scoring :準確度評價標準,默認None,這時需要使用score函數(shù);或者如scoring='roc_auc',根據(jù)所選模型不同,評價準則不同。字符串(函數(shù)名),或是可調(diào)用對象,需要其函數(shù)簽名形如:scorer(estimator, X, y);如果是None,則使用estimator的誤差估計函數(shù)。scoring參數(shù)選擇如下:

參考地址:http://scikit-learn.org/stable/modules/model_evaluation.html

cv?:交叉驗證參數(shù),默認None,使用三折交叉驗證。指定fold數(shù)量,默認為3,也可以是yield訓(xùn)練/測試數(shù)據(jù)的生成器。

refit?:默認為True,程序?qū)越徊骝炞C訓(xùn)練集得到的最佳參數(shù),重新對所有可用的訓(xùn)練集與開發(fā)集進行,作為最終用于性能評估的最佳模型參數(shù)。即在搜索參數(shù)結(jié)束后,用最佳參數(shù)結(jié)果再次fit一遍全部數(shù)據(jù)集。

iid:默認True,為True時,默認為各個樣本fold概率分布一致,誤差估計為所有樣本之和,而非各個fold的平均。

verbose:日志冗長度,int:冗長度,0:不輸出訓(xùn)練過程,1:偶爾輸出,>1:對每個子模型都輸出。

n_jobs:?并行數(shù),int:個數(shù),-1:跟CPU核數(shù)一致, 1:默認值。

pre_dispatch:指定總共分發(fā)的并行任務(wù)數(shù)。當n_jobs大于1時,數(shù)據(jù)將在每個運行點進行復(fù)制,這可能導(dǎo)致OOM,而設(shè)置pre_dispatch參數(shù),則可以預(yù)先劃分總共的job數(shù)量,使數(shù)據(jù)最多被復(fù)制pre_dispatch次

常用方法:

grid.fit():運行網(wǎng)格搜索

grid_scores_:給出不同參數(shù)情況下的評價結(jié)果

best_params_:描述了已取得最佳結(jié)果的參數(shù)的組合

best_score_:成員提供優(yōu)化過程期間觀察到的最好的評分

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內(nèi)容