Scikit learn statsmodels和sklearn的不同线性回归系数

Scikit learn statsmodels和sklearn的不同线性回归系数,scikit-learn,linear-regression,statsmodels,Scikit Learn,Linear Regression,Statsmodels,我计划使用sklearn linear_模型绘制线性回归结果图,并使用statsmodels.api获得学习结果的详细摘要。然而,这两个包在相同的输入上产生非常不同的结果 例如,sklearn的常数项为7.8e-14,而statsmodels的常数项为48.6。(在使用这两种方法时,我在x中为常量项添加了一列1)这两种方法的代码都很简洁: # Use statsmodels linear regression to get a result (summary) for the model. de

我计划使用sklearn linear_模型绘制线性回归结果图,并使用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绘制三维图,sklearn结果似乎不是一个很好的近似值。有什么解释?我仍然希望进行可视化,因此解决sklearn线性回归实现中的问题将非常有帮助。

你这么说吗

I added a column of 1's in x for constant term when using both methods
但是线性回归的结果表明

LinearRegression(fit_intercept=True, [...])
默认情况下,它适合截取。这可以解释为什么常数项中存在差异

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

你这么说吗

I added a column of 1's in x for constant term when using both methods
但是线性回归的结果表明

LinearRegression(fit_intercept=True, [...])
默认情况下,它适合截取。这可以解释为什么常数项中存在差异

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