python - R lm 与 Python sklearn linear_model

标签 python r scikit-learn regression linear-regression

当我学习 Python SKlearn 时,我遇到的第一个例子是 Generalized Linear Models .

第一个例子的代码:

from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2,2]], [0, 1,2])
reg.fit
reg.coef_
array([ 0.5,  0.5])

这里我假设 [[0, 0], [1, 1], [2,2]] 表示包含 x1 = c(0,1,2 )x2 = c(0,1,2) 以及 y = c(0,1,2)

我立即开始认为 array([ 0.5, 0.5])x1x2 的系数。

但是,这些估计是否存在标准误差? t 检验 p 值、R2 和其他数字呢?

然后我尝试在 R 中做同样的事情。

X = data.frame(x1 = c(0,1,2),x2 = c(0,1,2),y = c(0,1,2))
lm(data=X, y~x1+x2)
Call:
lm(formula = y ~ x1 + x2, data = X)

#Coefficients:
#(Intercept)           x1           x2  
#  1.282e-16    1.000e+00           NA  

显然 x1x2 完全线性相关,因此 OLS 会失败。为什么 SKlearn 仍然有效并给出这个结果?我是否以错误的方式获得sklearn?谢谢。

最佳答案

两种解决方案都是正确的(假设 NA 的行为类似于零)。哪种解决方案更受青睐取决于 OLS 估计器使用的数值求解器。

sklearn.linear_model.LinearRegression 基于 scipy.linalg.lstsq,后者又调用 LAPACK gelsd 例程,如下所述:

http://www.netlib.org/lapack/lug/node27.html

它特别指出,当问题等级不足时,它会寻求最小范数最小二乘法解。

如果您想支持其他解决方案,您可以使用坐标下降求解器,在 Lasso 类中实现了一点点 L1 惩罚:

>>> from sklearn.linear_model import Lasso
>>> reg = Lasso(alpha=1e-8)
>>> reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

Lasso(alpha=1e-08, copy_X=True, fit_intercept=True, max_iter=1000,
   normalize=False, positive=False, precompute=False, random_state=None,
   selection='cyclic', tol=0.0001, warm_start=False)
>>> reg.coef_
array([  9.99999985e-01,   3.97204719e-17])

关于python - R lm 与 Python sklearn linear_model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968999/

相关文章:

r - 升级到 macOS Sierra 后无法从终端运行 R

r - 将 'list' 类型的列转换为数据框中的多列

r - 制作新的绘图窗口时是否可以在屏幕上指定位置?

python - DBSCAN sklearn 非常慢

python - 在 virtualenv : installed sklearn module not available 中运行 Jupyter notebook

python - Azure CLI 在 `az component update` 上失败

python - 如何使用 Python 从网站获取并验证 JSON 数据?

python - YAML 解析为对象(PyYAML Python3)

python - 我正在尝试使用自定义 RBF 内核在 scikit-learn 中实现 SVM,但它显示错误,该怎么办?

python - 是否可以使用 python 脚本(或任何其他编程语言脚本)来限制其他应用程序使用的资源(如 RAM、CPU 使用率)?