1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み】ValueError: xとyは同じサイズでなければならない

2022-01-02 12:11:35

質問

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 same size")"

1398行2列の.csvファイルを持っています。私は40%をy_testセットとして、上記のコードに表示されているようにしました。

どのように解決するのですか?

X_trainの形状を印刷します。何が見えますか?きっと "raise ValueError("x and y must be the same size")" は2次元(1列の行列)、一方 X_train 1d(ベクトル)です。その結果、異なるサイズが得られます。

を使うのがいいと思います。 y_train をプロットすることで、問題が解決するはずです(これがエラーの原因です)。