注:转载请注明出处。
本篇文章主要记录了贝叶斯优化算法hyperopt的学习笔记,如果想看自动化调参中的网格调参和遗传优化算法TPOT,请查看我另外两篇文章:网格搜索gridSearchCV和遗传优化算法TPOT。
1、算法思想
贝叶斯优化算法与网格搜索和随机搜索完全不同,会充分利用之前测试点的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数想全局最优提升的参数。
2、具体步骤首先根据先验分布,假设一个搜索函数。
然后每次使用新的测试点来测试目标函数时,利用这个信息来更新目标函数的先验分布。
最后,算法测试由后验分布给出的全局最值可能出现的位置的点。
3、缺陷与弥补缺陷:一旦找到一个局部最优,会在该区域不断地采样,很容易陷入局部最优值。
弥补方式:在探索和利用之间找到一个平衡点。“探索”就是在还未取样的区域获取采样点;利用是在根据后验分布在最可能出现全局最值的区域进行采样。
4、具体实现-python库 hyperopt
1. 功能可以针对某个模型进行调优。
可以同时调整多个模型的超参,并取得全局最优模型。–棒棒棒!!
2. hyperopt 参数简介需导入模块:hyperopt
调用方法和主要参数
1
2
3
4
5
6
7from hyperopt import fmin, tpe, hp
best = fmin(
fn=lambda x: x,
space=hp.uniform('x', 0, 1),
algo=tpe.suggest,
max_evals=100)
print best
fmin:作用就是在有限的迭代次数下,求使目标函数fn取得最小值的超参数(超参数的阈值在space中),在space中搜索超参数的方法使由algo进行指定。
fn :目标函数当不是求最小值时,需要转化为求最小值。
space:超参数的阈值空间。
algo:超参数搜索算法
max_evals: 最大迭代次数
输出历史结果,甚至进行可视化:trails matplotlib.pyplot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15