web-dev-qa-db-ja.com

ValueError:xとyは同じサイズでなければなりません

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とyは同じサイズでなければなりません ")"

1398行2列の.csvファイルがあります。上記のコードに示されているように、y_testセットとして40%を使用しました。

助けてください

よろしく、アミテシュ

6
user3521180

X_train形状を印刷します。何が見えますか? X_trainは2d(1列の行列)であり、y_train 1d(ベクトル)。順番に異なるサイズを取得します。

X_train[:,0](エラーの発生源である)プロットで問題を解決する必要があります

16

_[:, :-1]_でスライスすると、2次元配列(最後の列を除くすべての行と列を含む)が得られます。

_[:, 1]_でスライスすると、1-dimensional配列(2番目の列のすべての行を含む)が得られます。この配列も2次元にするには、_[:, 1:2]_の代わりに_[:, 1][:, None]_または[:, 1].reshape(-1, 1)または_[:, 1]_を使用します。これにより、xyが比較可能になります。


両方の配列を2次元にする代わりに、両方を1次元にします。このためには、最初の列を選択するために_[:, 0]_の代わりに_[:, :1]_を実行し、2番目の列を選択するために_[:, 1]_を実行します。

2
yogabonito

私の場合、問題はtest_sizeのサイズが散布図の範囲と異なることでした。範囲は、総観測値のtest_size(コードでは40%)と同じである必要があります。ここで、散布図の範囲を、モデルで処理している総観測値の40%として設定する必要があります。

0
PdF