Ошибка значения: x и y должны быть одинакового размера

#python #matplotlib #seaborn

#python #csv #numpy #matplotlib #машинное обучение

Вопрос:

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

Мне нужна помощь в понимании ошибки при выполнении приведенного выше кода. Ниже приведена ошибка:

«повысить ошибку значения («x и y должны быть одинакового размера»)»

У меня есть файл .csv с 1398 строками и 2 столбцами. Я взял 40% в качестве набора y_test, как это видно в приведенном выше коде.

Ответ №1:

Выведите фигуру X_train. Что вы видите? Я бы поспорил X_train , что это 2d (матрица с одним столбцом), а y_train 1d (вектор). В свою очередь, вы получаете разные размеры.

Я думаю, что использование X_train[:,0] для построения графика (откуда и возникает ошибка) должно решить проблему

Ответ №2:

Нарезка с [:, :-1] помощью даст вам 2-мерный массив (включая все строки и все столбцы, исключая последний столбец).

Нарезка с [:, 1] помощью даст вам 1-мерный массив (включая все строки из второго столбца). Чтобы сделать этот массив также 2-мерным, используйте [:, 1:2] или [:, 1].reshape(-1, 1) или [:, 1][:, None] вместо [:, 1] . Это сделает x и y сопоставимым.


Альтернативой созданию обоих массивов 2-мерными является их одномерность. Для этого можно было бы сделать [:, 0] (вместо [:, :1] ) для выбора первого столбца и [:, 1] для выбора второго столбца.

Ответ №3:

Попробуйте это:

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

Это приведет к равномерному array распределению, и вы error исчезнете навсегда.