中文文檔: http://sklearn.apachecn.org/cn/stable/modules/grid_search.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/grid_search.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
3.2. 調整估計器的超參數
超參數,即不直接在估計器內學習的參數。在 scikit-learn 包中,它們作爲估計器類中構造函數的參數進行傳遞。典型的例子有:用於支持向量分類器的 C
、kernel
和 gamma
,用於Lasso的 alpha
等。
搜索超參數空間以便獲得最好 交叉驗證 分數的方法是可能的而且是值得提倡的。
通過這種方式,構造估計器時被提供的任何參數或許都能被優化。具體來說,要獲取到給定估計器的所有參數的名稱和當前值,使用:
estimator.get_params()
搜索包括:
- 估計器(迴歸器或分類器,例如
sklearn.svm.SVC()
) - 參數空間
- 搜尋或採樣候選的方法
- 交叉驗證方案
- 計分函數
有些模型支持專業化的、高效的參數搜索策略, 描述如下 。在 scikit-learn 包中提供了兩種採樣搜索候選的通用方法:對於給定的值, GridSearchCV 考慮了所有參數組合;而 RandomizedSearchCV 可以從具有指定分佈的參數空間中抽取給定數量的候選。介紹完這些工具後,我們將詳細介紹適用於這兩種方法的 最佳實踐 。
注意,通常這些參數的一小部分會對模型的預測或計算性能有很大的影響,而其他參數可以保留爲其默認值。 建議閱讀估計器類的相關文檔,以更好地瞭解其預期行爲,可能的話還可以閱讀下引用的文獻。
3.2.1. 網格追蹤法–窮盡的網格搜索
GridSearchCV
提供的網格搜索從通過 param_grid
參數確定的網格參數值中全面生成候選。例如,下面的 param_grid
:
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
探索兩個網格的詳細解釋: 一個具有線性內核並且C在[1,10,100,1000]中取值; 另一個具有RBF內核,C值的交叉乘積範圍在[1,10,100,1000],gamma在[0.001,0.0001]中取值。
GridSearchCV
實例實現了常用估計器 API:當在數據集上“擬合”時,參數值的所有可能的組合都會被評估,從而計算出最佳的組合。
示例:
- 有關在數字數據集上的網格搜索計算示例,請參閱 基於交叉驗證的網格搜索參數估計。
- 有關來自文本文檔特徵提取器(n-gram計數向量化器和TF-IDF變換器)的網格搜索耦合參數與分類器(這裏是使用具有彈性網格的SGD訓練的線性SVM 或L2懲罰)使用 pipeline.Pipeline 示例,請參閱 用於文本特徵提取和評估的示例管道。
- 有關iris數據集的交叉驗證循環中的網格搜索示例, 請參閱 嵌套與非嵌套交叉驗證。
- 有關用於同時評估多個指標的GridSearchCV示例,請參閱 cross_val_score 與 GridSearchCV 多指標評價的實證研究。
3.2.2. 隨機參數優化
儘管使用參數設置的網格法是目前最廣泛使用的參數優化方法, 其他搜索方法也具有更有利的性能。 RandomizedSearchCV 實現了對參數的隨機搜索, 其中每個設置都是從可能的參數值的分佈中進行取樣。 這對於窮舉搜索有兩個主要優勢:
- 可以選擇獨立於參數個數和可能值的預算
- 添加不影響性能的參數不會降低效率
指定如何取樣的參數是使用字典完成的, 非常類似於爲 GridSearchCV
指定參數。
此外, 通過 n_iter
參數指定計算預算, 即取樣候選項數或取樣迭代次數。 對於每個參數, 可以指定在可能值上的分佈或離散選擇的列表
(均勻取樣):
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
本示例使用 scipy.stats
模塊, 它包含許多用於採樣參數的有用分佈, 如 expon
,gamma
,uniform
或者 randint
。
原則上, 任何函數都可以通過提供一個 rvs
(隨機變量樣本)方法來採樣一個值。 對 rvs
函數的調用應在連續調用中提供來自可能參數值的獨立隨機樣本。
Warning
The distributions in
scipy.stats
prior to version scipy 0.16 do not allow specifying a random state. Instead, they use the global numpy random state, that can be seeded vianp.random.seed
or set usingnp.random.set_state
. However, beginning scikit-learn 0.18, the sklearn.model_selection module sets the random state provided by the user if scipy >= 0.16 is also available.
對於連續參數 (如上面提到的 C
),指定連續分佈以充分利用隨機化是很重要的。這樣,有助於 n_iter
總是趨向於更精細的搜索。
示例:
- 隨機搜索和網格搜索的使用和效率的比較: 有關隨機搜索和網格搜索超參數估計的對比
引用:
- Bergstra, J. and Bengio, Y., Random search for hyper-parameter optimization, The Journal of Machine Learning Research (2012)
3.2.3. 參數搜索技巧
3.2.3.1. 指定目標度量
默認情況下, 參數搜索使用估計器的評分函數來評估(衡量)參數設置。 比如 sklearn.metrics.accuracy_score 用於分類和 sklearn.metrics.r2_score 用於迴歸。
對於一些應用, 其他評分函數將會更加適合 (例如在不平衡的分類, 精度評分往往是信息不足的)。 一個可選的評分功能可以通過評分參數指定給 GridSearchCV
, RandomizedSearchCV
和許多下文將要描述的、專業化的交叉驗證工具。
有關詳細信息, 請參閱 評分參數:定義模型評估規則。
3.2.3.2. 爲評估指定多個指標
GridSearchCV
和 RandomizedSearchCV
允許爲評分參數指定多個指標。
多指標評分可以被指定爲一個預先定義分數名稱字符串列表或者是一個得分手名字到得分手的函數或預先定義的記分員名字的映射字典。 有關詳細信息, 請參閱 多指標評估。
在指定多個指標時,必須將 refit
參數設置爲要在其中找到 best_params_
,並用於在整個數據集上構建 best_estimator_
的度量標準(字符串)。
如果搜索不應該 refit, 則設置 refit=False
。在使用多個度量值時,如果將 refit 保留爲默認值,不會導致結果錯誤。
有關示例用法, 請參見 cross_val_score 與 GridSearchCV 多指標評價的實證研究。
3.2.3.3. 複合估計和參數空間
管道:鏈式評估器 描述瞭如何使用這些工具搜索參數空間構建鏈式評估器。
3.2.3.4. 模型選擇:開發和評估
通過評估各種參數設置,可以將模型選擇視爲使用標記數據訓練網格參數的一種方法。
在評估結果模型時, 重要的是在網格搜索過程中未看到的 held-out 樣本數據上執行以下操作: 建議將數據拆分爲開發集 (development set,供 GridSearchCV
實例使用)和評估集(evaluation
set)來計算性能指標。
這可以通過使用效用函數 train_test_split 來完成。
3.2.4. 暴力參數搜索的替代方案
3.2.4.1. 模型特定交叉驗證
某些模型可以與參數的單個值的估計值一樣有效地適應某一參數範圍內的數據。 此功能可用於執行更有效的交叉驗證, 用於此參數的模型選擇。
該策略最常用的參數是編碼正則化矩陣強度的參數。在這種情況下, 我們稱之爲, 計算估計器的正則化路徑(regularization path)。
以下是這些模型的列表:
linear_model.ElasticNetCV ([l1_ratio, eps, …]) |
Elastic Net model with iterative fitting along a regularization path |
linear_model.LarsCV ([fit_intercept, …]) |
Cross-validated Least Angle Regression model |
linear_model.LassoCV ([eps, n_alphas, …]) |
Lasso linear model with iterative fitting along a regularization path |
linear_model.LassoLarsCV ([fit_intercept, …]) |
Cross-validated Lasso, using the LARS algorithm |
linear_model.LogisticRegressionCV ([Cs, …]) |
Logistic Regression CV (aka logit, MaxEnt) classifier. |
linear_model.MultiTaskElasticNetCV ([…]) |
Multi-task L1/L2 ElasticNet with built-in cross-validation. |
linear_model.MultiTaskLassoCV ([eps, …]) |
Multi-task L1/L2 Lasso with built-in cross-validation. |
linear_model.OrthogonalMatchingPursuitCV ([…]) |
Cross-validated Orthogonal Matching Pursuit model (OMP) |
linear_model.RidgeCV ([alphas, …]) |
Ridge regression with built-in cross-validation. |
linear_model.RidgeClassifierCV ([alphas, …]) |
Ridge classifier with built-in cross-validation. |
3.2.4.2. 信息標準
一些模型通過計算一個正則化路徑 (代替使用交叉驗證得出數個參數), 可以給出正則化參數最優估計的信息理論閉包公式。
以下是從 Akaike 信息標準 (AIC) 或貝葉斯信息標準 (可用於自動選擇模型) 中受益的模型列表:
linear_model.LassoLarsIC ([criterion, …]) |
Lasso model fit with Lars using BIC or AIC for model selection |
3.2.4.3. 出袋估計
當使用基於裝袋的集合方法時,即使用具有替換的採樣產生新的訓練集,部分訓練集保持不用。 對於集合中的每個分類器,訓練集的不同部分被忽略。
這個省略的部分可以用來估計泛化誤差,而不必依靠單獨的驗證集。 此估計是”免費的”,因爲不需要額外的數據,可以用於模型選擇。
目前該方法已經實現的類以下幾個:
ensemble.RandomForestClassifier ([…]) |
A random forest classifier. |
ensemble.RandomForestRegressor ([…]) |
A random forest regressor. |
ensemble.ExtraTreesClassifier ([…]) |
An extra-trees classifier. |
ensemble.ExtraTreesRegressor ([n_estimators, …]) |
An extra-trees regressor. |
ensemble.GradientBoostingClassifier ([loss, …]) |
Gradient Boosting for classification. |
ensemble.GradientBoostingRegressor ([loss, …]) |
Gradient Boosting for regression. |
中文文檔: http://sklearn.apachecn.org/cn/stable/modules/grid_search.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/grid_search.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
有興趣的們也可以和我們一起來維護,持續更新中 。。。
機器學習交流羣: 629470233