AutoML 系列 - Hyperopt的介绍及使用

本文主要对 Hyperopt 和 Hyperopt-Sklearn 进行介绍

Hyperopt 为一个超参数优化的库,主要使用的是SMBO ( Sequential model-based optimization )系列算法,包括:random search, Tree-of-Parzen-Estimators (TPE) 等。

对于自动超参数优化系统来说,重要的就是给出 objective function 和 configuration space。

下面给出一个具体例子

from hyperopt import hp, fmin, rand

# objective function
def func(args):
	x, y = args
	return x**2 + y**2

# search / configuration space
# x 01区间均匀分布 y 均值0标准差1
space = [hp.uniform('x', 0, 1), hp.normal('y', 0, 1)]

# 优化
# 可以设置误差允许范围 优化时间 优化轮次等参数
best = fmin(q, space, algo=rand.suggest, loss_threshold=0.001)

对于 configuration space 的设置,在机器学习中,会出现 类别型变量 的超参数,以及 有的超参数在一定条件下才有效的情况,所以下面介绍一下这些情况怎么处理。

# 以sklearn的SVM为例
space = hp.choice('case', [{'kernel':'rbf', 'gamma': hp.uniform('gamma', 0.1, 10), 'C': hp.uniform('C', 0.1, 10)}, {'kernel':'linear', 'C': hp.uniform('C', 0.1, 10)}])

# 或者
C = hp.uniform('C', 0.1, 10)
space = hp.choice('case', [{'kernel':'rbf', 'gamma': hp.uniform('gamma', 0.1, 10), 'C': C}, {'kernel':'linear', 'C': C}])

有时候我们不只需要优化后的结果与最优解,我们同时需要知道寻找到最优解的过程,这时候只有fmin无法达到目标,于是引入了Trials类。

from hyperopt import hp, fmin, rand, Trials

def func(args):
	x, y = args
	return x**2 + y**2
space = [hp.uniform('x', 0, 1), hp.normal('y', 0, 1)]
trials = Trials()
best = fmin(q, space, algo=rand.suggest, loss_threshold=0.001, trials=trials)
# 优化过程信息
trials.trials

参考资料:《Hyperopt: A Python Library for Optimizing the Hyperparameters of Machine Learning Algorithms》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值