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_)
posted @ 2020-12-22 20:43  dalege  阅读(58150)  评论(0编辑  收藏  举报