如何将迭代重加权最小二乘 (IRLS) 方法应用于 LASSO 模型?

机器算法验证 物流 广义线性模型 特征选择 套索 凸的
2022-03-20 00:33:50

我已经使用IRLS 算法编写了逻辑回归我想应用LASSO 惩罚以自动选择正确的功能。在每次迭代中,解决以下问题:

(XTWX)δβ^=XT(yp)

λ是一个非负实数。我没有像The Elements of 中建议的那样惩罚拦截。统计学习同样适用于已经为零的系数。否则,我从右侧减去一个术语:

XT(yp)λ×sign(β^)

但是,我不确定 IRLS 算法的修改。这是正确的做法吗?


编辑:虽然我对此没有信心,但这是我最终想出的解决方案之一。有趣的是这个解决方案对应于我现在对 LASSO 的理解。每次迭代确实有两个步骤,而不仅仅是一个:

  • 第一步与之前相同:我们对算法进行迭代(好像λ=0在上面的梯度公式中),
  • 第二步是新的:我们对每个组件应用一个软阈值(除了组件β0,对应于向量的截距)β第一步获得。这称为迭代软阈值算法

i1,βisign(βi)×max(0,|βi|λ)

4个回答

这个问题通常通过坐标下降拟合来解决(见这里)。这种方法在数值上更安全更有效,在算法上更容易实现并且适用于更通用的模型阵列(也包括 Cox 回归)。Rglmnet中提供了 R 实现这些代码是开源的(部分在 C 中,部分在 R 中),因此您可以将它们用作蓝图。

LASSO 损失函数在每个轴上的不连续性为零,因此 IRLS 会遇到问题。我发现顺序最小优化 (SMO) 类型的方法非常有效,参见例如

http://bioinformatics.oxfordjournals.org/content/19/17/2246

带有 MATLAB 软件的版本是

http://bioinformatics.oxfordjournals.org/content/22/19/2348

该软件可在此处获得:

http://theoval.cmp.uea.ac.uk/~gcc/cbl/blogreg/

基本思想是一次优化一个系数,并测试一次是否跨越一个系数的不连续性,这很容易,因为您正在执行标量优化。这听起来可能很慢,但实际上非常有效(尽管我希望从那以后开发出更好的算法——可能是由 Keerthi 或 Chih-Jen Lin 开发的,他们都是这类事情的领先专家)。

您可以查看论文:Efficient L1-regularizedlogistic regression,这是一种基于 IRLS 的 LASSO 算法。关于实施,该链接可能对您有用(http://ai.stanford.edu/~silee/softwares/irlslars.htm)。

LASSO 问题的 IRLS 如下:

argminx12Axb22+λx1=argminx12Axb22+λxTWx

在哪里W是对角矩阵 -Wi,i=1|xi|.
这来自x1=i|xi|=ixi2|xi|.

现在,以上只是Tikhonov 正则化
然而,由于W取决于x必须迭代地解决它(这也取消了 Tikhonov 正则化中的 2 因子,作为xTWx关于x在持有的同时x常数是diag(sign(x))这等于Wx):

xk+1=(ATA+λWk)1ATb

在哪里Wi,iK=1|xik|.

初始化可以通过W=I.

请注意,这不适用于较大的值λ你最好使用 ADMM 或坐标下降。