web-dev-qa-db-ja.com

OLS回帰での形状が揃っていないエラーpython

_statsmodel.api_ OLS回帰を実行しようとしているdataframeがあります。概要を印刷しています。しかし、predict()関数を使用すると、エラーが発生します-

形状(75,7)と(6、)が整列していません:7(dim 1)!= 6(dim 0)

私のコードは:

_X = newdf.loc[:, newdf.columns != 'V-9'].values
y = newdf.iloc[:,3].values
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 
0.2,random_state=0)
import statsmodels.formula.api as sm
model = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]])
result = model.fit()
print(result.summary())`
_

これを実行するとエラーが発生します:

_y_pred = result.predict(X_test)
_

私の_X_train_の形状は-_(297,7)_
_X_test_の形状は-_(75,7)_です
dtypeは_numpy.ndarray_です

この質問は以前に尋ねられました。私はstackoverflow.comのいくつかの投稿を追跡し、reshape関数を使用してそれを解決しようとしました。しかし、それは私を助けませんでした。誰かがこのエラーを受け取った理由を誰かに説明できますか?そして解決策は何ですか?

5
Trisa Biswas

modelmodel = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]])は、そのようにトレーニングされると、_X_train_の5番目の列が削除されるため、入力データが6次元であると想定します。これには、テストデータ(この場合は_X_test_)も6次元である必要があります。 _X_test_はもともと7次元なので、y_pred = result.predict(X_test)が機能しなかったのはこのためです。ここでの適切な修正は次のとおりです。

_y_pred = result.predict(X_test[:, [0,1,2,3,4,6]]_

ボーナス

Pandasライブラリを使用しているようです。列を削除するためのより良い方法は、代わりに_.drop_を使用することです

_newdf.loc[:, newdf.columns != 'V-9'].values_

あなたは使うことができます

newdf.drop('V-9', axis=1) # axis=1 makes sure cols are dropped, not rows

同様に

_X_train[:,[0,1,2,3,4,6]]_

あなたは使うことができます

X_train.drop(X_train.columns[5], axis=1) # this like dropping the 5th column of the dataFrame

これにより、特に7次元ではなく50次元の場合に、コードが読みやすくなり、コーディングが容易になります。

お役に立てて嬉しいです。

1
D_Serg