2017-01-15 2 views
0
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 должны быть одинакового размера

«поднять ValueError (» х и у должны быть одинакового размера «)»

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

Пожалуйста, помогите

С уважением, Amitesh

+0

Я наткнулся на ссылку из стека, которая говорила об ошибке, но сценарий отличается от моего. Ссылка на ссылку http://stackoverflow.com/questions/24569729/valueerror-x- and-y-must-be-the-same-size-python – user3521180

+0

Проведение полной проверки стека ошибок поможет. –

+0

Ниже приводится полная ошибка, что я мог видеть в моем IDE Файл "C: \ Program Files \ Anaconda2 \ Lib \ сайт-пакеты \ Matplotlib \ pyplot.py", линия 3258, в разбросе edgecolors = edgecolors, данных = данные, ** kwargs) Файл «C: \ Program Files \ Anaconda2 \ lib \ site-packages \ matplotlib \ __ init__.py», строка 1818, внутри return func (ax, * args, ** kwargs) Файл "C: \ Program Files \ Anaconda2 \ Lib \ сайт-пакеты \ Matplotlib \ оси \ _axes.py", линии 3810, в разбросе поднять ValueError ("х и у должны быть одинакового размера") ValueError : x и y должны быть одного размера – user3521180

ответ

4

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

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

+0

Спасибо, Лукас, ваше предложение действительно помогло мне, на этот раз я не получил ошибку. Но результат, который я получил в качестве заговора, был для меня первым. Я ожидал прямой линии, но я получаю линию «X». Я не уверен, что это правильное предсказание. Во всяком случае ... этот поток был только для конкретной ошибки, поэтому мы можем заключить его сейчас. Я открою новую тему для разных вопросов. – user3521180

+0

Если это решило вашу проблему, то, пожалуйста, отметьте ответ - спасибо. –

0

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

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


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

Смежные вопросы