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() - 结果状态列表
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容