如果你了解数据科学领域,你可能听说过LASSO。LASSO是一个对目标函数中的参数大小进行惩罚的模型,试图将不相关的变量从模型中排除。
最近我们被客户要求撰写关于LASSO的研究报告。它有两个非常自然的用途,第一个是变量选择,第二个是预测。因为通常情况下,LASSO选择的变量会比普通最小二乘法(OLS)少得多,其预测的方差会小得多,代价是样本中出现少量的偏差。
LASSO最重要的特点之一是它可以处理比观测值多得多的变量,我说的是成千上万的变量。这是它最近流行的主要原因之一。
可下载资源
实例
在这个例子中,我使用最流行的LASSO,glmnet。我们可以非常快速地估计LASSO,并使用交叉验证选择最佳模型。
0. 预备知识-最小二乘估计的理论推导
上一篇文章中写了最小二乘估计的解为 ,过程略去了,但我觉得为了更好的理解其思想还是应该把推导过程给大家列出来。(接下来的推导过程摘自王松桂—《线性模型引论》4.1节)
线性模型如下:
获取参数向量的估计的最小二乘法的基本思想为: 的真值应该使误差向 达到最小,也就是它的长度平方
达到最小。因此,我们应该通过求 的最小值来求 的估计,注意到
对 求偏导为
于是 ,令其等于0,得到: ,称之为正则方程。
补充一个定理:设 为相容线性方程组,且 ,那么当 取遍 的所有广义逆时, 构成了该方程组的全部解。
因为向量 ,于是正则方程是相容的,根据定理,正则方程的解为
明明我们对正则方程左乘一个 就能得到上式了,为啥还要说其相容、广义逆什么的?因为只是简单左乘那是线性代数的运算,不是方程解。只有通过这样一个定理,才可以说这样得到的 是方程的解。
根据函数极值理论,我们知道 只是函数 的驻点,我们还需证明它确实使 达到最小。事实上,对任意一个 ,(下面这个公式我们在后面讲SCAD还会用到)
因为 满足正则方程,于是上式第三项 为 ,而第二项总是非负的,于是
此式表示, 确使 达到最小。
现在我们再进一步证明,使 达到最小的必是 。事实上,上式等号成立,当且仅当 等价地, ,不难证明,该式又等价于 .
这就证明了,使 达到最小值的点必为正则方程的解 .
1. Adaptive Lasso
Adaptive Lasso 是Hui Zou(中文名应该是邹辉)于2006年在《The Adaptive Lasso and Its Oracle Properties》中提出的,是一篇高被引的文章,很多论文中都有它的身影。
Lasso估计是使 达到最小的估计,Hui Zou在文中指出Lasso在变量选择时会出现不一致性。Adaptive Lasso在里面增加了一个权重 ,具体为
权重的选择可以依赖数据驱动,通过交叉验证的方式得到。若 是root n consistent estimator,可取 可取1,这方面的研究可以看下《Adaptive Lasso For Sparse High-Dimensional Regression Models》。
2. Dantzig Selector
Dantzig Selector是Emmanuel Cansed 和 Terence Tao于2007年在《The Dantzig Selector: Statistical Estimation When p Is Much Larger Than n 》中提出的。
Dantzig Selector方法即求解 -正则问题:
其中 ,上面的问题可以转换成一个线性规划(LP)问题:
3. SCAD
SCAD方法是大佬范剑青于2001年发表在 Journal of the American Statistical Association的文章《Variable Selection via Nonconcave Penalized Likelihood and its Oracle Properties》中提出的。
还是那个线性模型:
为了避免与惩罚函数 的 冲突,我们这里的 设为 的。
首先要说明,为了在变量选择过程中看的更清晰,这里假设 是标准正交的,这个假设在很多论文、教材中都有广泛的使用,在该假设下,最小二乘估计 的形式就变成了 .
我们的目标是最小化目标函数:
岭回归就是在上式的基础上添加了惩罚函数 ,Lasso添加的是 ,目前很多人都是在这个惩罚函数上做文章,称为惩罚最小二乘(penalized least squares),应用较多的是1-范数,因为其性质可以使不重要的参数压缩到0,因此我们以 表示(Lasso就是这里面最简单的形式 )。
因此惩罚最小二乘的形式为:
这里添加 是常用的一种写法,求导后可消去。上式中的第三项我们在预备知识说过了,它等于0。对于第二项,因为 是标准正交的,因此第二项就成了 (这里之所以写了这么多形式,是为了让大家了解论文中常用的这几种变形),这样我们得到最终形式:
为了和论文中的符号对齐,令 ,这样我们就和论文中的公式完全一致了
最后,为了让惩罚函数 可以表示其与 相关,下面用 来表示惩罚函数。
关于公式(2),使其最小等价于最小化 ,简写为
你可能会有疑问,前面还一个 怎么就不管了呢?在预备知识的公式(1)下面我们说过,第二项 是非负的,若使等号成立就要求其等于0,这样 。公式(2)也是同理, 与 相差 ,因此我们只要使其最小即可。
接下来就是惩罚函数SCAD(Smoothly Clipped Absolute Deviation)了:
这个惩罚函数使得比较大的 不会被过度惩罚并且保证了解的连续性,其解为
对于该惩罚中的两个参数 ,可以通过交叉验证来得到,不过文章中也给出了一个较为通用的值, ,在 时, 。
根据我的经验,在时间序列的背景下,使用信息准则(如BIC)来选择最佳模型会更好。它更快,并避免了时间序列中交叉验证的一些复杂问题。
本文估计LASSO,并使用信息标准来选择最佳模型。我们将使用LASSO来预测通货膨胀。
## == 数据分解成训练和测试
y.in=y\[1:100\]; y.out=y\[-c(1:100)\]
x.in=x\[1:100,\]; x.out=x\[-c(1:100),\]
## == LASSO == ##
glmnet(x.in,y.in,crit = "bic")
plot(lasso)
上面的第一个图显示,当我们增加LASSO目标函数中的惩罚时,变量会归零。第二张图显示了BIC曲线和选定的模型。现在我们可以计算预测了。
## == 预测 == ##
predict(lasso,x.out)
adaptive LASSO
LASSO有一个自适应版本,在变量选择方面有一些更好的特性。请注意,这并不总是意味着更好的预测。该模型背后的想法是使用一些以前知道的信息来更有效地选择变量。一般来说,这些信息是由LASSO或其他一些模型估计的系数。
## = adaLASSO = ##
adalasso(x.in,y.in,crit="bic",penalty=factor)
predict(adalasso, x.out)
随时关注您喜欢的主题
## = 比较误差 = ##
sqrt(mean((y.out-pred.ada)^2)
在这种情况下,adaLASSO产生了一个更精确的预测。一般来说,adaLASSO比简单的LASSO的预测效果更好。然而,这不是一个绝对的事实。我见过很多简单LASSO做得更好的案例。
参考文献
[1] Bühlmann, Peter, and Sara Van De Geer. Statistics for high-dimensional data: methods, theory and applications. Springer Science & Business Media, 2011.
[2] Jerome Friedman, Trevor Hastie, Robert Tibshirani (2010). Regularization Paths for
Generalized Linear Models via Coordinate Descent. Journal of Statistical Software, 33(1), 1-22. URL http://www.jstatsoft.org/v33/i01/
[3] Marcio Garcia, Marcelo C. Medeiros , Gabriel F. R. Vasconcelos (2017). Real-time inflation forecasting with high-dimensional models: The case of Brazil. Internationnal Journal of Forecasting, in press.
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!