作者:童话李
链接:https://www.zhihu.com/question/38121173/answer/403986652
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这两天的项目就是LASSO跟RIDGE,讲讲我的体会。
LASSO这两年莫名的非常火,不管什么经济学话题,只要涉及到解释变量有效性的问题,评论人或者审稿人都想看看,你这玩意儿做的LASSO有啥结果没有。潜台词就是,如果LASSO做不出结果是不是你这个话题本身就有问题呢。过两年这阵风过去可能大家的想法又变了,不过身处其中普通人别无选择只能适应,无论如何都不能在潮流中落了下风。
公式之前好多人都写了,我就直接摆几个别人总结最简单的结果,这对我理解背后的机制帮助非常大,图懒得画,都是从网上贴的。
先随便生成一组数
本质上是三角函数加上一个正太分布的随机扰动,大概长这样
接着再跑15个OLS回归,里面加上1到15阶的x作为回归变量,
拟合结果大概长这样
上图可以看出,从1到15阶的x,确实拟合的越来越精确,可是与背后真正的函数sin(x)的距离,也经历了先接近后远离的情况。原因是OLS为了把拟合精确度提高,会尽力把噪音也拟合上,最终造成了所谓的过度拟合(overfitting),catch the noise, not the signal。
那么一个合理的问题就是:如何才能避免过度拟合?
为了回答这个问题,就先看一眼刚刚回归出来的系数,大概长这样。
有看到什么趋势没有?
一个很明显的趋势就是,系数的数量级从个位数奔到了十的5次方到6次方!
直觉就是大的系数可以把X微小的变动放大,通过多个正负项的叠加尽量把每个点都拟合上。
这就是在日常实践中判断过度拟合的一个重要标准,系数如果大的离谱,多半是过度拟合了。至于多少是离谱,需要根据经验判断。单变量股票收益率预测回归,在采用百分比收益率,并把X标准化到(0,1)之后如果出来个几十的系数,多半是过度拟合了。就像R^2如果做到20%以上多半是有look ahead bias,其他结果我根本就不想往下看。。。
那么好怎么解决这个问题?
一个非常直觉的解决方法就是,在目标函数里面把过大的系数进行惩罚(penalty)。
LASSO与RIDGE的区别就是怎么进行这个惩罚。
先说LASSO,
它是这样做惩罚的,在OLS拟合的基础上,对其系数的绝对值进行惩罚,目标函数长这样
这样写目标函数就是想达到一个平衡,第一拟合的误差要小,第二系数的绝对值不能太大。
拟合的图像跟系数分别如下
有以下几个特点,
- 随着惩罚力度alpha的增加越来越多的系数变成了0
- 系数确实很好的控制在合理区间,以截距项跟一阶项为例,大致都在1到0.X之间。
- 随着惩罚力度的增加拟合越来越差,到最后RSS到了37,出现了拟合不足(underfitting)的问题。
再说RIDGE,目标函数长这样
也是想达到一个类似的平衡,第一拟合的误差要小,第二系数的平方不能太大。
结果如下,
有以下几个特点,
- 随着惩罚力度alpha的增加越来越多的系数变得很小,但不会到0。
- 随着惩罚力度的增加拟合越来越差,到最后RSS到了23,出现了拟合不足(underfitting)的问题。但拟合不足的问题似乎比相同条件下LASSO来的轻一些。
- 由于系数一直不到0,便没办法做变量选择。
接下来的一个问题是,既然惩罚力度alpha太大了容易拟合不足,太低了容易过度拟合。究竟多大的惩罚力度是合适的?
这个问题对于OLS,LASSO,和RIDGE,有一个相对标准的做法,用赤池信息准则(AIC)或贝叶斯信息准则(BIC)进行判断。
多余的公式就不写了,直觉是这样的,AIC大致都是关于惩罚力度的U型函数,条件形同的情况下AIC越小越好,直接选取AIC最低点对应的惩罚力度alpha。一个例子就是下图。
最后用一幅图总结三者的关系
如果以OLS的系数作为横轴,OLS, LASSO, RIDGE的系数作为纵轴的话,可以画一幅大致如上的图。
- LASSO本质上对OLS的系数做了一个固定数值的惩罚这个数值大致是1/2alpha,这一点是可以严格证明的。但最终其变动的趋势和OLS是一样的,用图中实例就是红线与蓝线其实是平行的。
- RIDGE本质上对OLS的系数做了一个比例上的缩减。可以从图中看出,绿线的斜率变低了。