sklearn中的GridSearchCV方法詳解


1、GridSearchCV簡介

  GridSearchCV的名字其實可以拆分為兩部分,GridSearch和CV,即網格搜索和交叉驗證。網格搜索,搜索的是參數,即在指定的參數范圍內,按步長依次調整參數,利用調整的參數訓練學習器,從所有的參數中找到在驗證集上精度最高的參數,這其實是一個訓練和比較的過程。k折交叉驗證將所有數據集分成k份,不重復地每次取其中一份做測試集,用其余k-1份做訓練集訓練模型,之后計算該模型在測試集上的得分,將k次的得分取平均得到最后的得分。

  GridSearchCV可以保證在指定的參數范圍內找到精度最高的參數,但是這也是網格搜索的缺陷所在,他要求遍歷所有可能參數的組合,在面對大數據集和多參數的情況下,非常耗時。

GridSearchCV,它存在的意義就是自動調參,只要把參數輸進去,就能給出最優化結果和參數。但是這個方法適合於小數據集,一旦數據的量級上去了,很難得到結果。

      網格搜索可能是最簡單,應用最廣泛的超參數搜索算法,他通過查找搜索范圍內的所有的點來確定最優值。如果采用較大的搜索范圍及較小的步長,網格搜索很大概率找到全局最優值。然而這種搜索方案十分消耗計算資源和時間,特別是需要調優的超參數比較多的時候。因此在實際應用過程中,網格搜索法一般會先使用較廣的搜索范圍和較大的步長,來找到全局最優值可能的位置;然后再縮小搜索范圍和步長,來尋找更精確的最優值。這種操作方案可以降低所需的時間和計算量,但由於目標函數一般是非凸的,所以很可能會錯過全局最優值。

2、GridSearchCV參數說明

   參數如下:

sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

     源碼地址

   重要參數說明如下:

     (1) estimator:選擇使用的分類器,並且傳入除需要確定最佳的參數之外的其他參數。每一個分類器都需要一個scoring參數,或者score方法:如

estimator = RandomForestClassifier(min_sample_split=100,min_samples_leaf = 20,max_depth = 8,max_features = 'sqrt' , random_state =10)

     (2) param_grid:需要最優化的參數的取值,值為字典或者列表,例如:

param_grid = param_test1, param_test1 = {'n_estimators' : range(10,71,10)}

 或 

param_grid = [{'n_estimators': [3, 10, 30],'max_features': [2, 4, 6, 8]},{'bootstrap': [False],'n_estimators': [3, 10],'max_features': [2, 3, 4]},]

 (3)scoring = None :模型評價標准,默認為None,這時需要使用score函數;或者如scoring = 'roc_auc',根據所選模型不同,評價准則不同,字符串(函數名),或是可調用對象,需要其函數簽名,形如:scorer(estimator,X,y);如果是None,則使用estimator的誤差估計函數。

   (4) n_jobs = 1 : n_jobs:並行數,默認為1,當n_jobs = -1:表示使用所有處理器(建議).

   (5) refit = True :默認為True,程序將會以交叉驗證訓練集得到的最佳參數,重新對所有可能的訓練集與開發集進行,作為最終用於性能評估的最佳模型參數。即在搜索參數結束后,用最佳參數結果再次fit一遍全部數據集(不用管即可)。

   (6) cv = None:交叉驗證參數,默認None,使用五折交叉驗證。指定fold數量,默認為5(之前版本為3),也可以是yield訓練/測試數據的生成器。 

3、GridSearchCV屬性說明

   (1) cv_results_ : dict of numpy (masked) ndarrays

   具有鍵作為列標題和值作為列的dict,可以導入到DataFrame中。注意,“params”鍵用於存儲所有參數候選項的參數設置列表。

 (2) best_estimator_ : estimator

   通過搜索選擇的估計器,即在左側數據上給出最高分數(或指定的最小損失)的估計器,估計器括號里包括選中的參數。如果refit = False,則不可用。

 (3)best_score_ :float  best_estimator的最高分數

 (4)best_parmas_ : dict  在保存數據上給出最佳結果的參數設置

 (5)best_index_ : int 對應於最佳候選參數設置的索引(cv_results_數組)

   search.cv_results _ ['params'] [search.best_index_]中的dict給出了最佳模型的參數設置,給出了最高的平均分數(search.best_score_

4、進行預測的常用方法和屬性

  • grid.fit(X)  :運行網格搜索
  • grid_scores_   :給出不同參數情況下的評價結果
  • predict(X) : 使用找到的最佳參數在估計器上調用預測。
  • best_params_  :描述了已取得最佳結果的參數的組合
  • best_score_    :提供優化過程期間觀察到的最好的評分
  • cv_results_  :具體用法模型不同參數下交叉驗證的結果

5、示例

from sklearn.model_selection import GridSearchCV
param_grid = [
{'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},
{'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]},
]
forest_reg = RandomForestRegressor()
grid_search = GridSearchCV(forest_reg, param_grid, cv=5,
                          scoring='neg_mean_squared_error')
grid_search.fit(housing_prepared, housing_labels)
print(grid_search.best_params_)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM