zoukankan      html  css  js  c++  java
  • 坐标下降法(coordinate descent method)求解LASSO的推导

    坐标下降法(coordinate descent method)求解LASSO推导

    LASSO在尖点是singular的,因此传统的梯度下降法、牛顿法等无法使用。常用的求解算法有最小角回归法、coordinate descent method等。
    由于coordinate descent method是相对较简单的做法,放在第一个介绍。

    坐标下降法思想

    坐标下降法基于的思想很简单,就是当面对最小化一个多元函数的问题时,我们每一次迭代的时候只改变一个目标变量的值。也就是固定其他变量不动,只在该变量的维度上寻找一个使函数最小的值。这种思想类似于贪心算法。

    推导过程

    定义Loss function为:

    [frac{1}{N}sum_{i=1}^{N}(y_i-x_i^Tcdot eta) ]

    其中,(x_i)是p·1维的向量,(eta)是p·1维的向量。

    Penalty为Lasso penalty:

    [sum_{j=1}^p|eta_j| ]

    定义超参数为(lambda)

    目标函数为:

    [L=frac{1}{N}sum_{i=1}^{N}(y_i-x_i^Tcdot eta+lambdasum_{j=1}^p|eta_j|) ]

    应用坐标下降法的思想,我们固定住(x_k e x_j)的变量,然后在每一轮迭代中只优化(x_j)

    可以采用的迭代顺序是从j=1依次到p进行迭代,然后再从j=1开始。

    当固定住其他变量时,求object function的极小值就等价于求解一元LASSO的问题。

    [L=frac{1}{N}sum_{i=1}^{N}(r_i-eta_jx_{ji})^2+lambda eta_j ag{1} ]

    其中,(r_i=y_i-sum_{k e j}x_{ik}eta_k),也就是只用其他变量拟合y的残差。

    将式1稍微化简一下,可以得到:

    [L=eta_j^2frac{sum_{i=1}^{N}x_{ji}^2}{N}-2eta_jfrac{sum_{i=1}^{N}r_ix_{ji}}{N}+frac{sum_{i=1}^{N}r_i^2}{N}+lambda{|eta_j|} ]

    这是一个二次函数。由于涉及到绝对值,我们需要分两个区间讨论:(eta_j<0)(eta_j>0)

    相当于我们将(eta_j)的取值划成了两个空间,分别讨论极值。最后的极值是把这两个空间的极值再取最小值。

    • 第一个区间, (eta_j>0)
      可以观察到object function是一个开口向上二次函数,全局最小点在(eta_j=frac{2frac{sum r_ix_i}{N}-lambda}{2sum x_i^2}{N})处取得。
      但是我们这时的定义域限制在 (eta_j>0),因此需要分类讨论是否能取全局最小点:

    [if (2frac{sum r_ix_i}{N}-lambda>0):\ {eta_j^{*}=frac{2frac{sum r_ix_i}{N}-lambda}{2sum x_i^2}{N}}\ Else:\ {eta_j^{*}=0} ]

    • 第二个区间,(eta_j<0)
      全局最小点在(eta_j=frac{2frac{sum r_ix_i}{N}+lambda}{2sum x_i^2}{N})处取得。

    但是我们这时的定义域限制在 (eta_j<0),因此需要分类讨论是否能取全局最小点:

    [if (2frac{sum r_ix_i}{N}+lambda<0):\ {eta_j^{*}=frac{2frac{sum r_ix_i}{N}+lambda}{2sum x_i^2}{N}}\ Else:\ {eta_j^{*}=0} ]

    综合上面的讨论,

    • case1:(2frac{sum r_ix_i}{N}<-lambda)
      (eta_j^{*}=frac{2frac{sum r_ix_i}{N}+lambda}{2sum x_i^2}{N})

    • case2:(-lambda<2frac{sum r_ix_i}{N}<lambda)
      (eta_j^{*}=0)

    • case3:(lambda<2frac{sum r_ix_i}{N})
      (eta_j^{*}=frac{2frac{sum r_ix_i}{N}-lambda}{2sum x_i^2}{N})

    定义一个软阈值函数来统一三个case

    [eta_j^{*}=frac{ ext{soft threshold}({2frac{sum r_ix_i}{N},lambda)}}{2frac{sum x_i^2}{N}} ]

    comment

    对于用L2 loss function作为损失函数的回归问题,由于object function是关于(eta)的凸函数,因此我们一定可以找到一个全局最优点。迭代过程是收敛的。

    本文为跑得飞快的凤凰花原创,如需转载,请标明出处~
  • 相关阅读:
    IIS负载均衡Application Request Route详解第二篇:创建与配置Server Farm
    负载均衡原理与实践详解 第一篇(重新整理)
    负载均衡原理剖析与实践第一篇介绍篇
    查询优化器内核剖析第八篇:执行引擎之数据访问操作Seek(上)
    提高ASP.NET性能与可伸缩性的几个个常用方法剖析
    IIS负载均衡Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)
    负载均衡第二篇负载均衡基础知识普及
    查询优化器内核剖析第七篇:执行引擎之数据访问操作Scan
    活在当下:人这一辈子,你总的坚持点什么
    LINQ 的演变及其对 C# 设计的影响
  • 原文地址:https://www.cnblogs.com/zzqingwenn/p/10874522.html
Copyright © 2011-2022 走看看