当 lambda = 0 时,岭系数估计值与 OLS 估计值不匹配

Ridge coefficient estimates do not match OLS estimates when lambda = 0

我试图理解为什么岭回归系数估计(通过 R 中的 glmnet 包)在 lambda = 0 的情况下与普通最小二乘法 (OLS) 估计不匹配。我已经看到关于此主题的其他一些帖子,但其中 none 回答了我的问题。

这是一个最小的代表:

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 系数匹配,但是,它们不匹配(截距除外)。这是怎么回事?

虽然他们的 objective 相同,但 glmnet 使用 coordinate descent to find the parameters, lm uses QR decomposition

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

ridge1 <- 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