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

不同包实现的同算法为何生成差异极大的线性回归模型?

线性回归模型系数差异的原因及解决办法

核心问题在于两个库对截距项的默认处理逻辑不同:

  • sklearn.linear_model.LinearRegression()默认自动为模型添加截距项,拟合的是带截距的线性公式:(y = \beta_0 + \beta_1x_1 + ... + \beta_nx_n)
  • statsmodels.api.OLS()默认不添加截距项,仅拟合无截距的线性公式:(y = \beta_1x_1 + ... + \beta_nx_n)

你的代码中,sm.OLS(y_train, x_train)使用的特征矩阵x_train没有常数项,而sklearn模型自动添加了截距,导致两个模型的拟合目标完全不同,最终系数和预测结果出现巨大差异。

解决办法

有两种方式让两个模型的拟合逻辑统一:

  1. 给statsmodels的OLS添加常数项
    修改statsmodels的模型初始化代码,用sm.add_constant()给特征矩阵加上常数列:

    lr = sm.OLS(y_train, sm.add_constant(x_train)).fit()
    

    此时输出的lr.params第一个值是截距,后续值会和regr.coef_完全对应(顺序一致)。

  2. 让sklearn模型不拟合截距
    初始化LinearRegression时设置fit_intercept=False,关闭自动添加截距的功能:

    regr = linear_model.LinearRegression(fit_intercept=False)
    

    这样两个模型都仅拟合变量系数,结果会一致。

只要统一了截距项的处理逻辑,两个模型的变量系数和预测结果就会匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:22:09