_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
関数を使用してそれを解決しようとしました。しかし、それは私を助けませんでした。誰かがこのエラーを受け取った理由を誰かに説明できますか?そして解決策は何ですか?
model
行model = 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次元の場合に、コードが読みやすくなり、コーディングが容易になります。
お役に立てて嬉しいです。