详解| Sklearn—GridSearch 调参函数
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 调参函数相关推荐
- 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?
系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...
- 详解sklearn中的make_moons函数
make_moons是函数用来生成数据集,在sklearn.datasets里,具体用法如下: Parameters: n_samples : int, optional (default=100)T ...
- (动图详解)汇编视角观察函数栈帧的创建和销毁
目录 1.阅读本文的价值 2.函数栈帧及栈的概念 3.部分寄存器及汇编指令 4.main函数的调用 5.main函数的栈帧创建 6.变量的栈帧创建 6.函数传参 7.函数内部运算及销毁 ...
- smali语言详解之一般/构造方法(函数)的声明与返回值关键字
smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...
- ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(sklearn+3Spli+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) ...
- ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设 ...
- python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...
- python join_详解Python中的join()函数的用法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...
- python中index函数_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
最新文章
- Java项目:无库版商品管理系统(java+Gui+文档)
- php增删改查心得体会,php增删改查入门示例
- 数据库建模工具PowerDesigner的安装与汉化和破解
- 最小二乘支持向量机的分析与改进及Python实现
- SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
- Spark将数据写入Mysql
- 用户行为分析面面观之三
- MyCAT实现MySQL的读写分离
- 计算机毕业设计论文——国内外文献查找网站
- python课程设计小结和体会_课程设计心得体会与总结
- oracle插入表当前时间,ORACLE自动插入当前时间
- RocketMQ产线Broker Busy问题排查经过
- labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
- 计算机毕业设计ssm基于web的社团管理系统r848z系统+程序+源码+lw+远程部署
- Open Policy Agent(OPA) rego使用
- 企业IT管理岗的首选认证:ITIL®4 Foundation
- 嵌入式硬件笔记——flash
- 广州市 如何报计算机模块,【求助】广州到底去哪里报考计算机等级考试
- 酒店WiFi覆盖-无线覆盖方案
- pyinstaller流程及相关问题
热门文章
- RT-Thread Nano入门学习笔记(2)
- 01-运营可能是一种思维方式
- 与心态相关的写作储备
- 汽车研发的五大阶段及制造的四大工艺
- 计算机需要记笔记,如何优雅地用电脑记笔记
- python 批量读取csv_Python Pandas批量读取csv文件到dataframe的方法
- 六、UniApp 调试自定义原生插件的两种方式
- [设计报告]有屏的地方就有Bad Apple!! —— 12864版
- Mac删除软件之后图标还在怎么办?
- 浙江大学软件学院2020年保研真题Distance of Triples (25 分)