hyperopt 笔记

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() - 结果状态列表

你可能感兴趣的:(hyperopt 笔记)