多维数据下高斯过程模型拟合结果的可视化方法咨询
可视化二维输入+二维输出高斯过程拟合结果的实用方法
嘿,我明白你现在的困境——二维输入、二维输出的GP拟合可视化确实比单维度场景麻烦不少,不过咱们有几个实用的办法可以试试,帮你直观看到模型的拟合效果:
1. 切片式可视化:固定一个输入维度,观察另一维度与输出的关系
这是最直观的入门方法,通过固定其中一个输入特征(比如x1)的取值,遍历另一个特征(x2)的范围,然后让GP预测对应的输出y1和y2,把结果绘制成曲线。你可以多选几个不同的x1固定值,生成子图对比,就能看到模型在不同输入切片上的拟合表现。
示例代码:
import numpy as np import matplotlib.pyplot as plt from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF # 假设你已经训练好模型gpr,并有输入数据X (n_samples, 2),输出y (n_samples, 2) # 生成测试切片:固定x1为几个不同值,遍历x2 x1_fixed_values = [np.percentile(X[:,0], 25), np.percentile(X[:,0], 50), np.percentile(X[:,0], 75)] x2_range = np.linspace(X[:,1].min(), X[:,1].max(), 100) fig, axes = plt.subplots(2, 3, figsize=(15, 10)) for i, x1_val in enumerate(x1_fixed_values): # 构造测试输入:固定x1,x2遍历 X_test = np.array([[x1_val, x2] for x2 in x2_range]) y_pred, y_std = gpr.predict(X_test, return_std=True) # 绘制y1的拟合曲线+置信区间 axes[0, i].plot(x2_range, y_pred[:,0], label='Predicted y1') axes[0, i].fill_between(x2_range, y_pred[:,0]-2*y_std, y_pred[:,0]+2*y_std, alpha=0.2) # 叠加真实数据点(仅x1接近固定值的点) mask = np.isclose(X[:,0], x1_val, atol=0.1) axes[0, i].scatter(X[mask,1], y[mask,0], c='r', s=10, label='True y1') axes[0, i].set_title(f'x1 = {x1_val:.2f}') axes[0, i].legend() # 绘制y2的拟合曲线+置信区间 axes[1, i].plot(x2_range, y_pred[:,1], label='Predicted y2') axes[1, i].fill_between(x2_range, y_pred[:,1]-2*y_std, y_pred[:,1]+2*y_std, alpha=0.2) axes[1, i].scatter(X[mask,1], y[mask,1], c='r', s=10, label='True y2') axes[1, i].legend() axes[0,0].set_ylabel('y1') axes[1,0].set_ylabel('y2') plt.tight_layout() plt.show()
2. 真实输出vs预测输出的散点对比
这个方法能快速帮你评估模型的整体拟合精度:分别把y1的真实值和预测值、y2的真实值和预测值绘制成散点图,再加上一条对角线(代表完美拟合)。如果大部分点都靠近对角线,说明模型拟合效果不错。
示例代码:
# 用全部训练/测试数据预测 y_pred_all = gpr.predict(X) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # y1真实vs预测 ax1.scatter(y[:,0], y_pred_all[:,0], alpha=0.6) ax1.plot([y[:,0].min(), y[:,0].max()], [y[:,0].min(), y[:,0].max()], 'k--') ax1.set_xlabel('True y1') ax1.set_ylabel('Predicted y1') ax1.set_title('y1: True vs Predicted') # y2真实vs预测 ax2.scatter(y[:,1], y_pred_all[:,1], alpha=0.6) ax2.plot([y[:,1].min(), y[:,1].max()], [y[:,1].min(), y[:,1].max()], 'k--') ax2.set_xlabel('True y2') ax2.set_ylabel('Predicted y2') ax2.set_title('y2: True vs Predicted') plt.tight_layout() plt.show()
3. 输入空间的向量场/热图可视化
如果你的GP是用来学习坐标转换(输入到输出的空间映射),向量场是绝佳的选择:在输入空间生成网格点,用GP预测每个网格点的输出,然后绘制从输入坐标指向预测输出坐标的箭头,直观展示整个空间的变换趋势。
示例代码:
# 生成输入空间的网格 x1_grid, x2_grid = np.meshgrid( np.linspace(X[:,0].min(), X[:,0].max(), 20), np.linspace(X[:,1].min(), X[:,1].max(), 20) ) X_grid = np.column_stack([x1_grid.ravel(), x2_grid.ravel()]) # 预测网格点的输出 y_pred_grid = gpr.predict(X_grid) y_pred_grid = y_pred_grid.reshape(x1_grid.shape + (2,)) # 绘制向量场 fig, ax = plt.subplots(figsize=(8, 8)) # 计算向量:输出 - 输入 dx = y_pred_grid[:,:,0] - x1_grid dy = y_pred_grid[:,:,1] - x2_grid ax.quiver(x1_grid, x2_grid, dx, dy, angles='xy', scale_units='xy', scale=1, alpha=0.7) # 叠加真实数据点 ax.scatter(X[:,0], X[:,1], c='r', s=20, label='Input points') ax.set_xlabel('x1') ax.set_ylabel('x2') ax.set_title('Input → Predicted Output Vector Field') ax.legend() plt.axis('equal') plt.show()
你也可以单独绘制y1或y2在输入空间的热图,用plt.imshow展示输出维度的分布规律。
4. 降维可视化(可选)
如果想一次性观察输入、真实输出、预测输出的整体分布关系,可以用PCA把输入(2D)、真实输出(2D)、预测输出(2D)都降到2D或3D空间,然后用不同颜色区分真实和预测的点,看它们的聚类重合度。
示例代码:
from sklearn.decomposition import PCA # 合并输入、真实输出、预测输出 all_data = np.vstack([X, y, y_pred_all]) # 用PCA降维到2D pca = PCA(n_components=2) all_data_pca = pca.fit_transform(all_data) # 提取各部分的降维结果 X_pca = all_data_pca[:len(X)] y_true_pca = all_data_pca[len(X):2*len(X)] y_pred_pca = all_data_pca[2*len(X):] fig, ax = plt.subplots(figsize=(8, 8)) ax.scatter(X_pca[:,0], X_pca[:,1], c='gray', s=15, label='Input') ax.scatter(y_true_pca[:,0], y_true_pca[:,1], c='blue', s=15, label='True Output') ax.scatter(y_pred_pca[:,0], y_pred_pca[:,1], c='orange', s=15, alpha=0.6, label='Predicted Output') ax.set_title('PCA: Input vs True/Predicted Output') ax.legend() plt.show()
你可以根据自己的核心需求选择合适的方法:如果想分析局部拟合细节,选切片可视化;如果想评估整体精度,用散点对比;如果关注空间变换效果,向量场是最佳选择~
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

