向AI转型的程序员都关注了这个号👇👇👇
大数据挖掘DT数据分析 公众号: datadw
一、安装
pip install hyperopt
二、说明
Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值。用户还要指定空间内参数的分布情况。
Hyheropt四个重要的因素:指定需要最小化的函数,搜索的空间,采样的数据集(trails database)(可选),搜索的算法(可选)。
首先,定义一个目标函数,接受一个变量,计算后返回一个函数的损失值,比如要最小化函数q(x,y) = x**2 + y**2
指定搜索的算法,算法也就是hyperopt的fmin函数的algo参数的取值。当前支持的算法由随机搜索(对应是hyperopt.rand.suggest),模拟退火(对应是hyperopt.anneal.suggest),TPE算法。
关于参数空间的设置,比如优化函数q,输入fmin(q,space=hp.uniform(‘a’,0,1)).hp.uniform函数的第一个参数是标签,每个超参数在参数空间内必须具有独一无二的标签。hp.uniform指定了参数的分布。其他的参数分布比如
hp.choice返回一个选项,选项可以是list或者tuple.options可以是嵌套的表达式,用于组成条件参数。
hp.pchoice(label,p_options)以一定的概率返回一个p_options的一个选项。这个选项使得函数在搜索过程中对每个选项的可能性不均匀。
hp.uniform(label,low,high)参数在low和high之间均匀分布。
hp.quniform(label,low,high,q),参数的取值是
round(uniform(low,high)/q)*q,适用于那些离散的取值。
hp.loguniform(label,low,high)绘制exp(uniform(low,high)),变量的取值范围是[exp(low),exp(high)]
hp.randint(label,upper) 返回一个在[0,upper)前闭后开的区间内的随机整数。
搜索空间可以含有list和dictionary.
from hyperopt import hp list_space = [ hp.uniform(’a’, 0, 1), hp.loguniform(’b’, 0, 1)] tuple_space = ( hp.uniform(’a’, 0, 1), hp.loguniform(’b’, 0, 1)) dict_space = { ’a’: hp.uniform(’a’, 0, 1), ’b’: hp.loguniform(’b’, 0, 1)}
三、简单例子
from hyperopt import hp,fmin, rand, tpe, space_eval
def q (args) :
x, y = args
return x**2-2*x+1 + y**2
space = [hp.randint('x', 5), hp.randint('y', 5)]
best = fmin(q,space,algo=rand.suggest,max_evals=10)
print(best)
输出:
{'x': 2, 'y': 0}
四、xgboost举例
xgboost具有很多的参数,把xgboost的代码写成一个函数,然后传入fmin中进行参数优化,将交叉验证的auc作为优化目标。auc越大越好,由于fmin是求最小值,因此求-auc的最小值。所用的数据集是202列的数据集,第一列样本id,最后一列是label,中间200列是属性。
详细参考:http://blog.csdn.net/qq_34139222/article/details/60322995
人工智能大数据与深度学习
搜索添加微信公众号:datayx
长按图片,识别二维码,点关注
大数据挖掘DT数据分析
搜索添加微信公众号:datadw
教你机器学习,教你数据挖掘
长按图片,识别二维码,点关注