前言
Hyperopt是Python語言中一個為算法超參數空間探索和優化的庫,可以結合MongoDB可以進行分佈式調參,快速找到相對較優的參數。
安裝的時候需要指定dev版本才能使用模擬退火調參,也支持暴力調參、隨機調參等策略。實際使用效果比較優,可以在平常小數據集測試上使用。
功能簡述
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函數的第一個參數是標籤,每個超參數在參數空間內必須具有獨一無二的標籤。
安裝指南
1.pip 安裝
2.額外安裝
a.分佈式調參
https://github.com/hyperopt/hyperopt/wiki/Installation-Notes
(需要安裝MongoDB才能使用全部功能,詳情見Reference)
b.安裝hyperopt-sklearn(更好配合sklearn使用)
Api簡單介紹
1.可用算法
hyperopt.rand.suggest
hyperopt.anneal.suggest
hyperopt.tpe.suggest
2.探索空間
label : 選擇對應的特徵維度。
hp.choice(label, options)
return:從options隨機選擇的元素。options可輸入一個列表或元組,供random.choice使用,e.g:hp.choice(label,range(1,10,1))
hp.randint(label,upper)
return:範圍[0,upper]中的隨機整數。upper可輸入一個int
hp.uniform(label, low, high)
return:一個值之間均勻low和high,輸出為float
hp.quniform(label, low, high, q)
return:round(uniform(low,high)/q)*q的值
hp.loguniform(label, low, high)
return:exp(uniform(low,high))繪製的值,使得返回值的對數均勻分佈,當優化時,該變量被限制在[exp(low),exp(high)]
hp.qloguniform(label, low, high, q)
hp.normal(label, mu, sigma)
return:正態分佈的平均值和標準差σ的實數值。優化時,這是一個無約束的變量
hp.qnormal(label, mu, sigma, q)
hp.lognormal(label, mu, sigma)
hp.qlognormal(label, mu, sigma, q)