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_)