PyPlot 错误“X 和 Y 的大小必须相同”,我在网上找到的所有内容都不起作用

Posted

技术标签:

【中文标题】PyPlot 错误“X 和 Y 的大小必须相同”,我在网上找到的所有内容都不起作用【英文标题】:PyPlot error "X and Y must be same size", everything I've found online isn't working 【发布时间】:2021-08-16 00:13:11 【问题描述】:

我正在尝试在 Scikit-Learn 中创建一个线性回归模型。虽然我遇到了问题。就是说 x 和 y 的大小不一样。我正在使用谷歌的“加州住房”数据集。代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dataset = pd.read_csv('/content/sample_data/california_housing_train.csv')
x = dataset.iloc[:, :-2].values
y = dataset.iloc[:, :-1].values

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 1/3)

from sklearn.linear_model import LinearRegression
lr = LinearRegression()

lr.fit(x_train, y_train)

y_pred = lr.predict(x_test)

plt.scatter(x_train, y_train, color = "red")
plt.plot(x_train, lr.predict(x_train), color = "green")
plt.title("Income vs Home Value (Training set)")
plt.xlabel("Income")
plt.ylabel("Home Value")
plt.show()

plt.scatter(x_test, y_test, color = "red")
plt.plot(x_train, lr.predict(x_train), color = "green")
plt.title("Income vs Home Value (Testing set)")
plt.xlabel("Income")
plt.ylabel("Home value")
plt.show()

错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-47-95095200e54b> in <module>()
     18 y_pred = lr.predict(x_test)
     19 
---> 20 plt.scatter(x_train[0], y_train[:], color = "red")
     21 plt.plot(x_train, lr.predict(x_train), color = "green")
     22 plt.title("Income vs Home Value (Training set)")

3 frames
/usr/local/lib/python3.7/dist-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, **kwargs)
   4389         y = np.ma.ravel(y)
   4390         if x.size != y.size:
-> 4391             raise ValueError("x and y must be the same size")
   4392 
   4393         if s is None:

ValueError: x and y must be the same size

我不知道为什么。我已经尝试了其他帖子上的所有内容。根据我在其他帖子上的发现,这是因为一个(x 或 y)是 2d,一个是 1d。虽然“修复”不起作用。

【问题讨论】:

我在上面的代码中没有看到这一行。 ` plt.scatter(x_train[0], y_train[:], color = "red")` 我试过了,还是不行,还是一样的错误。我只是想在没有失败的情况下提供纯代码。 【参考方案1】:

查看 x 和 y 变量的维度:

[ins] In [34]: x.shape                                                                                                                     
Out[34]: (17000, 7)

[ins] In [35]: y.shape                                                                                                                     
Out[35]: (17000, 8)

y变量应该是目标变量,房价:

y = dataset.iloc[:,-1].values

您的 x 变量定义忽略了您要绘制的 medium_income,因此这里是一个包含收入变量的 x 矩阵:

x = dataset.iloc[:, :-1].values

y 定义如上,它现在是一维的; x 矩阵中有 8 个变量,其中最后一个(索引 7)是 median_income。绘制它:

plt.scatter(x_train[:,7], y_train, color = "red")

【讨论】:

以上是关于PyPlot 错误“X 和 Y 的大小必须相同”,我在网上找到的所有内容都不起作用的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 错误:x 和 y 的大小必须相同

ValueError:在Python中创建KMeans模型时x和y的大小必须相同

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

ValueError:尝试绘制 SVM 时 x 和 y 的大小必须相同

Qt会话管理错误与matplotlib.pyplot.plot

matplotlib pyplot 的总线错误(核心转储)