利用与探索

[1]:


import numpy as np import matplotlib.pyplot as plt from bayes_opt import BayesianOptimization from bayes_opt import acquisition

目标函数

[2]:
np.random.seed(42)
xs = np.linspace(-2, 10, 10000)

def f(x):
    return np.exp(-(x - 2) ** 2) + np.exp(-(x - 6) ** 2 / 10) + 1/ (x ** 2 + 1)

plt.plot(xs, f(xs))
plt.show()
_images/exploitation_vs_exploration_3_0.png

绘图实用函数

[3]:
def plot_bo(f, bo):
    x = np.linspace(-2, 10, 10000)
    mean, sigma = bo._gp.predict(x.reshape(-1, 1), return_std=True)

    plt.figure(figsize=(16, 9))
    plt.plot(x, f(x))
    plt.plot(x, mean)
    plt.fill_between(x, mean + sigma, mean - sigma, alpha=0.1)
    plt.scatter(bo.space.params.flatten(), bo.space.target, c="red", s=50, zorder=10)
    plt.show()

获取函数“上置信界”

偏好利用 (kappa=0.1)

请注意,大多数点都集中在峰值附近。

[4]:
acquisition_function = acquisition.UpperConfidenceBound(kappa=0.1)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_8_0.png

偏好探索 (kappa=10)

请注意,这些点在整个范围内分布得更广。

[5]:
acquisition_function = acquisition.UpperConfidenceBound(kappa=10.)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_10_0.png

获取函数“期望改进”

偏好利用 (xi=0.0)

请注意,大多数点都集中在峰值附近。

[6]:
acquisition_function = acquisition.ExpectedImprovement(xi=0.0)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_13_0.png

偏好探索 (xi=0.1)

请注意,这些点在整个范围内分布得更广。

[7]:
acquisition_function = acquisition.ExpectedImprovement(xi=0.1)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_15_0.png

获取函数“改进概率”

优先利用 (xi=1e-4)

请注意,大多数点都集中在峰值附近。

[8]:
acquisition_function = acquisition.ProbabilityOfImprovement(xi=1e-4)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_18_0.png

优先探索 (xi=0.1)

请注意,这些点在整个范围内分布得更广。

[9]:
acquisition_function = acquisition.ProbabilityOfImprovement(xi=0.1)

bo = BayesianOptimization(
    f=f,
    acquisition_function=acquisition_function,
    pbounds={"x": (-2, 10)},
    verbose=0,
    random_state=987234,
)

bo.maximize(n_iter=10)

plot_bo(f, bo)
_images/exploitation_vs_exploration_20_0.png
[ ]: