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

Posted

技术标签:

【中文标题】ValueError: x 和 y 的大小必须相同【英文标题】:ValueError: x and y must be the same size 【发布时间】:2017-05-30 07:07:16 【问题描述】:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pt

data1 = pd.read_csv('stage1_labels.csv')

X = data1.iloc[:, :-1].values
y = data1.iloc[:, 1].values

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
label_X = LabelEncoder()
X[:,0] = label_X.fit_transform(X[:,0])
encoder = OneHotEncoder(categorical_features = [0])
X = encoder.fit_transform(X).toarray()

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X, y, test_size = 0.4, random_state = 0)

#fitting Simple Regression to training set

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

#predecting the test set results
y_pred = regressor.predict(X_test)

#Visualization of the training set results
pt.scatter(X_train, y_train, color = 'red')
pt.plot(X_train, regressor.predict(X_train), color = 'green')
pt.title('salary vs yearExp (Training set)')
pt.xlabel('years of experience')
pt.ylabel('salary')
pt.show()

在执行上述代码时,我需要帮助来理解错误。以下是错误:

"raise ValueError("x and y must be the same size")"

我有 1398 行 2 列的 .csv 文件。我已将 40% 作为 y_test 集,因为它在上面的代码中可见。

【问题讨论】:

【参考方案1】:

打印 X_train 形状。你看到了什么?我敢打赌X_train 是2d(单列矩阵),而y_train 是1d(向量)。反过来,您会得到不同的尺寸。

我认为使用X_train[:,0] 进行绘图(这是错误的来源)应该可以解决问题

【讨论】:

【参考方案2】:

使用[:, :-1] 切片将为您提供一个二维数组(包括所有行和所有列,不包括最后一列)。

使用[:, 1] 切片将为您提供一个一维 数组(包括第二列中的所有行)。要使这个数组也是二维的,请使用[:, 1:2][:, 1].reshape(-1, 1)[:, 1][:, None] 而不是[:, 1]。这将使xy 具有可比性。


将两个数组都设为二维的另一种方法是将它们都设为一维。为此,[:, 0](而不是 [:, :1])用于选择第一列,[:, 1] 用于选择第二列。

【讨论】:

【参考方案3】:

试试这个:

x_train=np.arange(0,len(x_train),1)

它会使array 间隔均匀,而您的error 将永久消失。

【讨论】:

以上是关于ValueError: x 和 y 的大小必须相同的主要内容,如果未能解决你的问题,请参考以下文章

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

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

ValueError:x 和 y 必须具有相同的第一维,但具有形状

ValueError:x 和 y 必须具有相同的第一维,但具有形状 (6,) 和 (8,) [重复]

如何在此 python 代码中获取集群图? ValueError:x 和 y 必须具有相同的第一维

散点图错误:“x 和 y 的大小必须相同”但它们的大小相同