多重共线性的解决方法之——岭回归与LASSO

多元线性回归模型

的最小二乘估计结果为

如果存在较强的共线性,即
中各列向量之间存在较强的相关性,会导致
的从而引起
对角线上的 值很大
并且不一样的样本也会导致参数估计值
变化非常大。即参数估计量的方差也增大,对参数的估计会不准确。
因此,是否可以删除掉一些相关性较强的变量呢?如果p个变量之间具有较强的相关性,那么又应当删除哪几个是比较好的呢?
本文介绍两种方法能够判断如何对具有多重共线性的模型进行变量剔除。即岭回归和LASSO(注:LASSO是在岭回归的基础上发展的)

思想:
既然共线性会导致参数估计值变得非常大,那么给最小二乘的目标函数加上基础上加上一个对
的惩罚函数
最小化新的目标函数的时候便也需要同时考虑到
值的大小,
不能过大。
在惩罚函数上加上系数k
随着k增大,共线性的影响将越来越小。在不断增大惩罚函数系数的过程中,画下估计参数
(k)的变化情况,即为岭迹。
通过岭迹的形状来判断我们是否要剔除掉该参数(例如:岭迹波动很大,说明该变量参数有共线性)。
步骤:
- 对数据做标准化,从而方便以后对
(k)的岭迹的比较,否则不同变量的参数大小没有比较性。 - 构建惩罚函数,对不同的k,画出岭迹图。
- 根据岭迹图,选择剔除掉哪些变量。
岭回归的目标函数

式中,t为
的函数。
越大,t越小(这里
就是k)

如上图中,相切点便是岭回归得出来的解。是岭回归的几何意义。
可以看出,岭回归就是要控制
的变化范围,弱化共线性对
大小的影响。
解得的岭回归的估计结果为:

岭回归的性质

由岭回归的目标函数可以看出,惩罚函数的系数
(或者k)越大,目标函数中惩罚函数所占的重要性越高。
从而估计参数
也就越小了。我们称系数
(或者k)为岭参数。因为岭参数不是唯一的,所以我们得到的岭回归估计
实际是回归参数
的一个估计族。例如下表中:

岭迹图
将上表中回归估计参数与岭回归参数k之间的变化关系用一张图来表示,便是岭迹图

当不存在奇异性是,岭迹应该是稳定地逐渐趋于0

当存在奇异性时,由岭回归的参数估计结果可以看出来,刚开始k不够大时,奇异性并没有得到太大的改变,所以随着k的变化,回归的估计参数震动很大,当k足够大时,奇异性的影响逐渐减少,从而估计参数的值变的逐渐稳定。
岭参数选择的一般原则
- 各回归系数的岭估计基本稳定
- 不存在有明显不符合常理的回归参数,其岭估计的符号应当要变得合理
- 回归系数没有不合实际意义的绝对值
- 残差平方和增大不多
用岭回归选择变量
- 由于岭回归是已经变量标准化之后的回归,因此岭回归系数的大小是能够互相比较的,可以剔除掉标准化
- 随着k的增加,回归系数不稳定,震动趋于零的变量也可以剔除
那么,问题来了,趋于0到底是怎样才能看出来呢?能不能程序自动判断呢?如果有好几个回归系数不稳定的,又应该去掉哪个呢?这就需要根据去掉某个变量之后的回归效果来定。这就涉及到扩展的岭回归方法LASSO了。
在此之前,先用R语言运行一个岭回归的例子
R语言中岭回归的包是MASS, 运行岭回归的函数是lm.ridge
1.载入MASS包,使用R内置的longley数据集(宏观经济数据)做为例子。(注:宏观经济数据一般而言都会存在比较严重的共线性问题(


- 使用传统OLS方法进行回归的结果

发现有几个变量的结果并不显著,那么是否要删除掉这几个变量呢?我们用岭回归进行变量的剔除。
- 动挑选岭回归参数,给出的结果

- 观察岭迹图,进行变量剔除


待解决疑问:到底哪个颜色代表了哪个变量啊。。。尼玛
上图可以用肉眼去选择k值,然后放入lambda中(lm.ridge函数中lambda默认是0)
- 根据不同的方法选择k, 可以发现岭回归参数的选择存在非常大的不确定性


- Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and
Selectionator operator)算法
- 与岭回归不同的是,LASSO构造的是一个一阶的惩罚函数,从而使得模型一 些变量的系数为0(岭回归系数为0的可能性非常)
- 与岭回归一样,LASSO也是有偏估计
模型形式对比
岭回归:

LASSO

可以看出,LASSO的惩罚函数是绝对值形式,其函数形式就更为压缩,用几何意义来说明会更为直观:
下图是LASSO模型的几何表述

下图是岭回归的几何表述

红色是求最小值区域,而蓝色则是约束条件区域。
可以发现,LASSO由于是绝对值形式,其约束条件更为"尖锐"。回归的估计参数更容易为0。

上图左边是岭回归,右边是LASSO。 在每个图中从右往左,k值逐渐增大,可以看到,LASSO在k值增大的过程中,
回归的参数估计经常会有为0的状况,对于这种参数,我们便可以选择对它们进行剔除。便不用我们进行人工选择剔除变量,而可以让程序自动根据是否为0来剔除掉变量了。
现在问题是,LASSO回归由于其惩罚函数是绝对值的形式,难以得到一个确定的估计参数的表达式,如何解决呢?
统计学家们发现,LASSO回归与最小角回归的计算结果是高度相似的,因此可以用最小角回归LAR的结果来对LASSO进行估计。(具体的思路和证明非常复杂,以后有空继续写篇博文进行阐述)。
对LAR模型进行一定的修正后,便能够让LAR的结果与LASSO基本上一致了。因此,我们用LAR的算法来对LASSO进行计算。

包:lars
Library(lars)
使用longley数据集

上图的结果是用LAR算法对线性回归进行最小二乘回归的结果。
可以看到Year和Employed这两个变量被反复删除和使用,这两个是应当被删除掉的

在summary的结果中,CP代表的是对共线性的判断,可以看到,模型在第8步的时候
共线性是最小的,结合laa中第8步的状况,所以剔除掉Year和Employed这两个变量是
比较合适的。
多重共线性的解决方法之——岭回归与LASSO的更多相关文章
- 岭回归和lasso回归(转)
回归和分类是机器学习算法所要解决的两个主要问题.分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题.但是回归就稍微复杂一些,回归模型的输出值 ...
- 岭回归与Lasso回归
线性回归的一般形式 过拟合问题及其解决方法 问题:以下面一张图片展示过拟合问题 解决方法:(1):丢弃一些对我们最终预测结果影响不大的特征,具体哪些特征需要丢弃可以通过PCA算法来实现:(2):使用正 ...
- 机器学习-正则化(岭回归、lasso)和前向逐步回归
机器学习-正则化(岭回归.lasso)和前向逐步回归 本文代码均来自于<机器学习实战> 这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况.这个时候会出现矩阵不可逆的情况, ...
- 岭回归、lasso
参考:https://blog.csdn.net/Byron309/article/details/77716127 ---- https://blog.csdn.net/xbinwor ...
- 【笔记】模型泛化与岭回归与LASSO
模型泛化与岭回归与LASSO 模型正则化 模型正则化,简单来说就是限制参数大小 模型正则化是用什么思路来解决先前过拟合的由于过于拟合导致的曲线抖动(线性方程前的系数都很大) 线性回归的目标就是求一个最 ...
- 多元线性回归模型的特征压缩:岭回归和Lasso回归
多元线性回归模型中,如果所有特征一起上,容易造成过拟合使测试数据误差方差过大:因此减少不必要的特征,简化模型是减小方差的一个重要步骤.除了直接对特征筛选,来也可以进行特征压缩,减少某些不重要的特征系数 ...
- 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归
注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...
- 机器学习之五 正则化的线性回归-岭回归与Lasso回归
机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...
- 岭回归和Lasso回归以及norm1和norm2
norm代表的是距离,两个向量的距离:下图代表的就是p-norm,其实是对向量里面元素的一种运算: 最简单的距离计算(规范)是欧式距离(Euclidean distance),两点间距离是如下来算的, ...
随机推荐
- iOS_MJRefrash的详解以及使用
MJRefresh Github 效果动态图来这里看吧 该博客Demo下载地址 一. MJRefresh的类解释. 1.MJRefreshComponent 所有刷新控件的基 ...
- 详解PHP输入流php://input
在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组.所以,这里主要探讨php输入流php://input 对一php://inpu ...
- 实现一个纵向排列的 ListBox ,并具有操作按钮
需要实现的效果如下: 要想把 ListBox 的内容纵向显示很简单,只需把 ListBox 的内容控件为 WrapPanel 就可以了: <ListBox.ItemsPanel> < ...
- Dapper ORM VS SqlSugar ORM的 8场对决
CUP和.NET SQL版本不同也会存在少许差距,但不会有质变,下面的测试结果仅供参考 比赛规则 1.统一使用Realse版本的最新 DLL,Realse模式启用程序 2.为了平衡CPU和数据库空闲情 ...
- 7.1数据注解属性--Key【Code-First系列】
Key特性可以被用到类的属性中,Code-First默认约定,创建一个主键,是以属性的名字“Id”,或者是类名+Id来的. Key特性重写了这个默认的约定,你可以应用Key特性到一个类的属性上面,不管 ...
- 网页中多个图标在一张图片上,使用css将各图标显示
现在的网页中显示很多图标算是常态,发现项目中页面上用到的图标都是单个图标单个文件,用的时候直接往页面上挂,这确实很常态. 如果,网站是挂在外网上,或者网速过低,又大量使用图标的情况下,由于浏览器和服务 ...
- [Q&A] VS 连接 SQLServer 时未找到或无法访问服务器
异常信息: 参考解决方法: 1:检查下面两处服务器名是否一致并正确 (VS上) (SQL Server 2008 R2上) 2:VS 在下图位置处对实例名称的设定对于该异常无影响 3:确认在服务中启动 ...
- 增加线程异步发送消息的方法二(Runnable)
//获取当前时间:毫秒 long a = System.currentTimeMillis(); System.out.println("a :" + a); try { //更改 ...
- 从零开始学Python第一周:Python基础(上)
Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 ...
- UDS(ISO14229-2006) 汉译(No.0 前言)
UDS protocol 前言 ISO(国际标准化组织)是国际标准机构(ISO成员体)的世界性联合会.国际标准的拟定工作通常由ISO技术委员会负责.为每一个主题而建立的技术委员会由对其感兴趣的成员机构 ...