绘制两个维度不同的数据框(x 和 y)?

Plotting two data frames (x and y) that do not have the same dimensionality?

我最近在钻石数据集上构建了一个 SVR model,以根据一些特定特征预测钻石的价格。我试图根据预测价格绘制 model 的测试特征。下面是对代码中使用的变量的解释。

X_test - 我进行了 train/test 拆分,这些是用于测试 model 的功能。尺寸 10782,7(总共 8 个特征)。

y_pred - 在 运行 和 model 之后,这将是数据集中每一行特征的预测价格。尺码 10782.

下面是这些功能如何发挥作用的代码

diamonds_features = ['carat', 'x', 'y', 'z', 'color', 'cut', 'clarity']

X = df.loc[:, diamonds_features].values
y = df.iloc[:, 6:7].values

X_train, X_test, y_train, y_test = train_test_split(X, y.ravel(), test_size=0.20)

regressor = SVR(kernel='rbf', C=50, gamma = 10)
regressor.fit(X_train, y_train)

#produce test predictions
y_pred = regressor.predict(X_test)

下面是绘制 model.

结果的代码
colorGroup = ['b','g','r','c','m','y','k','w']
plt.figure(1)
for i in range(len(X_test)):
  col = colorGroup[i % 8]
  for j in range(8):
      plt.scatter(X_test[i:i+1, j:j+1], y_pred[i:i+1], color=col)

为了解决 X_test 和 y_pred 大小不同的问题,我想执行以下操作:

对于 y_pred 中的每个单独值(因为它是一维数组,所以它将是每个值), 获取 X_test 一行中的每个值,并将其与 y_pred 值相对应。此外,使用 mod 确保每个特征都相应地着色(例如,当我绘制克拉时,它将在整个绘图中保持一致的颜色)。

我使用此代码遇到的问题是我得到以下信息: “ValueError:x 和 y 的大小必须相同”

如果有人能指出我哪里有问题,我将不胜感激。

这是我收到的回溯:

追溯(最近调用最后):

文件“C:\Users\mypackage\SVM Model.py”,第 72 行,在 plt.scatter(X_test[i:i+1, j:j+1], y_pred[i:i+1], color=colorGroup[i%8])

文件“C:\Users\anaconda3\lib\site-packages\matplotlib\pyplot.py”,第 2890 行,分散 __ret = gca().scatter(

文件“C:\Users\anaconda3\lib\site-packages\matplotlib_init_.py”,第 1438 行,在内部 return func(ax, *map(sanitize_sequence, args), **kwargs)

文件“C:\Users\anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py”,第 411 行,在包装器中 return func(*inner_args, **inner_kwargs)

文件“C:\Users\anaconda3\lib\site-packages\matplotlib\axes_axes.py”,第 4441 行,分散 raise ValueError("x 和 y 的大小必须相同")

ValueError: x 和 y 的大小必须相同

编辑:用 Traceback

更新了问题

根据评论我相信这就是你想要的。

举个例子,我用了 20 个点和 3 个特征。

import numpy as np
import matplotlib.pyplot as plt

X_test = np.random.rand(20, 3)
y_pred = np.random.rand(20)
N = y_pred.size

colorGroup = ['b','g','r','c','m','y','k','w']
plt.figure(1)

for i in range(N):
    col = colorGroup[i % N]
    plt.scatter(X_test[:, i], y_pred, color=col)