web-dev-qa-db-ja.com

statsmodels(python)のテストセットにモデルを適合させる方法

ロジスティック回帰モデルに取り組んでいますが、トレーニングセットからテストセットにモデルを適合させる方法を理解するのに苦労しています。申し訳ありませんが、私はpythonに不慣れで、statsmodelsに非常に不慣れです。

import pandas as pd
import statsmodels.api as sm
from sklearn import cross_validation

independent_vars = phy_train.columns[3:]
X_train, X_test, y_train, y_test = cross_validation.train_test_split(phy_train[independent_vars], phy_train['target'], test_size=0.3, random_state=0)
X_train = pd.DataFrame(X_train)
X_train.columns = independent_vars
X_test = pd.DataFrame(X_test)
X_test.columns = independent_vars
y_train = pd.DataFrame(y_train)
y_train.columns = ['target']
y_test = pd.DataFrame(y_test)
y_test.columns = ['target']
logit = sm.Logit(y_train,X_train[subset],missing='drop')
result = logit.fit()
print result.summary()

y_pred = logit.predict(X_test[subset])

最後の行から、次のエラーが発生します。

y_pred = logit.predict(X_test [subset])トレースバック(最後の最後の呼び出し):ファイル ""、行1、ファイル "C:\ Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5。 AMD64\lib\site-packages\statsmodels\discrete\discrete_model.py "、行378、predict return self.cdf(np.dot(exog、params))ValueError:行列が整列されていません

私のトレーニングとテストのデータセットには同じ数の変数があるので、logit.predict()が実際に何をしているのか誤解していると確信しています。

14
panterasBox

2つの予測方法があります。

あなたの例のlogitモデルインスタンスです。モデルインスタンスは、推定結果を認識していません。モデルpredictには、logit.predict(params, exog)というパラメーターも必要なため、異なるシグネチャがあります。これは主に内部使用にとって興味深いものです。

必要なのは結果インスタンスのpredictメソッドです。あなたの例では

y_pred = result.predict(X_test[subset])

正しい結果が得られるはずです。説明変数の新しいテストデータX_testを使用して、予測で推定されたパラメーターを使用します。

model.fit()を呼び出すと、追加の推定後の統計と分析、および予測へのアクセスを提供する結果クラスのインスタンスが返されます。

19
Josef