如何在statsmodels中拟合我的测试集模型(python)

16 投票
1 回答
19462 浏览
提问于 2025-04-18 02:37

我正在做一个逻辑回归模型,但我不太明白怎么把我在训练集上得到的模型应用到测试集上。抱歉,我对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)) 值错误:矩阵未对齐

我的训练数据和测试数据集有相同数量的变量,所以我确定我对logit.predict()的实际作用有些误解。

1 个回答

22

这里有两种预测方法。

你提到的 logit 是一个模型实例。这个模型实例并不知道估计的结果。模型的预测方法有不同的用法,因为它还需要参数,格式是 logit.predict(params, exog)。这主要是为了内部使用。

你真正想要的是结果实例的预测方法。在你的例子中,

y_pred = result.predict(X_test[subset])

应该能给出正确的结果。它使用了估计的参数来对你新的测试数据进行预测,这些测试数据是解释变量 X_test。

调用 model.fit() 会返回一个结果类的实例,这个实例可以访问额外的后估计统计数据和分析,以及进行预测。

撰写回答