1.搜索空间
下面介绍常用的参数表达式
1.hp.choice(label, options)
label 表示参数名称 options可以使嵌套也可以是列表
2.hp.randint(label, upper)
返回 [0, upper) 范围内的随机整数
3.hp.uniform(label, low, high)
返回low和high之间的一个均匀分布数字
4.hp.quniform(label, low, high, q)
返回 round(uniform(low,high)/q)*q,适用于那些离散的取值
简单的理解为取 [low, high] 中能被q整除的整数
5.hp.pchoice(label, options)
根据概率返回相应值
options: [(probability, value), (probability, value)]
6.hp.normal(label, mu, sigma)
返回一个正态分布的实值,均值为mu和标准差为sigma。优化时,这是一个无约束变量。
例子
from hyperopt import hp
from hyperopt import fmin, tpe, space_eval
def f(args):
x = args['x']
y = args['y']
z = args['z']
k = args['k']
l = args['l']
return x + y + z + k + l
# 注意space会以字典的形式传入到函数f,也就是args = space
# hp.choice 中的label 是在print时用于方便显示,取什么名称都可以
space = {
'x': hp.choice('参数x',[1,2,3,4,5]),
'y': hp.randint('参数y', 10), # [0,10)
'z': hp.uniform('参数z', 0, 1), # (0,1) 中任意一个浮点数
'k': hp.quniform('参数k', 5, 10, 3), # 5-10之间能被3整除的数
'l': hp.pchoice('参数l', [(0.1, 1), (0.4, 2), (0.5, 3)])
}
best = fmin(f, space, algo=tpe.suggest, max_evals=1000)
print(f'最好的参数是:{best}')
结果:
100%|██████████| 1000/1000 [00:39<00:00, 25.02it/s, best loss: 8.00009375742339]
最好的参数是:{'参数k': 6.0, '参数l': 0, '参数x': 0, '参数y': 0, '参数z': 9.375742338902163e-05}
注意:hp.quniform(label, low, high, q) 理解
from hyperopt import hp
from hyperopt import fmin, tpe, space_eval
def f(args):
k = args['k']
print(k)
return k+1
# 注意space会以字典的形式传入到函数f,也就是args = space
# hp.choice 中的label 是在print时用于方便显示,取什么名称都可以
space = {
'k': hp.quniform('参数k', 0, 10, 3)
# 取[0,10]能被3整除的数
# 相当于取 0,3,6,9中任意一个数
}
trials = Trials()
best = fmin(f, space, algo=tpe.suggest, max_evals=10,trials=trials)
结果:
9.0
3.0
6.0
9.0
0.0
6.0
3.0
3.0
0.0
0.0
100%|██████████| 10/10 [00:00<00:00, 119.31it/s, best loss: 1.0]
2.搜索函数
algo指定搜索算法,目前支持以下算法:
1.随机搜索(hyperopt.rand.suggest)
2.模拟退火(hyperopt.anneal.suggest)
3.TPE算法(hyperopt.tpe.suggest,算法全称为Tree-structured Parzen Estimator Approach)
是用高斯混合模型GMM(Gaussian Mixture Model)来学习超参模型的一种方法
这里需要单独引用
from hyperopt import anneal, tpe, rand
如果直接使用
import hyperopt
hyperopt.anneal.suggest 则无法使用
3.最小化函数
fmin(fn, space, algo, max_evals, trials=None)
fn: 目标函数
space: 搜索空间
algo: 优化算法
max_evals: 迭代次数
trials: 捕获信息
trials.trials - 表示有关搜索的所有内容的词典列表
trials.results - 搜索结果列表
trials.losses() - 损失函数列表
trials.statuses() - 结果状态列表
网友评论