【问题标题】:How to fit a model to my testing set in statsmodels (python)如何在 statsmodels (python) 中将模型拟合到我的测试集
【发布时间】:2014-05-27 17:45:27
【问题描述】:

我正在研究逻辑回归模型,但我无法理解如何将模型从我的训练集拟合到我的测试集。抱歉,我是 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[子集]) 回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\statsmodels\discrete\discrete_model.py”,第 378 行,在预测中 返回 self.cdf(np.dot(exog, params)) ValueError:矩阵未对齐

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

【问题讨论】:

  • np.asarray(X_train[subset]).shapenp.asarray(X_test[subset]).shape 的第二个值是否相同?
  • @user333700 是的,他们有。

标签: python statsmodels


【解决方案1】:

有两种预测方法。

logit 在您的示例中是 模型实例。模型实例不知道估计结果。模型 predict 具有不同的签名,因为它还需要参数 logit.predict(params, exog)。这主要是为了内部使用。

你想要的是 results 实例的 predict 方法。在你的例子中

y_pred = result.predict(X_test[subset])

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

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

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2021-12-09
    • 1970-01-01
    • 2023-04-04
    • 2019-04-12
    • 2018-10-22
    • 2020-04-16
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多