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

scikit-learn中GaussianProcessRegressor固定核参数无法复现结果

问题根源分析及解决方法

你遇到的结果差异核心原因有两个,按优先级排序:

1. 训练数据集完全不一致

原模型训练时用的是6个带噪声的采样样本:

gaussian_process.fit(X_train, y_train_noisy)

而固定参数后的模型错误地使用了全量无噪声的真实数据训练:

gaussian_process_fixed.fit(X,y)

这直接导致两个模型的拟合目标完全不同——原模型是拟合少量带噪声的观测值,而固定参数模型是拟合完整的真实函数,结果自然天差地别。

2. 核参数的精度损失

你手动截取的参数和实际优化值存在微小偏差:

  • 实际k1__constant_value为18.30421069841903,你用了18.30
  • 实际k2__length_scale为1.1043558649730463,你用了1.1043
    虽然偏差很小,但高斯过程对核参数的变化可能比较敏感,尤其是当训练数据量很小时(比如这里只有6个样本),微小的参数差异也可能放大预测结果的不同。

修正后的代码

将固定参数模型的训练数据改为和原模型一致的X_train和y_train_noisy,同时保留完整的参数精度:

# 使用完整的优化后参数
kernel_fixed = ConstantKernel(constant_value=18.30421069841903, constant_value_bounds='fixed') * \
               RBF(length_scale=1.1043558649730463, length_scale_bounds='fixed') 
gaussian_process_fixed = GaussianProcessRegressor(kernel=kernel_fixed, alpha=noise_std**2, n_restarts_optimizer=9)
# 用相同的训练数据拟合
gaussian_process_fixed.fit(X_train, y_train_noisy)

mean_prediction, std_prediction = gaussian_process_fixed.predict(X, return_std=True)

# 绘图代码和原模型一致
plt.plot(X, y, label=r"$f(x) = x \sin(x)$", linestyle="dotted")
plt.errorbar(
    X_train,
    y_train_noisy,
    noise_std,
    linestyle="None",
    color="tab:blue",
    marker=".",
    markersize=10,
    label="Observations",
)
plt.plot(X, mean_prediction, label="Mean prediction")
plt.fill_between(
    X.ravel(),
    mean_prediction - 1.96 * std_prediction,
    mean_prediction + 1.96 * std_prediction,
    color="tab:orange",
    alpha=0.5,
    label=r"95% confidence interval",
)
plt.legend()
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
_ = plt.title("Gaussian process regression with fixed optimized kernel parameters")

这样修改后,固定参数模型的预测结果会和原模型几乎完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:30:02