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 的大小必须相同”,我在网上找到的所有内容都不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:在Python中创建KMeans模型时x和y的大小必须相同
ValueError:尝试绘制 SVM 时 x 和 y 的大小必须相同