Abstract:GridSearch是Sklearn里的一个调参函数。本文是对此函数的详细解释。

1.参数搜索

参数并非从estimators中直接学到的,可以通过设置一个参数搜索空间来找到最佳的cross-validation score。通常示例包括的参数有:SVM分类器的中C、kernel和gamma,Lasso中的alpha等。

当构建一个estimator时,提供的参数可以以这种方式进行优化。更特别的是,可以使用如下的方法来给给定estimator的所有参数来找到对应的参数名和当前值:

  estimator.get_params()

这些参数称被提到:“超参数(hyperparameters)”,尤其在Bayesian learning中,它们与机器学习过程中的参数优化是有区别的。

一个这样的参数search包含:

  • 一个estimator(regressor/classifier)

  • 一个参数空间

  • 一个用于searching/sampling候选参数的方法

  • 一个cross-validation的scheme

  • 一个score function

这样的模型允许你指定有效的搜索参数策略,如下。在sklearn中,有两种通用方法进行sampling搜索候选参数:

  • GridSearch: 暴力搜索所有参数组合

  • RandomizedSearchCV: 在指定参数空间内抽样一部分候选参数

2.GRIDSEARCHCV

grid search提供了GridSearchCV,相应的参数空间param_grid设置如下:

  param_grid = [  {'C': [1, 10, 100, 1000], 'kernel': ['linear']},  {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, ]

上例指定了两个要搜索的参数空间:一个是线性kernel,其中C值为[1,10,100,1000];另一个则使用RBF kernel,对应的C值为[1,10,100,1000],对应的gamma值为 [0.001, 0.0001].

GridSearchCV实例实现了通用的estimator API: 当在数据集的所有可能参数组合上进行”fitting”时,所有参数组都会被评测,并保留最优的参数组合。

3.随机参数优化

使用GridSearch进行参数搜索是目前最广泛使用的参数优化方法,还有另一些方法存在。RandomizedSearchCV实现了在参数上的随机搜索,每个设置都会以可能的参数值分布进行抽样。对比穷举法,它具有两个优势:

  • 1.budget的选择与参数个数和可能的值独立

  • 2.增加参数不会影响性能,不会降低效果

参数设定部分和GridSearchCV类似,使用一个字典表来进行参数抽样。另外,计算开销(computation budget), 抽取的样本数,抽样迭代次数,可以由n_iter来指定。对于每个参数,都可以指定在可能值上的分布,或者是一个离散值列表(它可以被均匀采样)。

例如:

  [{‘C’: scipy.stats.expon(scale=100), ‘gamma’: scipy.stats.expon(scale=.1), ‘kernel’: [‘rbf’], ‘class_weight’:[‘auto’, None]}]

这个例子使用scipy.stats模块,该模块包含了许多分布方法可以用来进行抽样,包括:指数分布(expon),gamma分布(gamma),均匀分布(uniform),或randint分布。通常每个函数都可以提供一个rvs(随机变量抽样)方法进行抽样。

注意:

scipy.stats的分布不允许以随机方式指定。作为替代,我们可以使用一个全局的numpy 随机态,它可以通过np.random.seed或np.random.set_state来设定。

对于连续的参数,比如上面的C,指定一个连续的分布十分重要,它可以完全利用随机化(randomization)。这种情况下,增加n_iter将产生一个更好的搜索。

4.参数搜索TIPS

4.1 指定一个目标METRIC

缺省的,参数搜索会使用estimator的缺省score函数来评估参数设置。其中,分类使用sklearn.metrics.accuracy_score,回归使用sklearn.metrics.r2_score。对于其它应用,可能需要使用一个可合适的scoring函数(例如:对于unbalanced分类问题,accuracy的score是不合适的)。可选择的scoring函数可以通过GridSearchCV/RandomizedSearchCV以及其它CV工具类的scoring参数来设置。详见。

4.2 将ESTIMATORS与参数空间组合

详见:Pipeline: chaining estimators

4.3 模型选择:开发集与评测集

通过评估多种参数设置来进行模型选择,可以认为是使用labeled数据集来训练这些参数空间。

当评估产生的模型时,在留存样本(held-out samples)上做模型评测,不会在参数搜索过程看到:推荐你将数据划分成两部分:

  • 1.开发集(development set):对它进行GridSearchCV

  • 2.评测集(evaluation set):计算性能metrics

可以通过cross_validation.train_test_split来进行划分。

4.4 并列化

n_jobs参数进行设置。

4.5 容错

一些参数设置可能会导致fit1或多个folds的数据时失败。缺省的,它会引起整个搜索的失败,即使有些参数设置已经被评测过了。通过设置error_score=0 (or =np.NaN), 可以让该过程更加具有容错性,对于那个存在0(或NaN)的fold数据集来说会继续进行下去。

5.可选择的其它暴力参数搜索(BRUTE FORCE PARAMETER SEARCH)

5.1 模型指定的CV

一些模型可以在一些参数值范围内拟合数据,与单个参数值的拟合一样有效。这种特性可以执行一个更有效的cv来进行参数的模型选择。

一种最常用的参数策略的方式是,将正则项参数化。这种情况下,我们可以计算estimator的正则化path(regularization path)

模型如下:

  • linear_model.ElasticNetCV

  • linear_model.LarsCV

  • linear_model.LassoCV

  • linear_model.LassoLarsCV

  • linear_model.LogisticRegressionCV

  • linear_model.MultiTaskElasticNetCV

  • linear_model.MultiTaskLassoCV

  • linear_model.OrthogonalMatchingPursuitCV

  • linear_model.RidgeCV

  • linear_model.RidgeClassifierCV

5.2 INFORMATION CRITERION

一些模型经常提供一个information-theoretic、closed-form的公式来进行正则项参数的估计优化,通过计算单个正则项path(而非使用cv)。

比如:

  • linear_model.LassoLarsIC

5.3 带外估计(OUT OF BAG ESTIMATES)

当我们使用基于bagging的ensemble方法时,比如:使用有放回抽样来生成新的数据集,训练集中的部分仍然是见不到的。对于ensemble中的每个分类器,训练集都会遗留下另一部分数据。

这部分遗留下来的数据,可以被用于估计泛化错误(generalization error),而无需依赖于一个独立的验证集。这种估计是“免费(for free)”的,因为,不需要额外的数据就可以进行模型选择。

这些类当中实现了该方法:

  • ensemble.RandomForestClassifier

  • ensemble.RandomForestRegressor

  • ensemble.ExtraTreesClassifier

  • ensemble.ExtraTreesRegressor

  • ensemble.GradientBoostingClassifier

  • ensemble.GradientBoostingRegressor

REFERENCE

http://scikit-learn.org/stable/modules/grid_search.html

btw:欢迎关注 ~

Github: https://github.com/ScarlettYellow

个人博客:https://scarletthuang.cn/

详解| Sklearn—GridSearch 调参函数相关推荐

  1. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  2. 详解sklearn中的make_moons函数

    make_moons是函数用来生成数据集,在sklearn.datasets里,具体用法如下: Parameters: n_samples : int, optional (default=100)T ...

  3. (动图详解)汇编视角观察函数栈帧的创建和销毁

    目录 ​1.阅读本文的价值 ​2.函数栈帧及栈的概念 ​3.部分寄存器及汇编指令 ​4.main函数的调用 5.main函数的栈帧创建 ​6.变量的栈帧创建 ​6.函数传参 ​7.函数内部运算及销毁 ...

  4. smali语言详解之一般/构造方法(函数)的声明与返回值关键字

    smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...

  5. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+3Spli+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) ...

  6. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设 ...

  7. python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...

    Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...

  8. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  9. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

最新文章

  1. Java项目:无库版商品管理系统(java+Gui+文档)
  2. php增删改查心得体会,php增删改查入门示例
  3. 数据库建模工具PowerDesigner的安装与汉化和破解
  4. 最小二乘支持向量机的分析与改进及Python实现
  5. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
  6. Spark将数据写入Mysql
  7. 用户行为分析面面观之三
  8. MyCAT实现MySQL的读写分离
  9. 计算机毕业设计论文——国内外文献查找网站
  10. python课程设计小结和体会_课程设计心得体会与总结
  11. oracle插入表当前时间,ORACLE自动插入当前时间
  12. RocketMQ产线Broker Busy问题排查经过
  13. labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
  14. 计算机毕业设计ssm基于web的社团管理系统r848z系统+程序+源码+lw+远程部署
  15. Open Policy Agent(OPA) rego使用
  16. 企业IT管理岗的首选认证:ITIL®4 Foundation
  17. 嵌入式硬件笔记——flash
  18. 广州市 如何报计算机模块,【求助】广州到底去哪里报考计算机等级考试
  19. 酒店WiFi覆盖-无线覆盖方案
  20. pyinstaller流程及相关问题

热门文章

  1. RT-Thread Nano入门学习笔记(2)
  2. 01-运营可能是一种思维方式
  3. 与心态相关的写作储备
  4. 汽车研发的五大阶段及制造的四大工艺
  5. 计算机需要记笔记,如何优雅地用电脑记笔记
  6. python 批量读取csv_Python Pandas批量读取csv文件到dataframe的方法
  7. 六、UniApp 调试自定义原生插件的两种方式
  8. [设计报告]有屏的地方就有Bad Apple!! —— 12864版
  9. Mac删除软件之后图标还在怎么办?
  10. 浙江大学软件学院2020年保研真题Distance of Triples (25 分)