机器学习稀疏L1正则 - 修正的LARS算法和lasso
来源:互联网 发布:酒店网管软件 编辑:程序博客网 时间:2024/06/07 09:31
一、算法简介
在小弟的上一篇文章中,简单的介绍了LARS算法是怎么回事。主要参考的是Efron等人的经典文章least angle regression。在这篇文章中,还提到了一些有趣的看法,比如如何用LARS算法来求解lasso estimate和forward stagewise estimate。这种看法将我对于模型选择的认识提升了一个层次。在这个更高的层次下看回归的变量选择过程,似乎能有一些更加创新的想法。
lasso estimate的提出是Tibshirani在1996年JRSSB上的一篇文章Regression shrinkage and selection via lasso。所谓lasso,其全称是least absolute shrinkage and selection operator。其想法可以用如下的最优化问题来表述:
在限制了
我们熟悉如何求解限制条件为等号时,回归方程的求解。也就是用lagrange乘子法求解。但是对于这种,限制条件是不等号的情况,该如何求解,则有两种想法。第一种,也是我比较倾向于的方法,是利用计算机程序,对
lasso estimate具有shrinkage和selection两种功能,shrinkage这个不用多讲,本科期间学过回归分析的同学应该都知道岭估计会有shrinkage的功效,lasso也同样。关于selection功能,Tibshirani提出,当
在我的上一篇文章中,提到了Efron对于逐步回归的一种看法,就是在某个标准之下(比如LARS的标准就是要保证当前残差和已入选变量之间的相关系数相等,也就是当前残差在已入选变量的构成空间中的投影,是那些变量的角平分线)选择一条solution path,在这个solution path上proceed,不断吸收新的变量进入,然后调整solution path 继续proceed。那么对于求解lasso的算法,也有一个相应的对应。Efron提出了一种修正的LARS算法,可以用修正的LARS算法来求解所有的lasso estimates。下面我介绍一下这种修正的LARS算法。
首先假设我们已经完成了几步LARS steps。这时候,我们已经有了一个回归变量集,我们记这个回归变量集为
为了继续进行下一步,我们先给出一个向量的表达式,然后再解释一下它
将LARS的solution path对应到lasso estimate的path上,这种对应的想法非常值得借鉴。
很显然,
对于LARS本身而言,在已经有了如今的回归变量集和当前残差的基础上,我们就会有条solution path,在这个solution path上proceed的最大步记为
这个对于LARS的lasso修正算法,被Efron称作“one at a time”条件,也就是每一步都要增加或删掉一个变量。下图显示了用修正了的LARS算法求lasso estimate的过程。
这个图是Efron等人的文章中,对于一个实际数据进行回归得到的。该数据一共有10个变量。图的横轴,是所有回归系数估值的绝对值之和,这个值从
下面通过一个简单的模拟,对lars和lasso以及forward stagewise做一个简单的实现。其实在R中已经有了一个名为lars的包,可以实现上述三种回归。
首先,我要模拟的方程为
y=x31+x21+x1+13x32−x22+23x2+e
其中
简单的代码我直接贴在本文的最后(也没有)。从这三个算法的图中,我们并看不出有特别的区别,只能看出一些细小的差别。至于要判断哪种算法更好,则应该因问题而异。也不是本文能够论述的问题了。
对于LARS算法的修正,还可以应用到计算forward stagewise的estimate中,在Efron的文章中也有介绍。他的这种看法,好似凌驾在整个回归变量选择过程之上,从一个更高的角度观察之,给出一种更为一般性的视角。这也就是大牛和一般人之间的差别。读Efron的文章,总有一种让人想要膜拜的冲动。对于模型选择方面的东西,值得挖掘的还很多。Tibshirani在最新的一篇综述性的文章中,给出了lasso的诞生到现今发展的一系列流程。感兴趣的读者,可以去看看这篇文章,在cos论坛上有。链接如下:
http://cos.name/cn/topic/104104
二、参考来源http://cos.name/2011/04/modified-lars-and-lasso/
- 机器学习稀疏L1正则 - 修正的LARS算法和lasso
- 机器学习稀疏 L1正则解法- LARS算法简介
- 修正的LARS算法和lasso
- 机器学习稀疏之L1正则化
- 【机器学习 sklearn】模型正则化L1-Lasso,L2-Ridge
- LASSO和LARS
- lasso问题求解和算法+Lars算法之总结
- 机器学习防止过拟合之L1范数(正则)与LASSO
- 机器学习小组知识点40:岭回归(L2)和LASSO(L1)
- lasso(L1正则化、lasso回归)
- LASSO和L1正则包liblinear,glmnet使用和对比
- 简单易学的机器学习算法——lasso
- 简单易学的机器学习算法——lasso
- 机器学习中L1正则化和L2正则化的区别
- 机器学习算法——lasso
- 机器学习:说说L1和L2正则化
- 机器学习中正则化项L1和L2的直观理解
- 机器学习中正则化项L1和L2的直观理解
- 使用GPUImage 实现利用GPU来实习滤镜(实时滤镜 和iphone手机一样)
- Android GridView setOnItemClickListener 监听事件不起作用的一个原因
- AFNetworking 使用
- 程序人生
- C++的try_catch异常
- 机器学习稀疏L1正则 - 修正的LARS算法和lasso
- Nodejs(学习之HelloWorld)
- 找出不支持arm64的静态库/动态库
- UVA 1493 DRAW A MASS
- 黑马程序员——Java面向对象
- Fedora9下安装Qt4Creator的方法及相关问题解决
- Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme
- HDU 1233 还是畅通工程 (kuangbin带你飞 专题六 最小生成树)
- 知识点总结(构造函数,构造代码块儿,this关键字等对比)