statsmodels 和 sklearn 的不同线性回归系数
Different Linear Regression Coefficients with statsmodels and sklearn
我计划使用 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_
此处输入太复杂post。是否可能是单个输入 x 导致了此问题?
通过使用 PCA 制作 3-d 图,sklearn 结果似乎不是一个很好的近似值。有哪些解释?我还是想做个可视化,所以对修复sklearn线性回归实现中的问题很有帮助
你这么说
I added a column of 1's in x for constant term when using both methods
但是 LinearRegression 的 documentation 表示
LinearRegression(fit_intercept=True, [...])
它默认适合截距。这可以解释为什么你在常数项上有差异。
现在对于其他系数,当其中两个变量高度相关时,可能会出现差异。让我们考虑最极端的情况,其中两列是相同的。那么降低两者中任何一个前面的系数都可以通过增加另一个来补偿。这是我要检查的第一件事。
我计划使用 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_
此处输入太复杂post。是否可能是单个输入 x 导致了此问题?
通过使用 PCA 制作 3-d 图,sklearn 结果似乎不是一个很好的近似值。有哪些解释?我还是想做个可视化,所以对修复sklearn线性回归实现中的问题很有帮助
你这么说
I added a column of 1's in x for constant term when using both methods
但是 LinearRegression 的 documentation 表示
LinearRegression(fit_intercept=True, [...])
它默认适合截距。这可以解释为什么你在常数项上有差异。
现在对于其他系数,当其中两个变量高度相关时,可能会出现差异。让我们考虑最极端的情况,其中两列是相同的。那么降低两者中任何一个前面的系数都可以通过增加另一个来补偿。这是我要检查的第一件事。