1.搜索空間
下面介紹常用的參數(shù)表達(dá)式
1.hp.choice(label, options)
label 表示參數(shù)名稱 options可以使嵌套也可以是列表
2.hp.randint(label, upper)
返回 [0, upper) 范圍內(nèi)的隨機(jī)整數(shù)
3.hp.uniform(label, low, high)
返回low和high之間的一個(gè)均勻分布數(shù)字
4.hp.quniform(label, low, high, q)
返回 round(uniform(low,high)/q)*q扑媚,適用于那些離散的取值
簡(jiǎn)單的理解為取 [low, high] 中能被q整除的整數(shù)
5.hp.pchoice(label, options)
根據(jù)概率返回相應(yīng)值
options: [(probability, value), (probability, value)]
6.hp.normal(label, mu, sigma)
返回一個(gè)正態(tài)分布的實(shí)值,均值為mu和標(biāo)準(zhǔn)差為sigma。優(yōu)化時(shí)播玖,這是一個(gè)無約束變量踏志。
例子
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會(huì)以字典的形式傳入到函數(shù)f齐遵,也就是args = space
# hp.choice 中的label 是在print時(shí)用于方便顯示娩嚼,取什么名稱都可以
space = {
'x': hp.choice('參數(shù)x',[1,2,3,4,5]),
'y': hp.randint('參數(shù)y', 10), # [0,10)
'z': hp.uniform('參數(shù)z', 0, 1), # (0,1) 中任意一個(gè)浮點(diǎn)數(shù)
'k': hp.quniform('參數(shù)k', 5, 10, 3), # 5-10之間能被3整除的數(shù)
'l': hp.pchoice('參數(shù)l', [(0.1, 1), (0.4, 2), (0.5, 3)])
}
best = fmin(f, space, algo=tpe.suggest, max_evals=1000)
print(f'最好的參數(shù)是:{best}')
結(jié)果:
100%|██████████| 1000/1000 [00:39<00:00, 25.02it/s, best loss: 8.00009375742339]
最好的參數(shù)是:{'參數(shù)k': 6.0, '參數(shù)l': 0, '參數(shù)x': 0, '參數(shù)y': 0, '參數(shù)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會(huì)以字典的形式傳入到函數(shù)f爹橱,也就是args = space
# hp.choice 中的label 是在print時(shí)用于方便顯示庶灿,取什么名稱都可以
space = {
'k': hp.quniform('參數(shù)k', 0, 10, 3)
# 取[0,10]能被3整除的數(shù)
# 相當(dāng)于取 0纵搁,3,6往踢,9中任意一個(gè)數(shù)
}
trials = Trials()
best = fmin(f, space, algo=tpe.suggest, max_evals=10,trials=trials)
結(jié)果:
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.搜索函數(shù)
algo指定搜索算法腾誉,目前支持以下算法:
1.隨機(jī)搜索(hyperopt.rand.suggest)
2.模擬退火(hyperopt.anneal.suggest)
3.TPE算法(hyperopt.tpe.suggest,算法全稱為Tree-structured Parzen Estimator Approach)
是用高斯混合模型GMM(Gaussian Mixture Model)來學(xué)習(xí)超參模型的一種方法
這里需要單獨(dú)引用
from hyperopt import anneal, tpe, rand
如果直接使用
import hyperopt
hyperopt.anneal.suggest 則無法使用
3.最小化函數(shù)
fmin(fn, space, algo, max_evals, trials=None)
fn: 目標(biāo)函數(shù)
space: 搜索空間
algo: 優(yōu)化算法
max_evals: 迭代次數(shù)
trials: 捕獲信息
trials.trials - 表示有關(guān)搜索的所有內(nèi)容的詞典列表
trials.results - 搜索結(jié)果列表
trials.losses() - 損失函數(shù)列表
trials.statuses() - 結(jié)果狀態(tài)列表