2013-07-15 21:41:04
#本文的目的在于介绍回归建模时变量选择和正则化所用的R包,如glmnet,ridge,lars等。算法的细节尽量给文献,这个坑太大,hold不住啊。
1.变量选择问题:从普通线性回归到lasso
使用最小二乘法拟合的普通线性回归是数据建模的基本方法。其建模要点在于误差项一般要求独立同分布(常假定为正态)零均值。t检验用来检验拟合的模型系数的显著性,F检验用来检验模型的显著性(方差分析)。如果正态性不成立,t检验和F检验就没有意义。
对较复杂的数据建模(比如文本分类,图像去噪或者基因组研究)的时候,普通线性回归会有一些问题:
(1)预测精度的问题
如果响应变量和预测变量之间有比较明显的线性关系,最小二乘回归会有很小的偏倚,特别是如果观测数量n远大于预测变量p时,最小二乘回归也会有较小的方差。但是如果n和p比较接近,则容易产生过拟合;如果n<p,最小二乘回归得不到有意义的结果。
(2)模型解释能力的问题 包括在一个多元线性回归模型里的很多变量可能是和响应变量无关的;也有可能产生多重共线性的现象:即多个预测变量之间明显相关。这些情况都会增加模型的复杂程度,削弱模型的解释能力。这时候需要进行变量选择(特征选择)。
针对OLS的问题,在变量选择方面有三种扩展的方法:
(1)子集选择 这是传统的方法,包括逐步回归和最优子集法等,对可能的部分子集拟合线性模型,利用判别准则 (如AIC,BIC,Cp,调整R2
等)决定最优的模型。 (2)收缩方法(shrinkage method)
收缩方法又称为正则化(regularization)。主要是岭回归(ridge
regression)和lasso回归。通过对最小二乘估计加入罚约束,使某些系数的估计为0。 (3)维数缩减
主成分回归(PCR)和偏最小二乘回归(PLS)的方法。把p个预测变量投影到m维空间(m<p),利用投影得到的不相关的组合建立线性模型。
2.正则化:岭回归、lasso回归和elastic net
(1)岭回归
最小二乘估计是最小化残差平方和(RSS):
岭回归在最小化RSS的计算里加入了一个收缩惩罚项(正则化的l2范数)
这个惩罚项中lambda大于等于0,是个调整参数。各个待估系数越小则惩罚项越小,因此惩罚项的加入有利于缩减待估参数接近于0。重点在于lambda的确定,可以使用交叉验证或者Cp准则。
岭回归优于最小二乘回归的原因在于方差-偏倚选择。随着lambda的增大,模型方差减小而偏倚(轻微的)增加。
岭回归的一个缺点:在建模时,同时引入p个预测变量,罚约束项可以收缩这些预测变量的待估系数接近0,但并非恰好是0(除非lambda为无穷大)。这个缺点对于模型精度影响不大,但给模型的解释造成了困难。这个缺点可以由lasso来克服。(所以岭回归虽然减少了模型的复杂度,并没有真正解决变量选择的问题)
(2)lasso
lasso是一种相对较新的方法,参考[1],[2]。关于lasso的发展和一些思想介绍可以参考网上很有名气的一篇文章《统计学习那些事》http://cos.name/2011/12/stories-about-statistical-learning/。
lasso是在RSS最小化的计算中加入一个l1范数作为罚约束:
l1范数的好处是当lambda充分大时可以把某些待估系数精确地收缩到0。
关于岭回归和lasso,在[3]里有一张图可以直观的比较([3]的第三章是个关于本文主题特别好的参考):
关于岭回归和lasso当然也可以把它们看做一个以RSS为目标函数,以惩罚项为约束的优化问题。
(3)调整参数lambda的确定
交叉验证法。对lambda的格点值,进行交叉验证,选取交叉验证误差最小的lambda值。最后,按照得到的lambda值,用全部数据重新拟合模型即可。
(4)elastic net
elastic net融合了l1范数和l2范数两种正则化的方法,上面的岭回归和lasso回归都可以看做它的特例:
elastic
net对于p远大于n,或者严重的多重共线性情况有明显的效果。 对于elastic net,当alpha接近1时,elastic
net表现很接近lasso,但去掉了由极端相关引起的退化化或者奇怪的表现。一般来说,elastic
net是岭回归和lasso的很好的折中,当alpha从0变化到1,目标函数的稀疏解(系数为0的情况)也从0单调增加到lasso的稀疏解。
3.glmnet包和算法
glmnet包是关于Lasso and elastic-net regularized generalized linear models。 作者是Friedman, J., Hastie, T. and Tibshirani, R这三位。
这个包采用的算法是循环坐标下降法(cyclical
coordinate descent),处理的模型包括 linear regression,logistic and multinomial
regression models, poisson regression 和 the Cox
model,用到的正则化方法就是l1范数(lasso)、l2范数(岭回归)和它们的混合 (elastic net)。
坐标下降法是关于lasso的一种快速计算方法(是目前关于lasso最快的计算方法),其基本要点为:
对每一个参数在保持其它参数固定的情况下进行优化,循环,直到系数稳定为止。这个计算是在lambda的格点值上进行的。 关于这个算法见[5]。
关于glmnet包的细节可参考[4],这篇文献同时也是关于lasso的一个不错的文献导读。
4.glmnet包案例