【发布时间】:2021-03-29 04:19:24
【问题描述】:
我最近在钻石数据集上构建了一个 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 的大小必须相同"
如果有人能指出我的错误之处,我将不胜感激。
这是我收到的 Traceback:
Traceback(最近一次调用最后一次):
文件“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 行,在包装器中 返回函数(*inner_args, **inner_kwargs)
文件“C:\Users\anaconda3\lib\site-packages\matplotlib\axes_axes.py”,第 4441 行,分散 raise ValueError("x 和 y 的大小必须相同")
ValueError: x 和 y 的大小必须相同
编辑:使用 Traceback 更新问题
【问题讨论】:
-
显示堆栈跟踪。
-
你想绘制 8 条不同的线。 all 具有相同的 y 但不同的 x,这样每个 x 都是
X_test列? -
@MadPhysicist 可以。编辑:用 Traceback 更新了问题
-
@LiorCohen 这是正确的,除了我想绘制点而不是线。
标签: python pandas numpy matplotlib svm