【问题标题】:How can I train a model in statsmodels?如何在 statsmodels 中训练模型?
【发布时间】:2021-08-26 17:05:20
【问题描述】:

这是一个非常简单的问题,我知道有些人会倾向于给出-1,但请让我解释得更好。

互联网上的大多数 statsmodels 教程(例如 thisthisthis)通常会创建线性回归,而不会将数据集拆分为训练和测试。他们使用此语法创建线性回归:

import statsmodels.formula.api as sm
sm.ols('y~x1+x2+x3', data=df).fit()

不用说在没有测试数据集的情况下构建模型有多危险。

我的问题是如何使用 statsmodels 创建线性回归,使用训练和测试拆分?

找了好久,找到了这个办法:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
features, target, train_size=0.8, random_state=42
)

import statsmodels.api as sm

smfOLS = smf.OLS(X_train, y_train).fit()

但是,我收到了这个错误:

AttributeError: module 'statsmodels.formula.api' has no attribute 'OLS'

我知道我应该提供一个数据集,但不幸的是,我正在处理机密数据。但是您拥有的任何数据集都应该足以了解情况。

【问题讨论】:

    标签: python linear-regression statsmodels


    【解决方案1】:

    试试这个,

    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(
    features, target, train_size=0.8, random_state=42
    )
    
    import statsmodels.api as sm
    
    
    smfOLS = sm.OLS(y_train, X_train).fit()
    

    【讨论】:

    • 对不起,我弄错了。事实上,答案并没有奏效。我收到此错误消息:ValueError:形状 (1476,7) 和 (1476,7) 未对齐:7 (dim 1) != 1476 (dim 0)
    • 好吧,通过改变 X_train 和 y_train 的位置,答案是有效的。
    • 此错误与您的问题无关,我回答了与您的属性错误相关的问题,您加载了错误的模块。这次和你的数据有关,请再发一个问题,接受我的回答。
    • 其实答案还是错的,因为X_train和y_train不在正确的位置。 statsmodels 总是把 y_train 放在第一位。请编辑 sm.OLS(y_train, X_train),fit() 的答案。反正我已经标记为正确了。非常感谢XD
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2020-03-16
    • 2021-09-11
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    相关资源
    最近更新 更多