【Scikit-Learn 中文文檔】優化估計器的超參數 - 模型選擇和評估 - 用戶指南 | ApacheCN

中文文檔: 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:當在數據集上“擬合”時,參數值的所有可能的組合都會被評估,從而計算出最佳的組合。

示例:

3.2.3. 參數搜索技巧

3.2.3.1. 指定目標度量

默認情況下, 參數搜索使用估計器的評分函數來評估(衡量)參數設置。 比如 sklearn.metrics.accuracy_score 用於分類和 sklearn.metrics.r2_score 用於迴歸。 對於一些應用, 其他評分函數將會更加適合 (例如在不平衡的分類, 精度評分往往是信息不足的)。 一個可選的評分功能可以通過評分參數指定給 GridSearchCV, RandomizedSearchCV 和許多下文將要描述的、專業化的交叉驗證工具。 有關詳細信息, 請參閱 評分參數:定義模型評估規則

3.2.3.3. 複合估計和參數空間

管道:鏈式評估器 描述瞭如何使用這些工具搜索參數空間構建鏈式評估器。

3.2.3.4. 模型選擇:開發和評估

通過評估各種參數設置,可以將模型選擇視爲使用標記數據訓練網格參數的一種方法。

在評估結果模型時, 重要的是在網格搜索過程中未看到的 held-out 樣本數據上執行以下操作: 建議將數據拆分爲開發集 (development set,供 GridSearchCV 實例使用)和評估集(evaluation set)來計算性能指標。

這可以通過使用效用函數 train_test_split 來完成。

3.2.3.5. 並行機制

GridSearchCV 和 RandomizedSearchCV 可以獨立地評估每個參數設置。如果您的OS支持,通過使用關鍵字 n_jobs=-1 可以使計算並行運行。 有關詳細信息, 請參見函數簽名。

3.2.3.6. 對故障的魯棒性

某些參數設置可能導致無法 fit 數據的一個或多個摺疊。 默認情況下, 這將導致整個搜索失敗, 即使某些參數設置可以完全計算。 設置 error_score=0 (或`=np.NaN`) 將使程序對此類故障具有魯棒性,發出警告並將該摺疊的分數設置爲0(或`NaN`), 但可以完成搜索。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章