具有statsmodels和sklearn的不同线性回归系数

时间:2016-07-19 06:59:14

标签: scikit-learn linear-regression statsmodels

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

例如,来自sklearn的常数项是7.8e-14,但来自statsmodels的常数项是48.6。 (当使用两种方法时,我在x中添加了1列的常量项)我的两种方法的代码都是succint:

# 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线性回归实现中修复问题将非常有用。

1 个答案:

答案 0 :(得分:1)

你说那个

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

但LinearRegression的documentation表示

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

默认情况下它符合截距。这可以解释为什么你在常数项中存在差异。

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