高山流水分享 http://blog.sciencenet.cn/u/friendpine 走在科学路上的一位无名侠客,只是静静的走着.........

博文

ridge regression

已有 21904 次阅读 2010-10-20 23:02 |个人分类:统计学与R语言学习|系统分类:科研笔记|关键词:学者

ridge regression可以用来处理下面两类问题:一是数据点少于变量个数;二是变量间存在共线性。

当变量间存在共线性的时候,最小二乘回归得到的系数不稳定,方差很大。这是因为系数矩阵X与它的转置矩阵相乘得到的矩阵不能求得其逆矩阵,而ridge regression通过引入参数lambda,使得该问题得到解决。在R语言中,MASS包中的函数lm.ridge()可以很方便的完成。它的输入矩阵X始终为n x p 维,不管是否包含常数项。下面分别介绍包含和不包含常数项时的输出:

当包含常数项时,该函数对y进行中心化,以y的均值作为因子;对x进行中心化和归一化,以x中各个变量的均值和标准差作为因子。这样对x和y处理后,x和y的均值为0,这使得回归平面经过原点,即常数项为0.因此,虽然指定了包含常数项,它给出的系数(lmridge$coef)里也没有常数项的值。在使用该模型进行预测的时候,也需要首先对x和y进行中心化和归一化,因子是使用训练模型时候进行中心化和归一化的因子,然后再与系数相乘得到预测结果。这里需要指出的是,如果建立模型后在命令行窗口直接输入lmridge,也会出现一整套系数,该系数会包含常数项,这个系数和模型给出的系数(lmridge$coef)不一样,因为它是针对没有归一化和中心化的数据的,在预测的时候可以直接使用该系数,不需要对数据进行归一化和中心化。

当指定模型不包含常数项时,因为要强制通过原点,该模型假设各个变量的均值为0,因此不对x和y进行中心化,但是对x进行归一化,而且归一化因子也是假设变量均值为0计算出来的该变量的标准差。在进行预测的时候,如果使用lmridge$coef的系数,那么需要对数据进行归一化;如果使用lmridge直接给出的系数,只需要直接相乘。

ridge regression中lambda的选择:
可以使用select(lmridge)进行自动选择,一般使用GCV最小的值,lambda的范围是大于0即可以。





https://m.sciencenet.cn/blog-54276-375345.html

上一篇:学习笔记-主成分分析和主成分回归
下一篇:偏相关系数

2 赫英 高建国

发表评论 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-3 11:05

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部