前言

我在本科的时候接触过用LASSO筛选变量的方法,但了解不多。这几天在公司实习,学习到特征选择,发现还有个LARS是经常和LASSO一起被提起的,于是我临时抱佛脚,大概了解了一下LARS的原理。

在看文章的时候发现很多人提到Solution Path这样一个概念,起初很费解,后来看了Efron等人的"Least Angle Regression"论文,算是明白了一些。不过本人由于懒,原文后面数学证明的部分直接跳过了,这里推荐想了解LASSO和LARS的人先读一下这篇论文,极其有助于理解。

在介绍LARS之前,需要简单讲一下它的前辈:Foward Stepwise Regression(向前逐步回归)、Stagewise Regression(“逐步的逐步回归”)、还有LASSO回归。

Stepwise(逐步回归)

为什么会需要对变量进行逐步回归,这是因为有的时候备选变量太多,全部丢进回归模型会导致模型复杂度过高、甚至是拟合精度下降。逐步回归是一种挑选变量的方式,就像买萝卜一样,从最大的萝卜挑起,再挑次大的,次次大的,一直到挑够10个萝卜,然后去结账。但挑选变量不是买萝卜这么简单,变量之间或多或少有相关性,而我们用逐步回归挑选变量的时候,可能会错过一些和现有变量相关度高,而又很重要的变量。

这是逐步回归模型本身的问题。逐步回归的原理是:先挑一个和 y 相关度最高的变量 x1,然后跑 yx1 的回归,这时 x1 的回归系数会等于 x1y 的相关系数ρ1,模型的残差为 r1,再从剩下变量中选出和 r1 相关系数(绝对值)最大的变量 x2,再把 ρ2x2 加入回归中,以此类推。

注意,线性回归当前选用的 X 组成一个向量空间,y_fity 在这个向量空间上的投影,而残差 r 垂直于这个向量空间,即残差和当前所有变量无关。

那么在挑选下一个变量时,我们会选择那些与 r 相关的变量,而忽视那些与 r 无关,但和 X 有关的变量。这是逐步回归的一大缺点。

那么,有没有一种不那么激进的方法呢?有,其一便是Stagewise法。

Stagewise

Stepwise在挑选完变量后,直接把 ρx 加入模型中,但Stagewise不这么做,他一次加一部分,一次加一部分,这一部分记作 εx。ε 可以理解为步长,是一个很小的数。

初始时模型中没有变量,所有 β = 0,我们求得与 y 最相关的变量是 x1,于是从 β1 = ±ε 开始,按增量 ±ε 改变 β1(步长正负取决于相关系数的正负),而随着添加进回归的 ±εx 增多,x 和模型残差的相关系数会越来越小,或者说,残差中越来越多的部分被x所解释。当 corr(x1, r) 低至一个阈值时——这个阈值就是残差和次位赢家 x2 的相关系数 corr(x2, r) ,我们开始把 ±εx2 加进模型。这时 x1 的系数 β1 固定不变了,我们以步长 ±ε 改变 β2,降低 corr(x2, r’) ,直到 corr(x2, r’) = max(corr(xi, r’)),以此类推。

这个方法相比Stepwise要谨慎许多,但显而易见的是,这个模型的运算速度受步长限制,当步长很小时,模型的运算十分复杂。

LARS

LARS的思路很简单:我们让步长ε尽量大一点,再尽量大一点。

对LARS(Least Angle Regression)的简单理解相关推荐

  1. 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...

  2. 1.1.7. Least Angle Regression(最小角回归)和 1.1.8. LARS Lasso

    1.1.7. Least Angle Regression 简介 求极值的算法有很多,有基于梯度的,例如: 常规梯度下降.坐标梯度下降.最速梯度下降.共轭梯度下降 也有基于样本和角度的,例如: 前向选 ...

  3. 最小角回归(Least Angle Regression)

    最小角回归和其他方法的比较 逐步选择(forward selection)算法(例如forward stepwise regression)在进行子集选择的时候可能会显得太具有"侵略性&qu ...

  4. 6.最小角回归(Least Angle Regression)

    最小角回归是针对高维数据的回归算法. least angle regression 的优势如下: 当p>>n时计算是非常高效的.(比如当维数远大于点数) 它和前向选择计算速度差不多,并且和 ...

  5. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  6. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  7. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  8. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  9. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

最新文章

  1. java Random.nextInt()方法
  2. Office Web Apps证书的申请步骤讲解
  3. php yii 模板引擎,模板引擎(Template Engines)
  4. Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log
  5. hihoCoder1233(2015北京网络赛H题)
  6. 提高方面级情感分析的性能:一种结合词汇图和句法图的方法
  7. Cortex-M3-指针和野指针
  8. 静态时序分析——On-chip Variation
  9. IDC MarketScape:华为云IoT物联网平台位居领导者象限
  10. 解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题 [转]
  11. Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可 1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
  12. 《机电传动控制》第三次作业
  13. Linux中drwxr-xr-x.的意思和文件权限详解
  14. BigDecimal的除法
  15. Android 10 SystemUI 如何隐藏状态栏耳机图标和定位图标
  16. Android学习日记(yzy):SQLite数据库和baseAdapter
  17. LeetCode1419-数青蛙
  18. 数据分析,如何支持管理层决策
  19. 全景中的包围曝光和HDR应用
  20. outlook邮箱邮件大小限制_Outlook 中的邮件规则容量限制

热门文章

  1. MATLAB基础应用精讲-【基础知识篇】脚本文件
  2. 这些年我要读的书【不断更新中】
  3. STM32DAC输出遇到的问题
  4. 计算机软件著作权源码要求,计算机软件著作权登记源代码-20210527121530.docx-原创力文档...
  5. 关于滑动时对背景动态高斯模糊的自定义控件
  6. 比较详细的HC-SR04超声波传感器数据及机器人避障的应用方法
  7. 求最大公约数及求多个数的最大公约数
  8. [ Java ] 实现两个数加减乘除的简易计算器
  9. 智慧校园是实现智慧教育的必由之路
  10. 洛谷 P3387 【模板】缩点 tarjan 虚拟头节点和虚拟尾节点