快速入门#
本教程将指导您运行第一个 OpenBox 程序。
空间定义#
首先,定义一个搜索空间。
from openbox import space as sp
# Define Search Space
space = sp.Space()
x1 = sp.Real("x1", -5, 10, default_value=0)
x2 = sp.Real("x2", 0, 15, default_value=0)
space.add_variables([x1, x2])
在这个例子中,我们创建了一个空的搜索空间,而后向它内部添加了两个实数型(浮点型)变量。
第一个变量 x1
的取值范围是-5到10,第二个变量 x2
的取值范围是0到15。
OpenBox也支持其它类型的变量。 下面是定义整型和类别型变量的方法:
from openbox import space as sp
i = sp.Int("i", 0, 100)
kernel = sp.Categorical("kernel", ["rbf", "poly", "sigmoid"], default_value="rbf")
对于更高级的用法,请参考 复杂搜索空间的问题定义。
OpenBox的搜索空间基于ConfigSpace包实现。 您也可以参考 ConfigSpace 官方文档 。
定义优化目标#
第二步,定义要优化的目标函数。 注意, OpenBox 默认 最小化 目标函数。 这里我们提供了 Branin 函数的例子。
import numpy as np
# Define Objective Function
def branin(config):
x1, x2 = config['x1'], config['x2']
y = (x2-5.1/(4*np.pi**2)*x1**2+5/np.pi*x1-6)**2+10*(1-1/(8*np.pi))*np.cos(x1)+10
return {'objectives': [y]}
目标函数的输入是一个从搜索空间采样的配置点,输出为目标值。
优化#
在定义了搜索空间和目标函数后,我们可以运行优化过程:
from openbox import Optimizer
# Run
opt = Optimizer(
branin,
space,
max_runs=50,
surrogate_type='gp', # try using 'auto'!
task_id='quick_start',
# Have a try on the new HTML visualization feature!
# visualization='advanced', # or 'basic'. For 'advanced', run 'pip install "openbox[extra]"' first
# auto_open_html=True, # open the visualization page in your browser automatically
)
history = opt.run()
这里我们创建了一个 Optimizer
实例,传入目标函数 branin
和搜索空间 space
。
其余参数的含义是:
num_objectives=1
和num_constraints=0
表明我们的 branin 函数返回一个没有约束条件的单目标值。max_runs=50
表示优化过程共50轮 (优化目标函数50次)。surrogate_type='gp'
: 对于数学问题,我们推荐用高斯过程 ('gp'
) 作为贝叶斯优化的代理模型。 对于实际的问题,例如超参数优化 (HPO),我们推荐用随机森林 ('prf'
)。 设置为'auto'
来启用自动化算法选择。task_id
被用来区别不同优化过程。visualization
:'none'
,'basic'
或'advanced'
。 详见 可视化网页。auto_open_html
: 是否自动在浏览器中打开可视化网页。 详见 可视化网页。
接下来,调用 opt.run()
启动优化过程。
可视化#
在优化完成后, opt.run()
返回优化的历史信息。
可以通过调用 print(history)
来看结果:
print(history)
+-------------------------+-------------------+
| Parameters | Optimal Value |
+-------------------------+-------------------+
| x1 | -3.138277 |
| x2 | 12.254526 |
+-------------------------+-------------------+
| Optimal Objective Value | 0.398096578033325 |
+-------------------------+-------------------+
| Num Configs | 50 |
+-------------------------+-------------------+
调用 history.plot_convergence()
来可视化优化过程:
import matplotlib.pyplot as plt
history.plot_convergence(true_minimum=0.397887)
plt.show()
调用 print(history.get_importance())
来输出参数的重要性:
(注意:使用该功能需要额外安装pyrfr
包:Pyrfr安装教程
print(history.get_importance())
+------------+------------+
| Parameters | Importance |
+------------+------------+
| x1 | 0.488244 |
| x2 | 0.327570 |
+------------+------------+
(新功能!)
调用 history.visualize_html()
来显示可视化网页。
对于 show_importance
和 verify_surrogate
,需要先运行 pip install "openbox[extra]"
。
详细说明请参考 可视化网页。
history.visualize_html(open_html=True, show_importance=True,
verify_surrogate=True, optimizer=opt)