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

如何将多观测值拟合到单个高斯过程并输出统一均值与协方差

解决多输出高斯过程的联合均值与协方差问题

首先明确:你当前代码输出的mean_prediction其实已经是与观测维度匹配的单个均值数组,它的形状是(5, 2),对应每个输入样本的两个输出维度的预测均值。可以通过print(mean_prediction.shape)验证这一点。

针对协方差矩阵的需求,分两种场景处理:

场景1:假设输出维度之间相互独立

如果不需要考虑不同输出维度之间的相关性,只需将每个输出维度的协方差矩阵拼接成块对角的联合协方差矩阵即可:

import numpy as np
from scipy.linalg import block_diag
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

# 原数据与模型训练
X = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])
Y = np.array([[1.5, 2.5], [2.5, 3.5], [3.5, 4.5], [4.5, 5.5], [5.5, 6.5]])
kernel = C(1.0, (1e-4, 1e1)) * RBF(1.0, (1e-4, 1e1))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)
gp.fit(X, Y)

mean_prediction, cov_prediction = gp.predict(X, return_cov=True)

# 拼接成(10, 10)的块对角联合协方差矩阵
joint_covariance = block_diag(*cov_prediction)

此时joint_covariance的形状为(10, 10),对角块分别对应两个输出维度的样本间协方差,非对角块为0(因为假设输出独立)。

场景2:需要建模输出维度之间的相关性

如果输出维度存在相关性,需要将数据转换为样本-输出对的格式,让高斯过程同时建模输入空间和输出空间的关联:

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

# 原数据
X = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])
Y = np.array([[1.5, 2.5], [2.5, 3.5], [3.5, 4.5], [4.5, 5.5], [5.5, 6.5]])

# 将数据转换为样本-输出对格式
n_samples = X.shape[0]
n_outputs = Y.shape[1]
# 重复输入样本,每个输出维度对应一个输入条目
X_flat = np.repeat(X, n_outputs, axis=0)
# 添加输出维度索引作为新特征
output_indices = np.tile(np.arange(n_outputs), n_samples).reshape(-1, 1)
X_multi = np.hstack([X_flat, output_indices])
# 扁平化输出数组
Y_multi = Y.flatten()

# 定义核函数:同时建模输入特征和输出维度的相关性
kernel = C(1.0, (1e-4, 1e1)) * RBF(
    length_scale=[1.0, 1.0],  # 分别对应输入特征和输出维度的长度尺度
    length_scale_bounds=[(1e-4, 1e1)] * 2
)
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)
gp.fit(X_multi, Y_multi)

# 预测并还原格式
X_pred_multi = np.hstack([np.repeat(X, n_outputs, axis=0), output_indices])
mean_prediction = gp.predict(X_pred_multi).reshape(n_samples, n_outputs)
joint_covariance = gp.predict(X_pred_multi, return_cov=True)[1]

此时mean_prediction形状为(5, 2),joint_covariance形状为(10, 10),包含了不同输出维度之间的协方差信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:29:59