数值错误:x和y必须是相同的大小。

22
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集。

3个回答

37

打印X_train的形状。你看到了什么?我敢打赌X_train是2D的(一个只有单列的矩阵),而y_train是1D的(向量)。这导致不同的尺寸。

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


6

[:, :-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)

它将创建一个等间距的 数组,使你的 错误 永久消失。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接