GridSearchCV() 與 Pipline相結合

GridSearchCV()或RandomizedSearchCV()方法的初級用法見:
http://www.reibang.com/writer#/notebooks/52233537/notes/117238898

Pipeline對象的使用方法見:
http://www.reibang.com/writer#/notebooks/52233537/notes/117140178

具體例子見(jupyter notebook):

E:\cgx硬盤\★Python and AI\(cgx★★)scikit learn 學習筆記\sklearn_cgx\GridSearchCV和RandomizedSearchCV參數搜索\GridSearchCV_and_Pipeline.ipynb

Cas1: Pipeline的每個計算步驟只搜索一種方法的一種或多種參數群扶;

這種情況很簡單直觀蕊蝗,在Pipeline中清晰定義了每一個計算步驟,然后在my_param_grid 中明確定義這幾個計算步驟需要被搜索的參數辰企、范圍闸昨、輪數蚯斯。

如下示例,Pipeline中明確定義了第1計算步驟 reduce_dim(自定義的字符串)用PCA()方法饵较,第2計算步驟 classify(自定義的字符串)用LinearSVC()方法拍嵌。

然后在my_param_grid1 中清晰指出了要搜索的參數是reduce_dim__n_components和classify__C,他們分別表示了PCA()的n_components參數和LinearSVC()的C參數循诉。
my_param_grid2 與 my_param_grid1本質完全相同横辆,只是多設置了一輪新的搜索。

# 定義Pipeline對象(這里每個計算步驟都是我們實際要搜索的方法茄猫,PCA()和LinearSVC())
pipe = Pipeline([('reduce_dim', PCA(iterated_power=7)),
                 ('classify', LinearSVC(dual=False, max_iter=10000))])

# # 針對Pipeline對象的每個計算步驟狈蚤,設置參數搜索范圍
 my_param_grid1 = {'reduce_dim__n_components': [2, 4, 8],
                  'classify__C': [1, 10, 100, 1000]}  # dict (單輪搜索)

my_param_grid2 = [{'reduce_dim__n_components': [2, 4, 8],
                  'classify__C': [1, 10, 100, 1000]},
                 {'reduce_dim__n_components': [13, 20, 26],
                  'reduce_dim__n_oversamples': [5, 10],
                  'classify__C': [50, 100]}]  # dict list (多輪搜索)

Cas2: Pipeline的每個計算步驟搜索多種方法的一種或多種參數;

與Cas1不同划纽,Cas2在Pipeline對應的每個步驟可以搜索多種方法脆侮,此時在Pipeline中定義的計算步驟只相當于做了一個占位符,而在my_param_grid 中為每個計算步驟設置了多種方法選擇勇劣,以及對應的需要被搜索的參數靖避、范圍、輪數比默。

如下示例幻捏,Pipeline中的第1計算步驟 reduce_dim 可以是'passthrough' 或 PCA(iterated_power=7) 或 [PCA(iterated_power=7), NMF()]...,前面說了退敦,可以直接將其視為為占位符粘咖;第2計算步驟 classify 用LinearSVC()方法,當然這里也可以用多個方法組成的list(但因為他是最后的估計器侈百,因此不能用'passthrough'瓮下,否則報錯)。

然后在my_param_grid1 中清晰指出了:
對于reduce_dim步驟钝域,真正要搜索的方法是[PCA(iterated_power=10), NMF(), FastICA()]三種讽坏,且針對這三種方法要搜索參數是'n_components(reduce_dim__n_components)'(需要注意的是,待搜索參數例证,必須是這些方法都有的參數路呜,否則會報錯)。
my_param_grid2 與 my_param_grid1本質完全相同,只是針對reduce_dim步驟還要搜索SelectKBest(chi2)方法的k參數胀葱,因為這個參數是PCA()和NMF()所沒有的漠秋,因此要單獨拿出來搜索。同時針對classify步驟抵屿,要搜索[SVC(), LinearSVC()]兩種方法的C參數庆锦。

# 定義Pipeline對象(這里每個計算步驟無論是:'passthrough'、PCA(iterated_power=7)還是[PCA(iterated_power=7), NMF()]轧葛,都是占個位置而已)
pipe = Pipeline([('reduce_dim', 'passthrough' 或 PCA(iterated_power=7) 或 [PCA(iterated_power=7), NMF()]),
                 ('classify',  LinearSVC(dual=False, max_iter=10000))])

# 針對Pipeline對象的每個計算步驟搂抒,真正設置搜索方法和對應搜索參數、范圍尿扯、輪數求晶。
my_param_grid1 = {'reduce_dim': [PCA(iterated_power=10), NMF(), FastICA()],
                 'reduce_dim__n_components': [2, 4, 8],
                 'classify__C': [1, 10, 100, 1000]}  # dict

my_param_grid = [{'reduce_dim': [PCA(iterated_power=10), NMF(), FastICA()],
                  'reduce_dim__n_components': [2, 4, 8],
                  'classify__C': [1, 10, 100, 1000]},
                 {'reduce_dim': [SelectKBest(chi2)],
                  'reduce_dim__k': [2, 4, 8],
                  'classify': [SVC(), LinearSVC()],
                  'classify__C': [1, 10, 100, 1000]}]

注意

my_param_grid 中所有的dict的'key'的定義,由三部分組成衷笋,以‘reduce_dim__n_components’為例說明:
(1)第一部分芳杏,pipe對象中的‘key’:reduce_dim
(2)第二部分,兩個短下劃線:__
(3)第三部分右莱,reduce_dim對應的方法(這里是PCA)的輸入參數名稱:n_components

如果沒有太多的超參數需要調優(yōu)蚜锨,并且 pipeline 運行時間不長,請使用 GridSearchCV慢蜓;
對于較大的搜索空間和訓練緩慢的模型,請使用 HalvingGridSearchCV郭膛;
對于非常大的搜索空間和訓練緩慢的模型晨抡,請使用 HalvingRandomSearchCV。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末则剃,一起剝皮案震驚了整個濱河市耘柱,隨后出現的幾起案子,更是在濱河造成了極大的恐慌棍现,老刑警劉巖调煎,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異己肮,居然都是意外死亡士袄,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門谎僻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娄柳,“玉大人,你說我怎么就攤上這事艘绍〕嗑埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挎挖。 經常有香客問我这敬,道長,這世上最難降的妖魔是什么蕉朵? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任鹅颊,我火速辦了婚禮,結果婚禮上墓造,老公的妹妹穿的比我還像新娘堪伍。我一直安慰自己,他們只是感情好觅闽,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布帝雇。 她就那樣靜靜地躺著,像睡著了一般蛉拙。 火紅的嫁衣襯著肌膚如雪尸闸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天孕锄,我揣著相機與錄音吮廉,去河邊找鬼。 笑死畸肆,一個胖子當著我的面吹牛宦芦,可吹牛的內容都是我干的。 我是一名探鬼主播轴脐,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼调卑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大咱?” 一聲冷哼從身側響起恬涧,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碴巾,沒想到半個月后溯捆,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡厦瓢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年提揍,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旷痕。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡碳锈,死狀恐怖,靈堂內的尸體忽然破棺而出欺抗,到底是詐尸還是另有隱情售碳,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贸人,受9級特大地震影響间景,放射性物質發(fā)生泄漏。R本人自食惡果不足惜艺智,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一倘要、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧十拣,春花似錦封拧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缰趋,卻和暖如春捧杉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秘血。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工味抖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灰粮。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓仔涩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谋竖。 傳聞我的和親對象是個殘疾皇子红柱,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容