岭回归,Lasso和LAR学习(一)

来源:互联网 发布:零基础学java看什么书 编辑:程序博客网 时间:2024/05/01 11:33

概要:我们要区分岭回归和lasso以及LAR的关系,岭回归是用于消除多重共线性问题,也可以用于删除无效变量(贡献率低或打酱油变量,后面会提及)。Lasso是岭回归的改进算法,对删除无效变量有帮助,而LAR是求Lasso解的一种有效算法。  


先进入多远线性回归问题,先观察以下矩阵:

  这里y是因变量,β1~βp是所有X的系数,β0是常数,ε1~εn是误差。因此,多远线性回归可以表示成:


    用矩阵乘法表示,更加简洁。那么问题来了,Y是结果,即因变量,而X是影响因素,即自变量,在实际分析中,Y和X是已知的我们要求的就是β,即X的系数。这里根据数学推导,可以求的β的表达式为:


    这个式子是用最小二乘法对β的估计结果,补充说明的是,该式可以化简为:

    其中,叫做矩阵的广义逆。那么问题就继续分析求X的的问题,但在实际问题中,我们会面临两个重要问题,一是X是否是奇异矩阵,二是X中变量是不是都做出贡献。


    为体现我的写博客宗旨,这里解释一下奇异性和贡献的意思,1,奇异矩阵的充要条件就是X矩阵的行列式为0(|X|=0),我们知道如果一个矩阵中存在某几个个向量共线(就是两个向量成比例),那这个矩阵的行列式就一定是0,即该矩阵叫做奇异矩阵。2,变量有没有贡献就是指某个X指标对结果Y有没有影响,比如Y是某学生的考试平均分,X中有x1(语文成绩),x2(数学成绩),x3(吃饭速度)……这里x3这个分量就是打酱油的数据,对Y的最终贡献率为0,那我们就要把x3这个分量剔除。


    因此,直接用最小二乘法会遇到求不出解的情况,于是我们的问题就转而变成研究:1,消除共线性(去除奇异性);2,剔除无效分量x。在实际问题中,若某两个X分量的比值很大(数/很小的数),我们就认为这两个分量线性相关,而剔除无效分量的方法在后面会讲到。


     岭回归(Ridge Regression,RR)

    1962年由Heer首先提出,1970年后他与肯纳德合作进一步发展了该方法。RR要先对数据做标准化,为了记号方便,标准化后癿学习集仍然用X表示
    其实岭回归说白了就是增加原矩阵的稳定性。公式如下:

,其中k称为岭参数。


岭回归的几个明显性质:

当自变量间存在共线性时,|X′X≈0,我们设想给X′X加上一个正常数矩阵kI,(k>0),那么X′X+kI接近奇异癿程度就会比X′X接近奇异癿程度小得多。
岭回归做为β癿估计应比最小二乘估计稳定,当k=0时癿岭回归估计就是普通癿最小二乘估计。


    对K取不同的值,然后分别计算β(k),就可以得到得到岭迹图。这里举个栗子:

假设已知x1,x2与y的关系服从线性回归型 y=10+2*x1+3*x2+ε(实际中的10,2,3,ε为待定系数


因为k是随主观选取的值,所以我们可以得到一组关于k的估计族。



根据该表作得岭迹图:



    这里需要说明β(k)是关于k是有偏估计,有偏无偏是指估计的期望是否与真是值相等(即样本观察的统计量无限逼近总体的统计量)。作完岭迹图,就是岭迹分析和选取合适的k值和筛选合适的X分量。


岭参数选取的原则:
选择k(戒 lambda)值,使到
(1)各回归系数的岭估计基本稳定;
(2)用最小二乘估计时符号不合理的回归系数,其岭估计的符号变得合理;
(3)回归系数没有不合乎实际意义的绝对值;
(4)残差平方和增大不太多。
ps:反正就是取岭迹图中的平稳拐点(上图目测估计0.3左右)。

岭回归选择变量的原则:
(1)在岭回归中设计矩阵X已经中心化和标准化了,这样可以直接比较标准化岭回归系数的大小。可以剔除掉标准化岭回归系数比较稳定且绝对值很小的自变量。
(2)随着k的增加,回归系数稳定,震动趋于零的自变量也可以剔除。
(3)如果依照上述去掉变量的原则,有若干个回归系数稳定,究竟去掉几个,去掉哪几个,这并无一般原则可循,这需根据去掉某个变量后重新进行岭回归分析的效果来确定。

举个栗子:

把15个回归系数的岭迹画到图中,我们可看到,当k=0.20时岭迹大体上达到稳定。按照岭迹法,应取k=0.2。

选择变量
在用岭回归进行变量选择时,因为从岭迹看到自变量x4,x7,x10,x11和x15有较稳定且绝对值比较小的岭回归系数,根据变量选择的第一条原则,这些自变量可以去掉。
又因为自变量x12和x13的岭回归系数很不稳定,且随着k增加很快趋于零,根据上面的第二条原则这些自变量也应该去掉。
再根据第三条原则去掉变量x3和x5。
这个问题最后剩的变量是x1,x2,x6,x8,x9,x14。

这里用统计语言R具体操作一下。
1,得到测试数据longley
>library(MASS)//加载函数包
>longley//加载数据

2,构建模型并作岭迹图
>names(longley)[1] <- "y"
>lm.ridge(y~.,longley)//build the model
<span style="font-size:18px;">>plot(<span style="font-family: 微软雅黑;">lm.ridge(y~.,longley,lambda=seq(0,0.1,0.001))</span>)//graph</span>



3,选取合适k值
>select(lm.ridge(y~.,longley,lambda=seq(0,0.1,0.001)))

给出三个k值的参考值,我们通常用GCV,这里k取0.006。


岭回归的问题总结
岭参数计算方法太多,差异太大
根据岭迹图进行变量筛选,随意性太大
岭回归返回的模型(如果没有经过变量筛选)包含所有的变量

总而言之,岭回归方法有一个致命缺点,主观性性太大,基本我们学习下来发现,选取k值和删除X分量,基本都要靠目测,因此不适合大数据和机器学习思想。于是lasso的出现,就是改进的岭回归算法,在岭回归,Lasso和LAR学习(二)中会详细介绍。




0 0
原创粉丝点击