【问题标题】:Ridge coefficient estimates do not match OLS estimates when lambda = 0当 lambda = 0 时,岭系数估计值与 OLS 估计值不匹配
【发布时间】:2020-11-25 00:21:19
【问题描述】:

我试图理解为什么岭回归系数估计(通过 R 中的 glmnet 包)在 lambda = 0 的情况下与普通最小二乘 (OLS) 估计不匹配。我见过其他几个关于这个主题的帖子,但没有一个回答我的问题。

这是一个最小的代表:

library(glmnet)
set.seed(1)

X <- matrix(rnorm(90), ncol = 9, nrow = 10, byrow = TRUE)
y <- matrix(rnorm(10), nrow = 10, ncol = 1)
X_scaled <- scale(X)

ridge1 <- glmnet(X_scaled, y, alpha = 0, lambda = 0)
lm1 <- lm(y~X_scaled)

这会导致:

> coef(lm1)
(Intercept)   X_scaled1   X_scaled2   X_scaled3   X_scaled4   X_scaled5   X_scaled6   X_scaled7   X_scaled8   X_scaled9 
  0.1123413   4.4105824  -4.1680260   4.9959933   2.2281174   3.0542372   3.8673192  -2.5323069   0.4444550   5.0073531
 
> coef(ridge1)
10 x 1 sparse Matrix of class "dgCMatrix"
                    s0
(Intercept)  0.1123413
V1           4.1667913
V2          -3.9353740
V3           4.7692778
V4           2.1239412
V5           2.8683159
V6           3.6622262
V7          -2.3987696
V8           0.4305574
V9           4.7282300

当 lambda=0 时,岭回归的系数估计值应与 OLS 系数匹配,但是,这些不匹配(截距除外)。这是怎么回事?

【问题讨论】:

    标签: r regression glmnet


    【解决方案1】:

    虽然他们的目标相同,但glmnet 使用coordinate descent 查找参数,lm 使用QR decomposition

    如果你降低glmnet 的收敛阈值,你会得到类似的答案。

    ridge1 &lt;- glmnet(X_scaled, y, alpha = 0, lambda = 0, standardize = F, thresh = 1E-100)

                        s0
    (Intercept)  0.1123413
    V1           4.4105824
    V2          -4.1680260
    V3           4.9959933
    V4           2.2281174
    V5           3.0542372
    V6           3.8673192
    V7          -2.5323069
    V8           0.4444550
    V9           5.0073531
    

    【讨论】:

    • 谢谢@Feng Mai,这很有帮助。这是两者之间的唯一区别吗?我目前正在处理一个更大的数据集(大约 1500 个观察值 x 800 个预测变量),并且通过 lm 的系数与通过 ridge 的系数有很大不同,惩罚为零。将阈值从 1e-14 更改为 1e-50 时,我的岭回归系数根本不会改变。例如,前 3 个预测变量的系数为 (0.03, -0.30, 0.10) 到 lm,但系数为 (0.03, -0.0004, -0.0002) 到岭。较大的数据集是否会出现这种差异?
    • 检查 glmnet pmax 和 dfmax 的参数。更改这些可能会导致您的结果匹配 lm(或几乎)
    • @Oliver 既然 dfmax 和 pmax 限制了岭模型中的变量数量(以及非零变量的数量),为什么更改这些参数会导致结果匹配?为了匹配 lm 结果,我要求所有变量无论如何都允许为非零,这在 glmnet 中默认情况下用于岭回归。
    • @bob 是的,您可以使用更大的矩阵进行模拟。它们的系数应该相同。请注意, glmnet 将矩阵作为输入,而 lm 可以采用数据帧。因此,当您将数据框转换为矩阵时,请确保正确处理分类变量(例如,创建虚拟变量)。
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2012-11-28
    • 1970-01-01
    • 2016-11-28
    • 2012-10-06
    相关资源
    最近更新 更多