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

如何使用sklearn设置高斯过程均值函数形式并对比预测误差

在sklearn的GaussianProcessRegressor中设置不同均值函数的方法

嘿,我刚好对sklearn里的高斯过程回归这块比较熟,你问的怎么设置线性/多项式均值函数来对比预测误差的问题,其实GaussianProcessRegressor是支持自定义或预定义均值函数的,normalize_y只是对目标变量做标准化的预处理步骤,和模型的均值函数完全是两回事~下面我给你一步步讲清楚怎么操作:

核心知识点:mean_function参数

sklearn的GaussianProcessRegressor提供了mean_function参数,专门用来指定高斯过程的先验均值函数。这个参数可以接受两种类型的输入:

  • sklearn官方预定义的均值函数类(比如线性、多项式均值,在sklearn.gaussian_process.mean_functions模块下)
  • 自定义的可调用函数(或者继承BaseMeanFunction的自定义类,支持参数学习)

实操代码示例:对比线性与多项式均值的预测误差

我用模拟数据来演示完整流程,你可以直接套用到自己的数据集上:

1. 导入所需模块

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
from sklearn.gaussian_process.mean_functions import LinearMean, PolynomialMean
from sklearn.metrics import mean_squared_error

2. 生成模拟数据

我们造一个包含线性+二次项的带噪声数据,方便后续对比不同均值函数的效果:

np.random.seed(42)  # 固定随机种子保证可复现
X = np.linspace(0, 10, 100).reshape(-1, 1)  # 特征数据,形状(100,1)
y_true = 2 * X + 3 * X**2 + np.random.normal(0, 5, size=X.shape)  # 真实标签

3. 训练带线性均值的GP模型

# 初始化线性均值函数(会自动学习线性系数)
linear_mean = LinearMean()
# 定义核函数(这里用常数核×RBF核,你可以根据需求换其他核)
kernel_linear = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))

# 构建GP回归器
gp_linear = GaussianProcessRegressor(
    kernel=kernel_linear,
    mean_function=linear_mean,
    normalize_y=True,  # 标准化y是预处理,和均值函数不冲突
    random_state=42
)

# 拟合模型并预测
gp_linear.fit(X, y_true)
y_pred_linear = gp_linear.predict(X)
# 计算MSE误差
mse_linear = mean_squared_error(y_true, y_pred_linear)
print(f"线性均值模型的MSE: {mse_linear:.2f}")

4. 训练带多项式均值的GP模型

我们以二次多项式为例:

# 初始化二次多项式均值函数(degree指定多项式次数,会自动学习系数)
poly_mean = PolynomialMean(degree=2)
# 核函数可以和线性均值的一样,也可以换
kernel_poly = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))

# 构建GP回归器
gp_poly = GaussianProcessRegressor(
    kernel=kernel_poly,
    mean_function=poly_mean,
    normalize_y=True,
    random_state=42
)

# 拟合模型并预测
gp_poly.fit(X, y_true)
y_pred_poly = gp_poly.predict(X)
# 计算MSE误差
mse_poly = mean_squared_error(y_true, y_pred_poly)
print(f"二次多项式均值模型的MSE: {mse_poly:.2f}")

5. 自定义均值函数(可选)

如果官方的均值函数满足不了你的需求,比如想要三次多项式均值,你可以自己写一个:

# 自定义固定形式的均值函数
def cubic_mean(X):
    return 1*X**3 + 2*X**2 + 3*X

# 构建带自定义均值的GP模型
gp_custom = GaussianProcessRegressor(
    kernel=kernel_poly,
    mean_function=cubic_mean,
    normalize_y=True,
    random_state=42
)
gp_custom.fit(X, y_true)

如果想要让自定义均值函数的参数可学习(比如自动拟合三次项的系数),可以继承BaseMeanFunction基类来实现,这里就不展开了,官方的PolynomialMean其实已经支持任意次数的可学习均值。

注意事项

  • normalize_y是对目标变量y做标准化(减去均值除以标准差),属于数据预处理步骤,和模型的先验均值函数是独立的,两者可以同时使用。
  • 均值函数必须接受形状为(n_samples, n_features)的特征数组X,返回形状为(n_samples,)的均值数组。
  • 如果你用的sklearn版本较旧,可能没有sklearn.gaussian_process.mean_functions模块,这时候可以用自定义函数替代,或者升级sklearn到较新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:45:19