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

关于statsmodels线性回归fit()方法:多次调用是否覆盖模型?

问题解答

咱们先直接说核心结论:你每次调用fit()都正确拟合了对应数据集的线性回归模型,但因为你把每次的拟合结果都赋值给了同一个ols变量,后面的拟合结果会完全覆盖前面的。所以你最后调用ols.predict(scores)时,用的是第三次拟合出来的模型参数。

接下来拆解一下原因和细节:

  • 在statsmodels里,sm.OLS(y, X)会创建一个全新的模型实例,这个实例只关联你传入的当前X和y数据。然后调用.fit()方法时,会基于这个实例对应的数据集计算回归参数,返回一个RegressionResults对象——这个对象就包含了当前模型的所有拟合结果(系数、截距、统计量等等)。
  • 你的代码里,每次拟合后都把结果赋值给了ols变量:第一次拟合后ols指向第一个模型的结果,第二次拟合后ols被更新为第二个模型的结果,第三次则覆盖成第三个模型的结果。前两次的拟合结果因为没有其他变量引用,会被Python的垃圾回收机制清理掉,没法再调用它们的predict方法了。

如果想保留每次的拟合结果,方便后续分别使用,只需要给每个拟合结果分配不同的变量名就行,比如ols1、ols2、ols3,像下面这样修改代码:

import numpy as np
import statsmodels.api as sm

# First call - 用ols1保存结果
X = [377, 295, 457, 495, 9] # independent variable
y = [23, 79, 16, 41, 40] # dependent variable
X = sm.add_constant(X)
ols1 = sm.OLS(y,X).fit()
#print(ols1.summary())

# Second call - 用ols2保存结果
X = [243, 493, 106, 227, 334]
y = [3, 5, 1, 62, 92]
X = sm.add_constant(X)
ols2 = sm.OLS(y,X).fit()
#print(ols2.summary())

# Third call - 用ols3保存结果
X = [412, 332, 429, 96, 336]
y = [30, 1, 99, 4, 33]
X = sm.add_constant(X)
ols3 = sm.OLS(y,X).fit()
#print(ols3.summary())

scores = [9, 219, 200, 134, 499]
scores = sm.add_constant(scores)
# 现在可以分别用不同模型预测
print("第一次模型预测结果:", ols1.predict(scores))
print("第二次模型预测结果:", ols2.predict(scores))
print("第三次模型预测结果:", ols3.predict(scores))

这样每次的拟合结果都会被保留下来,你可以随时调用任意一个模型的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:19