我正在训练一个分别带有两个包的线性模型.

然而,我意识到,就变量系数而言,这两个结果之间存在巨大差异.

def test(x, y, model):
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=101)
    regr = linear_model.LinearRegression()
    regr.fit(x_train, y_train)
    
    lr = sm.OLS(y_train, x_train).fit()
    print(lr.params)
    
    print(regr.coef_)

Above is the code I used. Surprisingly, the coefficient difference is so huge that it gives completely different predictions.enter image description here

这两个模型都以相同的顺序列出变量,所以我现在真的很困惑.你知道哪里出了问题吗?谢谢!

推荐答案

这里的问题似乎是如何在两个不同的包中处理拦截.

对于statsmodels.regression.linear_model.OLS,默认情况下不包括截取,需要使用sm.add_constant(X)手动添加.

相反,如参数fit_intercept=True所示,默认情况下sklearn.linear_model.LinearRegression包括截取.sklearn中的截距与系数分开存储,并且可以用.intercept_查看.

为了确保公平的比较,两个模型都应该配置为以相同的方式处理截距项.您可以在statsmodels模型中添加一个常量:

X = sm.add_constant(X)

或者在您的sklearn型号中禁用拦截:

LinearRegression(fit_intercept=False)

确保相应地调整两个模型,然后再次比较系数.

Python相关问答推荐

有没有办法清除气流中的僵尸

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

如何将不同长度的新列添加到现有的框架中

Polars Select 多个元素产品

如何在不使用字符串的情况下将namedtuple属性传递给方法?

KNN分类器中的GridSearchCV

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

无法使用python.h文件; Python嵌入错误

在Python和matlab中显示不同 colored颜色 的图像

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

对某些列的总数进行民意调查,但不单独列出每列

如何让剧作家等待Python中出现特定cookie(然后返回它)?

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

删除所有列值,但判断是否存在任何二元组

当独立的网络调用不应该互相阻塞时,'

使用Python更新字典中的值

将JSON对象转换为Dataframe

如何启动下载并在不击中磁盘的情况下呈现响应?

* 动态地 * 修饰Python中的递归函数