超參數(shù)是不能直接在模型中學(xué)習(xí)的參數(shù)。包括 SVM中的 C, kernel and gamma,Lasso中的 alpha 等。
搜索超參數(shù)空間,來(lái)得到最佳的交叉驗(yàn)證結(jié)果。
搜索由以下部分組成:
- 模型(分類或回歸,例如 sklearn.svm.SVC())
- 參數(shù)空間
- 候選參數(shù)搜索或取樣方法
- 交叉驗(yàn)證結(jié)構(gòu)
- 得分函數(shù)
一些模型有專業(yè)、高效的參數(shù)搜索策略,概述如下:scikit-learn提供了兩種通用抽樣搜索方法:GridSearchCV 窮盡參數(shù)的所有組合,RandomizedSearchCV 從指定分布的參數(shù)空間中取樣。
應(yīng)該注意到,超參數(shù)中的一小部分可能對(duì)結(jié)果產(chǎn)生較大的影響,而另一些只要保持默認(rèn)值就可以了,因此應(yīng)該認(rèn)真的閱讀模型論文來(lái)理解模型。
Exhaustive Grid Search
GridSearchCV窮舉 param_grid 中的值組成的全部候選項(xiàng)。用所有可能的參數(shù)組合去擬合數(shù)據(jù),然后留下結(jié)果最好的組合。
Randomized Parameter Optimization
RandomizedSearchCV 隨機(jī)搜索參數(shù),在參數(shù)分布中取樣,比窮舉搜索有兩個(gè)主要好處:
1 能得到獨(dú)立于參數(shù)數(shù)量和參數(shù)值的組合;
2 增加參數(shù)不影響結(jié)果不降低效率。
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
這個(gè)例子使用了 scipy.stats 模塊,包含了很多用于參數(shù)抽樣的分布,例如 expon、gamma、uniform或者 randint。
對(duì)于連續(xù)的參數(shù),比如 C,指定一個(gè)連續(xù)分布以便于充分利用隨機(jī)化是很重要的,增加迭代次數(shù)將得到更好的結(jié)果。
Tips
指定一個(gè)客觀的評(píng)價(jià)標(biāo)準(zhǔn)
參數(shù)搜索使用模型的 score函數(shù)來(lái)評(píng)價(jià)參數(shù)設(shè)置, sklearn.metrics.accuracy_score 用于分類,sklearn.metrics.r2_score用于回歸。在一些應(yīng)用中,其他得分函數(shù)更合適(例如非平衡分類中,準(zhǔn)確度得分是不合適的)。
合成模型參數(shù)空間
模型選擇
通過(guò)評(píng)估各種參數(shù)設(shè)置的模型選擇可以看作是使用標(biāo)記數(shù)據(jù)來(lái)訓(xùn)練網(wǎng)格參數(shù)的一種方法。
最好把數(shù)據(jù)分位開(kāi)發(fā)集(用來(lái)訓(xùn)練GridSearchCV)和評(píng)估集(計(jì)算效果評(píng)估),可以使用 train_test_split 函數(shù)。
并行化
GridSearchCV 和 RandomizedSearchCV 在評(píng)估參數(shù)設(shè)置時(shí)是獨(dú)立進(jìn)行的,因此可以并行進(jìn)行,使用 n-jobs=-1。
魯棒性的失敗
某些參數(shù)設(shè)置可能在一折或多折數(shù)據(jù)上不能擬合。默認(rèn)情況下,這將導(dǎo)致整個(gè)搜索失敗,即使一些參數(shù)是可以評(píng)估的。設(shè)置 error_score=0 可以完成整個(gè)搜索過(guò)程。
來(lái)源: http://scikit-learn.org/stable/modules/grid_search.html