简化hyperopt参数空间配置

hyperopt(https://github.com/hyperopt/hyperopt)是一个用Python编写的分布式异步的超参优化工具。

本文代码地址:https://github.com/TQCAI/hyperopt-simple-cfg


令人抓狂的配置

如果用hyperopt搜索一些算法的超参空间,会发现很难写配置。以svm为例,kernel可以取linear,rbf等,不同的核函数又对应不同的参数,如rbf需要再配置gamma,而poly更是要配置gamma,coef0,degree三个参数。gamma参数又可以是auto或者程序员指定的数值。是不是脑壳痛?
图1: svm参数间的依赖关系
脑壳痛不要紧,代码慢慢编呗。于是笔者依照hyperopt的文档写出了如下的超参空间的配置:

  • svm超参空间配置代码
space = {
   
    'C': hp.uniform('C', 0.001, 1000),
    'shrinking': hp.choice('shrinking', [True, False]),
    'kernel': hp.choice('kernel', [
        {
   
            'name': 'rbf',
            'gamma': hp.choice('rbf_gamma', ['auto', hp.uniform('rbf_gamma_uniform',0.0001, 8)])
        },
        {
   
            'name': 'linear',
        },
        {
   
            'name': 'sigmoid',
            'gamma': hp.choice('sigmoid_gamma', ['auto', hp.uniform('sigmoid_gamma_uniform',0.0001, 8)]),
            'coef0': hp.uniform('sigmoid_coef0', 0, 10)
        },
        {
   
            'name': 'poly',
            'gamma': hp.choice('poly_gamma', ['auto', hp.uniform('poly_gamma_uniform',0.0001, 8)]),
            'coef0': hp.uniform('poly_coef0', 0, 10),
            'degree': hp.uniformint('poly_degree', 1, 5),
        }
    ])
}

主要费劲的地方有两个。

  1. hyperopt的超参需要申明label,并且label相当于是超参的变量名,是不可以重复的。所以笔者要费劲地给不同核函数参数的gamma变量命名。想什么rbf_gamma啦,sigmoid_gamma啦,真是令人头秃。
  2. 第二就是在写优化目标函数的时候,需要程序员硬编码一下。如下:
  • svm目标函数代码
def svm_from_cfg(cf
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值