如何使模型适合statsmodels(python)中的测试集

时间:2014-04-13 21:32:03

标签: python statsmodels

我正在研究逻辑回归模型,我无法理解如何将模型拟合从我的训练集到我的测试集。对不起,我是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()实际上在做什么。

1 个答案:

答案 0 :(得分:16)

有两种预测方法。

您的示例中的

logit模型实例。模型实例不了解估计结果。模型预测具有不同的签名,因为它还需要参数logit.predict(params, exog)。这主要用于内部使用。

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

y_pred = result.predict(X_test[subset])

应该给出正确的结果。它使用解释变量的新测试数据X_test来预测预测中的参数。

调用model.fit()会返回结果类的实例,该实例类提供对其他估计后统计和分析以及预测的访问。