ridge regression可以用来处理下面两类问题:一是数据点少于变量个数;二是变量间存在共线性。
当变量间存在共线性的时候,最小二乘回归得到的系数不稳定,方差很大。这是因为系数矩阵X与它的转置矩阵相乘得到的矩阵不能求得其逆矩阵,而ridge regression通过引入参数lambda,使得该问题得到解决。在R语言中,MASS包中的函数lm.ridge()可以很方便的完成。它的输入矩阵X始终为n x p 维,不管是否包含常数项。下面分别介绍包含和不包含常数项时的输出:
当包含常数项时,该函数对y进行中心化,以y的均值作为因子;对x进行中心化和归一化,以x中各个变量的均值和标准差作为因子。这样对x和y处理后,x和y的均值为0,这使得回归平面经过原点,即常数项为0.因此,虽然指定了包含常数项,它给出的系数(lmridgecoef)里也没有常数项的值。在使用该模型进行预测的时候,也需要首先对x和y进行中心化和归一化,因子是使用训练模型时候进行中心化和归一化的因子,然后再与系数相乘得到预测结果。这里需要指出的是,如果建立模型后在命令行窗口直接输入lmridge,也会出现一整套系数,该系数会包含常数项,这个系数和模型给出的系数(lmridgecoef)不一样,因为它是针对没有归一化和中心化的数据的,在预测的时候可以直接使用该系数,不需要对数据进行归一化和中心化。
当指定模型不包含常数项时,因为要强制通过原点,该模型假设各个变量的均值为0,因此不对x和y进行中心化,但是对x进行归一化,而且归一化因子也是假设变量均值为0计算出来的该变量的标准差。在进行预测的时候,如果使用lmridge$coef的系数,那么需要对数据进行归一化;如果使用lmridge直接给出的系数,只需要直接相乘。
ridge regression中lambda的选择:
可以使用select(lmridge)进行自动选择,一般使用GCV最小的值,lambda的范围是大于0即可以。
http://blog.sciencenet.cn/blog-54276-375345.html