作者:尘沙杰少

模型调参--Successive Halving!

简 介

现在非常多的机器学习模型在建模时都会涉及到参数调节的问题,不同的模型参数对于模型的影响非常大,如何从大量的参数中选出较好的一组参数是模型调参需要重点研究的一大难题。与此同时,我们的数据量也变得越来越大,如何在此情况下快速地挑选到不错的参数是参数选择的另外一大难题。

本篇文章我们介绍一种快速的参数选择方案 -- Successive Halving,在我们之前的实验中,该方法速度又快而且效果也可以接受。

Successive Halving

01

Successive Halving

Successive Halving(SH)就像候选参数组合之间的竞赛。SH是一个迭代选择过程,

  • 在第一次迭代中,用少量资源评估所有候选(参数组合)。

  • 在下一次迭代中选择其中的一些候选项,分配更多的资源给予这些候选。

在对于参数调整,资源通常是训练样本的数量,但也可以是任意的数值参数,例如随机森林中的n_estimators

02

案例

如下图所示:

此处我们的资源是样本的个数,每次迭代都会为每个候选分配越来越多的资源。其步骤为:

  • 在第一轮,我们有35个候选参数,我们使用20个样本进行训练;然后从35个候选参数中挑选出18个样本进入第二轮;

  • 在第二轮,我们有18个候选参数,我们使用40个样本进行训练;然后从18个候选参数中挑选出9个样本进入第三轮;

  • 依此类推,直到候选参数的个数达到我们的设定则停止。

代 码

1. 数据集生成

from sklearn.experimental import enable_halving_search_cv
from sklearn.model_selection import HalvingGridSearchCV
from sklearn.model_selection import HalvingRandomSearchCV
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
import pandas as pdX, y = make_classification(n_samples=1000, random_state=0)

2. HalvingGridSearchCV

param_grid = {'max_depth': [3,5,7,10],'min_samples_leaf': [2,5,7,10]}
base_estimator = RandomForestClassifier(random_state=0)
sh = HalvingGridSearchCV(base_estimator, param_grid, cv=5,factor=2, resource='n_estimators',min_resources =10, max_resources=3000).fit(X, y)
  • 输出模型的最好结参数

# 输出模型的最好的参数
sh.best_estimator_
RandomForestClassifier(max_depth=7, min_samples_leaf=7, n_estimators=160,random_state=0)
  • 模型的交叉结果

sh.cv_results_
{'iter': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,1, 1, 2, 2, 2, 2, 3, 3, 4]),'n_resources': array([ 10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,10,  10,  10,  20,  20,  20,  20,  20,  20,  20,  20,  40,  40,40,  40,  80,  80, 160]),'mean_fit_time': array([0.01928229, 0.01584716, 0.015414  , 0.01495667, 0.01724477,0.01833501, 0.01802239, 0.0175746 , 0.01825719, 0.01801496,0.01770639, 0.01858926, 0.01929336, 0.01819983, 0.01763158,0.01695471, 0.03814454, 0.03725901, 0.03484864, 0.03506536,0.03535094, 0.03335671, 0.03274951, 0.03632708, 0.06523113,0.0686976 , 0.06733208, 0.06619411, 0.13683538, 0.13806734,0.27292347]),
......'mean_score_time': array([0.00161152, 0.0014842 , 0.00139074, 0.00130529, 0.00133247,0.00145178, 0.00153761, 0.00143166, 0.00140243, 0.00151205,0.00139952, 0.00150151, 0.0014555 , 0.00144758, 0.0014502 ,0.00136704, 0.00250249, 0.00238037, 0.00228252, 0.00222058,0.00220017, 0.00222421, 0.00221481, 0.00224967, 0.00379901,0.00384221, 0.00396533, 0.00388794, 0.00718961, 0.00746694,0.01394658]),
......

适用问题

Successive Halving适用于目前所有模型的参数的调节,关于此处我个人有一些小小的建议:

  1. 当数据量不大的时候,考虑直接将resource设置为n_estimators

  2. 当数据量很大的时候,考虑将resource设置为n_samples,但min_resources不建议太小;

  3. 当数据量很大的时候,先对数据进行采样(不建议采样量太小),然后将resource设置为n_estimators

最后我们固定住其它参数再寻找最优的n_estimators值,效果会更好些。

参考文献

  1. Tuning the hyper-parameters of an estimator

  2. Non-stochastic Best Arm Identification and Hyperparameter Optimization

  3. sklearn.model_selection.HalvingGridSearchCV

  4. search_successive_halving代码

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

【数据竞赛】大规模数据调参用这个包就可以啦。相关推荐

  1. 天下数据浅谈大数据和大规模数据的区别

    现在,大数据和云计算一样,都是时代的话题,本文介绍的是大数据和大规模数据的区别.大数据和大规模数据有区别吗,答案是肯定的,它们的区别主要包括以下两点: 区别一.大数据的规模一定要大,而且比大规模数据的 ...

  2. R语言train函数调参(caret包)

    文章目录 一.步骤 二.演示 一.步骤 (1)确定最优参数的大致范围(粗调).train函数中的方法刚一开始都有默认的参数,由于我们也都不知道最优的参数是什么,所以可以先直接使用默认的参数进行调参. ...

  3. 数据标注、模型调参debug...通通自动化!华为云AI开发集大成之作ModelArts 2.0发布...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 福音.AI开发门槛现在更低. 不用你编码,甚至无需AI开发经验. 如今你所需所做:只需标注一小部分数据,然后它就会帮你标注剩下数据,并且自 ...

  4. pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT

    文章标题:RoBERTa: A Robustly Optimized BERT Pretraining Approach 文章作者:Yinhan Liu, Myle Ott, Naman Goyal, ...

  5. 重磅!大数据知识总结和调参技巧开放下载了

    大数据被誉为"新石油",如何管理并洞悉数据的价值,是企业未来发展的核心竞争力.进入大数据时代,数据规模与日俱增.另一方面,数据仓库的市场份额被其他技术蚕食,比如大数据.机器学习和人 ...

  6. 数据竞赛专题 | 数据探索-从数据中发现隐藏价值

    为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.DataFountain 和 Datawhale 联合邀请了数据挖掘,CV,NLP领域多位竞赛大咖,将从赛题理解.数据探索 ...

  7. 【Yolact训练自己的数据从实战到调参】

    100%完美运行,期间踩过许多坑,数据集的坑.代码的坑都有.现在做一下总结,也希望后来者能快速上手,避免浪费不必要的时间. 文章目录 一.训练自己的数据与预测 1.训练自己的数据train.py 1. ...

  8. Yolo v5 训练自己的数据从训练到调参实战详解

    主要分3章,第一章先跑通模型代码,熟悉yolo v5的输入和输出:第二章训练自己的数据:第三章讲解模型参数部分 文章目录 一.跑通模型 1.代码下载 2.环境配置 3.参数路径调整 3.运行detec ...

  9. 【数据竞赛】数据竞赛中最贵的四个特征

    作者:杰少 四大量化强特 简介 本文介绍四个在量化问题中非常重要的特征,对量化有兴趣的朋友可以参考学习,此处的资料主要来源于Optiver团队在Kaggle赛事中的分享. 四大量化强特 01 bid/ ...

最新文章

  1. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案
  2. 网站描述怎么写?对网站优化有什么作用?
  3. 开源项目 eRedG4_V1.03.1发布
  4. java异常_Java的异常体系
  5. C++实现深度优先搜索DFS(附完整源码)
  6. HTML <div> 标签介绍
  7. Spring MVC 学习笔记 json格式的输入和输出
  8. 图文详解cacti的安装和使用
  9. python开发讲解_Python开发系列课程(1) - 初识Python详解
  10. dw网页设计作品_UI设计需要学习哪些软件 如何成为高薪UI设计师
  11. ubuntu在xampp下安装memcache扩展
  12. 安卓编译安装python_安卓源码编译环境搭建
  13. Python+OpenCV:基于分水岭算法的图像分割(Image Segmentation with Watershed Algorithm)
  14. CSS3 blur滤镜实现
  15. 两种方法,给你的Safari浏览器添加必应/有道/谷歌网页即时翻译插件
  16. Caffe模型详细介绍
  17. 乘法计算机公式,Excel表格乘法函数公式
  18. 老人与老浏览器-李开复与成熟度最高的VRML浏览器SGI Cosmo
  19. 如何控制局域网网速_水星无线路由器怎么设置网速限制【设置方法】
  20. <C++>初识多态,剖析virtual关键字

热门文章

  1. JS高级部分(个人认为)
  2. 20170728xlVBA改转置一例
  3. 最大化平均值 (二分搜索法)
  4. BZOJ 3106 棋盘游戏
  5. 在Windows下基于libx264.a的Qt 4.8.2视频压缩
  6. mysql从零开始自增id_MySQL从零开始 7-表约束之主键,自增长,唯一键
  7. python爬虫scrapy步骤mac系统_python scrapy简单爬虫记录(实现简单爬取知乎)
  8. 转载:socket通信基础
  9. hive查看数据库里库的信息_hive 查看当前数据库
  10. windows命令行安装python3_Python3---windows安装与运行