hyperopt自动调参

在传统机器学习和深度学习领域经常需要调参,调参有些是通过通过对数据和算法的理解进行的,这当然是上上策,但还有相当一部分属于"黑盒"

hyperopt可以帮助我们做很多索然无味的调参工作

示例

直接看代码以及注释比较直接,下面通过一个随机森林可以感受一下:

# coding=utf-8

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import cross_val_score
from sklearn.preprocessing import scale, normalize
from hyperopt import hp, STATUS_OK, Trials, fmin, tpe iris = datasets.load_iris()
X = iris.data
y = iris.target def hyperopt_train_test(params):
X_ = X[:]
# 这里可以自定义一些操作
if params['normalize']:
X_ = normalize(X_)
if params['scale']:
X_ = scale(X_) del params['normalize']
del params['scale'] clf = RandomForestClassifier(**params)
# 交叉验证
return cross_val_score(clf, X, y, cv=10).mean() space_rf = {
'max_depth': hp.choice('max_depth', range(1, 20)),
'max_features': hp.choice('max_features', range(1, 5)),
'n_estimators': hp.choice('n_estimators', range(1, 20)),
'criterion': hp.choice('criterion', ["gini", "entropy"]),
'scale': hp.choice('scale', [True, False]),
'normalize': hp.choice('normalize', [True, False])
} # 待优化目标函数
def f(params):
acc = hyperopt_train_test(params)
return {'loss': -acc, 'status': STATUS_OK} trials = Trials()
best = fmin(f, # 待最小化函数
space=space_rf, # 参数所搜索空间
algo=tpe.suggest, # 算法选择,这里选择了TPE,也可以用rand.suggest等
max_evals=50, #  迭代次数
trials=trials, # 可以用trials数组记录中间结果
) # best是loss最小的参数组合
# 对于离散值,如criterion,会返回选择的元素索引
print(best)
loss = []
for trial in trials.results:
loss.append(trial['loss'])
print(min(loss))

运行输出

{'normalize': 1, 'scale': 0, 'n_estimators': 14, 'criterion': 1, 'max_features': 1, 'max_depth': 11}
-0.973333333333

小结

hyperopt还有很多高阶用法,如借助mongo并行化,但基本的使用架构上面的demo应该已经很好的体现了

超参调优是一个很大的问题,很多启发式算法会被采用,如数学建模中的一些优化算法

hyperopt自动调参的更多相关文章

  1. 自动调参库hyperopt+lightgbm 调参demo

    在此之前,调参要么网格调参,要么随机调参,要么肉眼调参.虽然调参到一定程度,进步有限,但仍然很耗精力. 自动调参库hyperopt可用tpe算法自动调参,实测强于随机调参. hyperopt 需要自己 ...

  2. sklearn学习8-----GridSearchCV(自动调参)

    一.GridSearchCV介绍: 自动调参,适合小数据集.相当于写一堆循环,自己设定参数列表,一个一个试,找到最合适的参数.数据量大可以使用快速调优的方法-----坐标下降[贪心,拿当前对模型影响最 ...

  3. Auto ML自动调参

    Auto ML自动调参 本文介绍Auto ML自动调参的算法介绍及操作流程. 操作步骤 登录PAI控制台. 单击左侧导航栏的实验并选择某个实验. 本文以雾霾天气预测实验为例. 在实验画布区,单击左上角 ...

  4. 服务器创建tensorflow环境,nni自动调参记录

    一.anaconda安装记录 1.1 下载安装脚本:wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh 1.2 ...

  5. [调参]CV炼丹技巧/经验

    转自:https://www.zhihu.com/question/25097993 我和@杨军类似, 也是半路出家. 现在的工作内容主要就是使用CNN做CV任务. 干调参这种活也有两年时间了. 我的 ...

  6. Deep learning网络调参技巧

    参数初始化 下面几种方式,随便选一个,结果基本都差不多.但是一定要做.否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题.n_in为网络的输入大小,n_out为网络的输出大小,n为n_i ...

  7. 多轴APM飞控调参

    调参步骤: 遥控器,电动机和电调对应的APM飞控连线——遥控器校准——电调行程校准——加速度计校准——磁罗盘校准——故障保护设定(遥控器和飞控)——飞行模式设定并调整——自动调参设定选项 APM飞控调 ...

  8. 机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明

    GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果.这个时候就是需要动脑筋了.数据量比较大 ...

  9. 【新人赛】阿里云恶意程序检测 -- 实践记录10.27 - TF-IDF模型调参 / 数据可视化

    TF-IDF模型调参 1. 调TfidfVectorizer的参数 ngram_range, min_df, max_df: 上一篇博客调了ngram_range这个参数,得出了ngram_range ...

随机推荐

  1. 获取spring的IOC核心容器,并根据id获取对象

    public class Client { /** * 获取spring的IOC核心容器,并根据id获取对象 * ApplicationContext的三个常用实现类 * classPathXmlAp ...

  2. Windows10配置JDK环境变量

    一. 系统和JDK版本 系统:Windows10 JDK版本:1.8 二. 配置步骤 1. 右键单击“我的电脑” >> 属性 >> 高级系统设置 2. 环境变量 3. 系统变量 ...

  3. 分布式系列十三: nginx

    nginx偏运维, 不过作为开发应该了解它能做什么事情, 其作为技术架构的一部分必不可少 正向代理和反向代理 正向代理是代理的客户端, 反向代理是代理的服务端. nginx就是一款可以作反向代理的we ...

  4. 只要三步,使用html5+js实现像素风头像生成器

    只要三步,使用html5+js实现像素风头像生成器 html5的画布给我们带来了很大的空间,其实像素风格头像生成器只是用到了画方块的方法.画一个像素头像,只要三步,1.解决像素点,2.解决像素点之间的 ...

  5. application.properties 文件和 application.yml 文件的区别

    yml文件的好处,天然的树状结构,方便查看,最终会转成application.properties 注意点: 1,原有的key,例如spring.jpa.properties.hibernate.di ...

  6. JAVA实例

     JAVA实例1  1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...

  7. QT学习之解决QT中QIcon图标不显示的问题

    第一种:图标存放目录问题 :/文件夹名称/文件名 如:文件夹为:/img   文件名为:a.png 路径:     :/img/a.png 这里注意前面的":". 第二种:编译生成 ...

  8. swoole异步群发模板消息

    1.用的是TP5.1的框架,swoole分成一个客户端发送接收消息,一个服务器负责处理信息 服务端代码,服务器要先安装swoole拓展,用 php server.php 启动进程监听 <?php ...

  9. 出错:Failed to convert property value of type 'org.apache.ibatis.session.defaults.DefaultSqlSessionFactory' to required type 'java.lang.String' for property 'sqlSessionFactoryBeanName';

    出错的详细信息: 3 ERROR [http-nio-80-exec-3] org.springframework.web.servlet.DispatcherServlet - Context in ...

  10. 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)

    论文原址:https://arxiv.org/pdf/1808.01244.pdf github:https://github.com/princeton-vl/CornerNet 摘要 本文提出了目 ...