【问题标题】:Different Linear Regression Coefficients with statsmodels and sklearn具有 statsmodels 和 sklearn 的不同线性回归系数
【发布时间】:2016-11-21 22:24:59
【问题描述】:

我打算使用 sklearn linear_model 来绘制线性回归结果图,并使用 statsmodels.api 来获取学习结果的详细摘要。但是,这两个包在相同的输入上产生非常不同的结果。

例如,sklearn 的常数项是 7.8e-14,但 statsmodels 的常数项是 48.6。 (当使用这两种方法时,我在 x 中添加了一列 1 作为常数项)我的两种方法的代码都很简洁:

# Use statsmodels linear regression to get a result (summary) for the model.
def reg_statsmodels(y, x):
    results = sm.OLS(y, x).fit()
    return results

# Use sklearn linear regression to compute the coefficients for the prediction.
def reg_sklearn(y, x):
    lr = linear_model.LinearRegression()
    lr.fit(x, y)
    return lr.coef_

输入太复杂,无法在此处发布。有没有可能是单数输入 x 导致了这个问题?

通过使用 PCA 制作 3-d 图,sklearn 结果似乎不是一个很好的近似值。有哪些解释?我还是想做一个可视化,所以解决sklearn线性回归实现中的问题会很有帮助。

【问题讨论】:

    标签: scikit-learn linear-regression statsmodels


    【解决方案1】:

    你这么说

    I added a column of 1's in x for constant term when using both methods
    

    但是 LinearRegression 的 documentation 这么说

    LinearRegression(fit_intercept=True, [...])
    

    默认情况下它适合拦截。这可以解释为什么你在常数项上有差异。

    现在对于其他系数,当两个变量高度相关时,可能会出现差异。让我们考虑两列相同的最极端情况。然后减少两者前面的系数可以通过增加另一个来补偿。这是我要检查的第一件事。

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2018-08-18
      • 2021-09-20
      • 2021-02-18
      • 1970-01-01
      • 2018-05-16
      • 2021-12-26
      • 2021-06-19
      • 2014-07-23
      相关资源
      最近更新 更多