我正在研究逻辑回归模型,我无法理解如何将模型拟合从我的训练集到我的测试集。对不起,我是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]) Traceback(最近一次调用最后一次): 文件"",第1行,in 文件" C:\ Users \ eMachine \ WinPython-64bit-2.7.5.3 \ python-2.7.5.amd64 \ lib \ site-packages \ statsmodels \ discrete \ discrete_model.py",第378行,预测 return self.cdf(np.dot(exog,params)) ValueError:矩阵未对齐
我的训练和测试数据集具有相同数量的变量,所以我确信我误解了logit.predict()实际上在做什么。
答案 0 :(得分:16)
有两种预测方法。
您的示例中的 logit
是模型实例。模型实例不了解估计结果。模型预测具有不同的签名,因为它还需要参数logit.predict(params, exog)
。这主要用于内部使用。
您想要的是结果实例的预测方法。在你的例子中
y_pred = result.predict(X_test[subset])
应该给出正确的结果。它使用解释变量的新测试数据X_test来预测预测中的参数。
调用model.fit()
会返回结果类的实例,该实例类提供对其他估计后统计和分析以及预测的访问。