如何估计 Lasso 或具有 >50K 变量的岭回归中的收缩参数?

机器算法验证 r 套索 岭回归 高维
2022-01-23 18:41:51

我想对具有超过 50,000 个变量的模型使用 Lasso 或岭回归。我想使用 R 中的软件包来执行此操作。如何估计收缩参数()?λ

编辑:

这是我要达到的目的:

set.seed (123)
Y <- runif (1000)
Xv <- sample(c(1,0), size= 1000*1000,  replace = T)
X <- matrix(Xv, nrow = 1000, ncol = 1000)

mydf <- data.frame(Y, X)

require(MASS)
lm.ridge(Y ~ ., mydf)

plot(lm.ridge(Y ~ ., mydf,
              lambda = seq(0,0.1,0.001)))

在此处输入图像描述

我的问题是:我怎么知道哪个最适合我的模型?λ

3个回答

cv.glmnetR 包glmnet中的函数在网格上进行自动交叉验证λ用于的值1-惩罚回归问题。特别是对于套索。glmnet 包还支持更通用的弹性网络惩罚,它是12处罚。从 1.7.3 版开始。的包裹采取α等于 0 的参数给出岭回归(至少,直到最近才记录此功能)。

交叉验证是对每个预期泛化误差的估计λλ可以明智地选择作为这个估计的最小者。cv.glmnet函数返回两个值λ. 最小化器 ,lambda.min和总是较大的lambda.1se, 这是一个启发式选择λ生成一个不太复杂的模型,该模型在估计的预期泛化误差方面的性能在最小值的一个标准误差内。在 glmnet 包中可以选择不同的损失函数来测量泛化误差。参数type.measure指定损失函数。

或者,R 包mgcv包含使用二次惩罚进行估计的广泛可能性,包括自动选择惩罚参数。如评论中所述,实施的方法包括广义交叉验证和 REML。更多细节可以在包作者的书中找到:Wood, SN (2006) Generalized Additive Models: an Introduction with R, CRC。

这个答案是 MATLAB 特定的,但是,基本概念应该与您习惯使用 R 的概念非常相似......

对于 MATLAB,您可以选择在启用交叉验证的情况下运行 lasso。

如果这样做,套索函数将报告两个关键参数值

  1. 最小化交叉验证均方误差的 lambda 值
  2. 具有最大收缩量的 lambda 值,其 CVMSE 在最小值的一个标准误差内。

你还会得到一个漂亮的小图表,你可以用它来检查 lambda 和 CVMSE 之间的关系

在此处输入图像描述

通常,您会选择介于蓝线和绿线之间的 lambda 值。

以下博客文章包含一些基于一些示例的演示代码

Tibshirani, R. (1996)。通过套索进行回归收缩和选择。J.皇家。统计学家。SOC B.,卷。58,第 1 期,第 267-288 页)。

http://blogs.mathworks.com/loren/2011/11/29/subset-selection-and-regularization-part-2/

我在使用有效 AIC 方面取得了很好的成功,即使用具有有效自由度的 AIC - 有关有效 df,请参见 Gray JASA 87:942 1992 这是为L2rms线性和逻辑模型的 R 包中的惩罚,该rms pentrace函数可用于求解优化有效 AIC 的收缩系数。Harrell et al Stat in Med 17:909, 1998 中的案例研究显示了如何进行差异收缩(例如,更多的相互作用收缩)。