首页 > 解决方案 > 绘制两个不同维度的数据框(x 和 y)?

问题描述

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

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

y_pred - 运行模型后,这将是数据集中每行特征的预测价格。尺码 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)

下面是绘制模型结果的代码。

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 行,在 scatter __ret = gca().scatter(

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

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

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

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

编辑:用 Traceback 更新了问题

标签: pythonpandasnumpymatplotlibsvm

解决方案


According to the comment I believe this is what you want.

As an example, I used 20 points with 3 features.

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)

enter image description here


推荐阅读