【问题标题】:How to plot regression predicted data in 3-D contour plot?如何在 3-D 等高线图中绘制回归预测数据?
【发布时间】:2018-10-20 15:50:24
【问题描述】:

我正在尝试将来自高斯过程回归的预测平均数据绘制成 3-D 轮廓。我关注了Plot 3D Contour from an Image using extent with Matplotlib mplot3d example code: 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轴为二维平面,z轴上的预测值。sample plot如下:

我的代码有什么问题?

谢谢!

【问题讨论】:

    标签: python matplotlib scikit-learn mplot3d


    【解决方案1】:

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

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

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

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

    1. add_subplot 应该在 projection = '3d' 之前有一个位置。
    2. 对于等高线图,Z 的形状应与 XY 的形状相同。
    3. 由于 2,您的 xy 应该匹配 xvaluesyvalues

    综合起来,您可能需要进行以下更改:

    ...
    
    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 稀疏,因此您的绘图不会像示例绘图那样平滑。

    【讨论】:

    • 成功了,非常感谢。在曲面图中,我需要给出一些颜色区分,例如,红色表示高数据,蓝色表示最低,绿色/黄色表示中等数据。我该怎么做?有什么想法吗?
    • @santobedi 你可以从herehere开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2011-03-02
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2012-10-28
    • 2021-05-19
    相关资源
    最近更新 更多