首页 > 解决方案 > 如何在 3-D 等高线图中绘制回归预测数据?

问题描述

我正在尝试将来自高斯过程回归的预测平均数据绘制成 3-D 轮廓。我已经使用 Matplotlib mplot3d 示例代码从图像中绘制 3D 轮廓图:contour3d_demo3.py线程。以下是我的代码:

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm

x_train = np.array([[0,0],[2,2],[3,3]])
y_train = np.array([[200,321,417]])

xvalues = np.array([0,1,2,3])
yvalues = np.array([0,1,2,3])

a,b = np.meshgrid(xvalues,yvalues)
positions = np.vstack([a.ravel(), b.ravel()])
x_test = (np.array(positions)).T

kernel = C(1.0, (1e-3, 1e3)) * RBF(10)

gp = GaussianProcessRegressor(kernel=kernel)

gp.fit(x_train, y_train)

y_pred_test = gp.predict(x_test)

fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
x=y=np.arange(0,3,1)
X, Y = np.meshgrid(x,y)
Z = y_pred_test
cset = ax.contour(X, Y, Z, cmap=cm.coolwarm)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()

运行上述代码后,我在控制台上收到以下错误:

在此处输入图像描述

我希望 x 和 y 轴作为 2-D 平面和 z 轴上的预测值。示例图如下:

在此处输入图像描述

我的代码有什么问题?

谢谢!

标签: pythonmatplotlibscikit-learnmplot3d

解决方案


您提到的具体错误来自您的y_train,这可能是一个错字。它应该是:

y_train_ : 类数组,形状 = (n_samples, [n_output_dims])

根据您的x_train,您有 3 个样本。所以你y_train应该有 shape(3, 1)而不是(1, 3).

您在绘图部分还有其他错误:

  1. add_subplot之前应该有一个位置projection = '3d'
  2. ZX应该具有与Y等高线图相同的形状。
  3. 由于 2,您的xandy应该匹配xvaluesand yvalues

总之,您可能需要进行以下更改:

...

y_train = np.array([200,321,417])

...

ax = fig.add_subplot(111, projection = '3d')
x=y=np.arange(0,4,1)
...
Z = y_pred_test.reshape(X.shape)

...

只提两点:

  1. 这些更改后您将获得的图与您显示的图不匹配。您问题中的数字是曲面图而不是等高线图。您可以使用ax.plot_surface来获得那种类型的情节。

  2. 我想你已经知道了。但以防万一,您的情节不会像您的样本情节那样平滑,因为您的情节np.meshgrid很稀疏。


推荐阅读