1. 定义
Grid Search:选取模型的最优超参数、通过优化超参数之间的最优组合来改善模型性能。
(获取最优超参数的方式可以绘制验证曲线,但是验证曲线只能每次获取一个最优超参数。如果多个超参数有很多排列组合的话,就可以使用网格搜索寻求最优超参数的组合。)
(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search。)
2. 原理
首先为不同的超参数设定一个值列表,然后计算机会遍历每个超参数的组合,实例化给定的模型,做cv次交叉验证,将平均得分最高的超参数组合作为最佳的选择,返回模型对象。
3. sklearn 实现网格搜索: GridSearchCV
交叉验证经常与网格搜索进行结合,作为参数评价的一种方法,这种方法叫做grid search with cross validation。sklearn因此设计了一个这样的类GridSearchCV,这个类实现了fit,predict,score等方法,被当做了一个estimator,使用fit方法,该过程中:(1)搜索到最佳参数;(2)实例化了一个最佳参数的estimator
4. GridSearchCV的sklearn官方网址:
class 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)
- estimator选择使用的分类器
- param_grid需要最优化的参数的取值,值为字典或者包含字典的列表
- scoring=None模型评价标准,默认None,使用estimator的误差估计函数。根据所选模型不同,评价准则不同,比如scoring=”accuracy”n_jobs进程个数,None为1
- iid 该参数将弃用
- refit=True默认为True,即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集
- cv=None交叉验证参数,默认None,使用5折交叉验证
- verbose=0日志冗长度
- pre_dispatch=‘2*n_jobs’指定总共分发的并行任务数
- error_score=nan如果估计器拟合中出现错误,则分配给score的值
- return_train_score=False如果为False,则cv_results_属性将不包括训练分数
5. 实现例子
运行结果: