#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
исчезнете навсегда.