另眼看待变量间多重共线性

2024-02-02 19:32

本文主要是介绍另眼看待变量间多重共线性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多重共线性是使用回归算法时经常要面对的一个问题。在其他算法中,例如决策树和Naïve Bayes,前者的建模过程是逐步递进,每次拆分只有一个变量参与,这种建模机制含有抗多重共线性干扰的功能;后者干脆假定变量之间是相互独立的,因此从表面上看,也没有多重共线性的问题。但是对于回归算法,不论是一般回归,逻辑回归,或存活分析,都要同时考虑多个预测因子,因此多重共线性是不可避免需要面对的。而在营销数据中,多重共线性更是一个普遍的现象。

多重共线性的危害主要是使用上的问题。简单地说,由于变量之间的高度相关,使算法无法准确分离各个因子对目标变量的影响,因而造成系数估计的偏差加大,体现在模型输出结果上是一系列错乱现象,例如:一个原本显著的变量由于另一个变量的加入突然失掉重要性、因子对目标变量的作用方向突然出现逆转、模型的拟合度很高,但各个因子都不显著,等等。

但是,多重共线性对预测模型的危害不应该被等量齐观。换句话说,如果数据挖掘的目的是预测,则一定程度的多重共线性是可以容忍的,只要一些基本条件能够被满足。包括:变量之间虽然高度相关,但算法仍然可以找到其各自对目标变量的影响,且影响是显著的;通过了内部检验,即模型在训练样本和检验样本上的表现基本一致,没有明显的恶化迹象;各个因子对目标变量的影响方向符合经验期望或理论。

为什么预测模型可以容纳一定程度的多重共线性?这需要从建模的目的谈起。模型的效用不外两个:预测和解释。两者都会用到回归算法。但是,回归算法在用于解释模型时对多重共线性的要求要较预测模型为高。换句话说,前者对多重共线性更敏感。原因在于解释模型的功能是判断每个因子对目标变量的独特贡献,而多重共线性阻挠了这种判断。而不能准确区分出每个因子的作用,即是宣告了解释模型的失败。但是对于预测模型来说,解释的功能是次要的,预测模型的首要任务是对未来做出某种推测,而这种推测需要依赖模型的整体能力,包括模型中涉及到的所有因子。至于单个因子是否准确,只要不影响到模型的总体能力,则不必过于计较。

看到这里,有人不免会发问,既然多重共线性总的来说不是一个积极的现象,那么何必非要保留在预测模型中呢?把多余的变量拿掉就是了。问题在于,只要变量之间不是百分之百地联系在一起,拿掉一个变量总会对模型的预测能力带来影响,尤其在拿掉的变量对目标变量的影响是其它变量无法取代的情况下。换句话说,数据挖掘人员不会特意保留多重共线性,但如果发现消除多重共线性会对模型的整体能力带来严重影响时,两害相衡取其轻,则还是以保留多重共线性为好。

因此,在构造预测模型时如何处理多重共线性是一个比较微妙的议题。既不能不加控制,又不能一刀切,认为凡是多重共线性就应该消除。

这篇关于另眼看待变量间多重共线性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671736

相关文章

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

多重背包转换成0-1背包

http://acm.hdu.edu.cn/showproblem.php?pid=2191 多重背包特点: 一种物品有C个(既不是固定的1个,也不是无数个) 优化的方法: 运用神奇的二进制,进行物品拆分,转化成01背包 物品拆分,把13个相同的物品分成4组(1,2,4,6) 用这4组可以组成任意一个1~13之间的数! 原理:一个数总可以用2^

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新