You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于skopt.gp_minimize处理含未知方差噪声数据集返回最小值的疑问

skopt.gp_minimize 噪声数据集下的最优值返回逻辑

默认返回结果

默认情况下,gp_minimize返回的是所有已评估过的数据样本中目标值最小的那个对应的x值,而非代理函数(高斯过程模型)的最小值。

这是因为贝叶斯优化的核心是通过代理函数引导采样,但最终目标是找到能得到真实最小目标值的点——噪声场景下,代理函数的最小值是模型拟合后的平滑估计,而样本点的目标值是真实评估的结果,因此默认返回已评估样本里的最优解。

如何指定返回代理函数的最小值

可以手动基于优化后的高斯过程模型来寻找代理函数的最小值,步骤如下:

  1. 从优化结果的搜索空间中生成大量候选点;
  2. 用训练好的代理模型(res.models[-1])预测这些候选点的均值(代理函数的输出);
  3. 找到预测均值最小的候选点,即为代理函数的最小值对应的x。

示例代码:

from skopt import gp_minimize
from skopt.space import Real
import numpy as np

# 带噪声的目标函数
def noisy_objective(x):
    return x[0] ** 2 + np.random.normal(0, 0.1)

# 执行贝叶斯优化
result = gp_minimize(noisy_objective, [Real(-2, 2)], n_calls=20)

# 默认返回的是已评估样本中的最优x
print("默认样本最优x:", result.x)
print("样本对应目标值:", result.fun)

# 获取代理函数的最小值
# 生成搜索空间内的大量候选点
candidate_points = result.space.rvs(n_samples=10000)
# 预测代理函数的均值
predicted_means = result.models[-1].predict(candidate_points)
# 找到均值最小的点
proxy_best_idx = np.argmin(predicted_means)
proxy_best_x = candidate_points[proxy_best_idx]
proxy_best_mean = predicted_means[proxy_best_idx]

print("代理函数最优x:", proxy_best_x)
print("代理函数预测均值:", proxy_best_mean)

需要注意的是,代理函数的最小值是模型对潜在最优解的估计,并没有经过真实目标函数的评估,因此实际使用时需要根据需求选择:如果需要真实评估过的最优结果,用默认返回;如果需要模型拟合后的平滑最优估计,用上述方法手动计算。

内容的提问来源于stack exchange,提问作者Jakob Sejten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:40:25