使用 Scikit-learn 与 Statsmodels 进行线性回归
Posted
技术标签:
【中文标题】使用 Scikit-learn 与 Statsmodels 进行线性回归【英文标题】:Linear Regression using Scikit-learn vs Statsmodels 【发布时间】:2017-12-31 22:29:47 【问题描述】:我想检查在使用 Scikit-Learn 和 Statsmodels.api 解决多元线性回归问题时是否产生相同的输出。我分 3 个部分(按他们提到的顺序):Statsmodels(不带截距)、Statsmodels(带截距)和 SKL。正如预期的那样,我的 SKL 系数和 R(square) 与 Statsmodels(带截距)的相同,但我的 SKL 均方误差与 Statsmodels(不带截距)相同。
我将分享我的笔记本代码;这是一段相当基本的代码,因为我刚刚开始使用机器学习应用程序。请仔细检查并告诉我为什么会这样。此外,如果您能分享您对任何低效代码的见解,我将不胜感激。代码如下:
https://github.com/vgoel60/Linear-Regression-using-Sklearn-vs-Statsmodel.api/blob/master/Linear%20Regression%20Boston%20Housing%20Prices%20using%20Scikit-Learn%20and%20Statsmodels.api.ipynb
【问题讨论】:
您知道链接指向您计算机上运行的本地服务器吗?它不能被其他人访问。在正文中发布您的代码。 该死!不,我没有意识到这一点。我从未在本地服务器上使用过任何应用程序; Jupyter 笔记本在我的电脑上的工作方式。我只是将代码发布在正文中。 我创建了一个 Github 帐户并将此代码上传到那里。它现在应该可以正常工作了。谢谢, 【参考方案1】:你犯了一个错误,这解释了奇怪的结果。当您使用 scikit-learn 从线性模型进行预测时,您会这样写:
predictions2 = lm.predict(xtest2)
请注意,您使用的是 lm
模型,这是第一个 statsmodels 回归产生的模型。相反,你应该写:
predictions2 = lm2.predict(xtest2)
执行此操作时,结果符合预期。
【讨论】:
这回答了我的问题。非常感谢。以上是关于使用 Scikit-learn 与 Statsmodels 进行线性回归的主要内容,如果未能解决你的问题,请参考以下文章
在 scikit-learn 库中使用 sgd 求解器的 SGDClassifier 与 LogisticRegression
使用 scikit-learn 判断给定文本是不是与先前学习的文本相似
将 pandas TimeStamp 与 scikit-learn 一起使用