如何使用优化函数在 R 中实现套索

机器算法验证 优化 套索
2022-04-15 10:53:24

如您所知,套索是一种流行的变量选择方法,其形式为

(yxβ)(yXβ)+λi|βi|

首先是可以在 R 中使用 optim() 函数来最小化这个问题吗?示例代码可以像

x=matrix(rnorm(100),ncol=20)
y=rowSums(x)
f<-function(x,y,l,beta){
  beta=as.matrix(beta)
  sum((y-x%*% beta)^2) +l*sum(abs(beta))
}
optim(rep(0,ncol(x)),f,method='CG',x=x,y=y,l=1)

其他问题是,2)上面的代码是真的吗?3)如何强制系数完全为零?

请注意,我不想使用 LARS、GLMNET 之类的软件包或......只是优化或 nlm 功能。谢谢

1个回答

使用凸平滑优化的标准算法,如 CG、梯度下降等,您往往会得到与 lasso 相似的结果,但系数不会完全为零。被最小化的函数在零处不可微,所以除非你完全达到零,否则你可能会得到所有非零系数(但有些非常小,取决于你的步长)。这就是为什么套索和类似的专门算法很有用。

但是,如果您坚持使用这些算法,您可以截断值,例如,一旦您获得“最佳”解决方案,将所有 beta 设置为 1e-9 或其他值为零。