ValueError:x和y必须大小相同

时间:2017-01-15 09:11:58

标签: python csv numpy matplotlib machine-learning

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()

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

“引发ValueError(”x和y必须大小相同“)”

我有.csv文件,包含1398行和2列。我将y_test设置为40%,因为它在上面的代码中可见。

请帮忙

此致 Amitesh

4 个答案:

答案 0 :(得分:12)

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

我认为使用X_train[:,0]进行绘图(来自错误源自的地方)应解决问题

答案 1 :(得分:1)

尝试一下:

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

它将array均匀分布,而您的error将永久消失。

答案 2 :(得分:0)

使用[:, :-1]切片会为您提供 2维数组(包括除最后一列之外的所有行和所有列)。

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

使两个阵列成为二维的替代方案是使它们都是一维的。对于这个人,可以[:, 0](而非[:, :1])选择第一列,[:, 1]选择第二列。

答案 3 :(得分:0)

在我的情况下,问题是test_size的大小与散点图的范围不同。范围应与总观测值的test_size(在代码中为40%)相同。在这里,您应该将散点图的范围设置为模型中要处理的总观测值的40%。