You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在statsmodels中通过训练集测试集拆分训练线性回归模型

你遇到的报错由两个问题共同导致:

  • 变量名不匹配:你导入的模块别名为sm,但调用时写的是smf.OLS,未定义的变量名触发了属性检索错误
  • API混淆:statsmodels.formula.api下只提供小写的ols接口(接收公式+数据集参数),大写的OLS接口属于statsmodels.api模块,接收特征矩阵和目标向量作为入参。

以下是两种符合训练集/测试集拆分要求的正确实现方案:

方案1:沿用公式语法(和现有教程用法一致)

如果你习惯用y~x1+x2的公式写法,直接拆分完整DataFrame即可,不需要提前拆分特征和目标:

import statsmodels.formula.api as smf
from sklearn.model_selection import train_test_split

# 假设你的完整数据集存储在df变量中,目标列名为y,特征列名为x1/x2/x3
train_df, test_df = train_test_split(df, train_size=0.8, random_state=42)

# 仅用训练集拟合模型
model = smf.ols('y ~ x1 + x2 + x3', data=train_df).fit()

# 在测试集上做预测
y_pred = model.predict(test_df)

方案2:使用特征/目标拆分输入

如果你已经提前拆分好了特征矩阵和目标向量,用statsmodels.api的OLS接口即可:

import statsmodels.api as sm
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)

# 手动添加截距项(statsmodels默认不会自动加截距)
X_train_with_const = sm.add_constant(X_train)
X_test_with_const = sm.add_constant(X_test)

# 拟合模型
model = sm.OLS(y_train, X_train_with_const).fit()

# 在测试集上做预测
y_pred = model.predict(X_test_with_const)

注意:如果省略sm.add_constant步骤,拟合出的会是过原点的回归模型,和公式语法的默认输出结果不一致


内容的提问来源于stack exchange,提问作者Yuxxxxxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:54:02