超参优化工具
超参优化工具库
Skopt:包括随机搜索、贝叶斯搜索、决策森林和梯度提升树。在小型搜索空间和良好的初始估计下效果最好。
Hyperopt:对具有一定条件或约束的搜索空间进行调优,其中包括随机搜索和Tree Parzen Estimators等算法。用于模型选择和优化的函数库分别建立在scikit-learn和keras的基础上。
Simple(x):超参数优化库,可作为贝叶斯优化的替代方法。Simple(x)和贝叶斯搜索一样,试图以尽可能少的样本进行优化,但也将计算复杂度从n³降低到log(n),这对大型搜索空间非常有用。
Ray.tune:主要适用于深度学习和强化学习模型。如Hyperband算法、基于群体的训练算法、Hyperopt方法和中值停止规则。
Chocolate:分布式超参数优化库,支持网格搜索、随机搜索、准随机搜索、贝叶斯搜索和自适应协方差矩阵进化策略。
GpFlowOpt:基于GpFlow库的高斯过程优化器,可使用TensorFlow在GPU上运行高斯过程任务。
FAR-HO:包含TensorFlow的一系列基于梯度的优化器,Reverse-HG和Forward-HG。
Xcessiv:包括一个贝叶斯搜索参数优化器,这个优化器支持高级别并行计算,支持与TPOT库的集成。
HORD:适用于极高维数据分析。
ENAS-pytorch:可在pytorch中实现高效的深度学习结构搜索,使用参数共享来构建更高效的网络,使其适用于深度学习结构搜索。
优化工具 Hyperopt
Hyperopt是一个sklearn的Python库,在搜索空间上进行串行和并行优化,搜索空间可以是实值,离散和条件维度。
支持跨多台机器的并行化,并使用 MongoDb 作为存储超参数组合结果的中心数据库。
优化库基于 hyperopt-sklearn 和 hyperas, 这两个用于模型选择和优化的函数库分别建立在scikit-learn和keras的基础上。
使用方法及配置
# 定义目标函数
def objective(args):
case, val = args
if case == 'case 1':
return val
else:
return val ** 2
# 定义搜索空间
from hyperopt import hp
space = hp.choice(
'a',
[
('case 1', 1 + hp.lognormal('c1', 0, 1)),
('case 2', hp.uniform('c2', -10, 10))
]
)
# 取得最优参数
from hyperopt import fmin, tpe
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)搜索空间定义
源码请参考git地址。
from hyperopt import hp
space = hp.choice(
'a',
[
('case 1', 1 + hp.lognormal('c1', 0, 1)),
('case 2', hp.uniform('c2', -10, 10))
]
)参数说明:
'a' - 可选类别
'c1' - 'case 1'中正参数
'c2' - 'case 2'中给定边界的实值参数
基于scikit-learn的搜索空间实例
from hyperopt import hp
space = hp.choice(
'classifier_type',
[
{'type': 'naive_bayes'},
{
'type': 'svm',
'C': hp.lognormal('svm_C', 0, 1),
'kernel': hp.choice('svm_kernel', [
{'ktype': 'linear'},
{'ktype': 'RBF', 'width': hp.lognormal('svm_rbf_width', 0, 1)}])
},
{
'type': 'dtree',
'criterion': hp.choice('dtree_criterion', ['gini', 'entropy']),
'max_depth': hp.choice('dtree_max_depth',[None, hp.qlognormal('dtree_max_depth_int', 3, 1, 1)]),
'min_samples_split': hp.qlognormal('dtree_min_samples_split', 2, 1, 1)
},
]
)