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

循环构建多线性回归模型报错:TypeError问题求助

解决循环构建Statsmodels线性回归模型时的TypeError问题

我看到你在尝试批量为多个结果变量构建线性回归模型时碰到了TypeError: 'type' object is not subscriptable的错误,这是代码里两个小语法疏漏导致的,咱们来一步步修正:

错误原因分析

导致报错的两个关键问题:

  • sm.OLS实例化方式错误:你用了方括号[]来传递自变量和因变量,但sm.OLS是一个类,必须用圆括号()来创建实例,方括号仅用于列表、字典这类序列的下标访问,所以会触发"type object is not subscriptable"的错误。
  • fit方法调用缺少括号:model.fit只是引用了方法本身,必须加上()即model.fit()才能执行模型拟合并返回结果对象,否则你拿到的不是拟合后的模型结果,自然无法调用summary()方法。

修正后的完整代码

我还优化了代码结构,把单独定义的y1-y5改成直接用列名列表,让代码更简洁易维护:

import statsmodels.api as sm
# 假设data是已经加载完成的Pandas DataFrame
x = data[["Prod Order Quantity", "Print Type Complexity "]]
# 直接用结果变量的列名列表,无需单独定义每个y变量
all_outcome_cols = [
    "Per Unit Downtime and setup",
    "Per Unit Runtime",
    "Setup and downtime",
    "Total Runtime",
    "Total Variable Cost over Runtime"
]
# 添加常数项到自变量矩阵
Xc = sm.add_constant(x)

def train_all_models(outcome_columns):
    for col in outcome_columns:
        # 获取当前迭代的因变量
        y = data[col]
        # 用圆括号正确实例化OLS模型
        model = sm.OLS(y, Xc)
        # 调用fit()方法完成模型拟合
        results = model.fit()
        # 添加分隔标题,方便区分不同变量的模型结果
        print(f"=== 模型结果: {col} ===")
        print(results.summary())
        print("\n" + "="*100 + "\n")

# 调用函数批量训练模型并输出结果
train_all_models(all_outcome_cols)

额外优化说明

  • 改用列名列表代替单独的y变量,减少冗余代码,后续新增或修改结果变量时只需调整列表即可。
  • 添加了分隔标题和分割线,让不同模型的输出结果更易区分,方便查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:32:42