Python使用VIF实现检测多重共线性

 更新时间:2023年12月26日 11:37:13   作者:python收藏家  
多重共线性是指多元回归模型中有两个或两个以上的自变量,它们之间具有高度的相关性,本文主要介绍了如何使用VIF实现检测多重共线性,需要的可以参考下

多重共线性是指多元回归模型中有两个或两个以上的自变量,它们之间具有高度的相关性。当某些特征高度相关时,我们可能很难区分它们对因变量的个体影响。多重共线性可以使用各种技术来检测,其中一种技术是方差膨胀因子(VIF)。

在VIF方法中,我们选择每个特征并将其与所有其他特征进行回归。对于每个回归,因子计算如下:

其中,R平方是线性回归中的决定系数。它的值介于0和1之间。

正如我们从公式中看到的,R平方的值越大,VIF越大。因此,VIF越大,相关性越强。这与较高的R平方值表示较强的共线性的事实一致。通常,VIF高于5表示高多重共线性。

使用statmodels实现VIF

statsmodels提供了一个名为variance_inflation_factor()的函数来计算VIF。

语法:statmodels.stats.outliers_influence.variance_inflation_factor(exog,exog_idx)

主要参数:

exog:一个数组,包含对其执行线性回归的特征。

exog_idx:要测量其对其他特征的影响的附加特征的索引。

示例

下例中使用的数据集包含500人的身高、体重、性别和体重指数。这里的因变量是指数。

import pandas as pd  
  
# the dataset   
data = pd.read_csv('BMI.csv') 
  
# printing first few rows 
print(data.head())

输出

   Gender  Height  Weight  Index
0    Male     174      96      4
1    Male     189      87      2
2  Female     185     110      4
3  Female     195     104      3
4    Male     149      61      3

方法

每个特征索引都被传递给variance_inflation_factor()以找到相应的VIF。

这些值以Pandas DataFrame的形式存储。

from statsmodels.stats.outliers_influence import variance_inflation_factor 

# creating dummies for gender 
data['Gender'] = data['Gender'].map({'Male':0, 'Female':1}) 

# the independent variables set 
X = data[['Gender', 'Height', 'Weight']] 

# VIF dataframe 
vif_data = pd.DataFrame() 
vif_data["feature"] = X.columns 

# calculating VIF for each feature 
vif_data["VIF"] = [variance_inflation_factor(X.values, i) 
						for i in range(len(X.columns))] 

print(vif_data)

输出

  feature        VIF
0  Gender   2.028864
1  Height  11.623103
2  Weight  10.688377

正如我们所看到的,身高和体重具有非常高的VIF值,表明这两个变量高度相关。这是预料之中的,因为一个人的身高确实会影响他们的体重。因此,将这两个特征一起考虑会导致具有高多重共线性的模型。

到此这篇关于Python使用VIF实现检测多重共线性的文章就介绍到这了,更多相关Python检测多重共线性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python脚本编辑oss文件的实现示例

    python脚本编辑oss文件的实现示例

    本文主要介绍了python脚本编辑oss文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Python如何筛选序列中的元素的方法实现

    Python如何筛选序列中的元素的方法实现

    这篇文章主要介绍了Python如何筛选序列中的元素的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python超详细分步解析随机漫步

    Python超详细分步解析随机漫步

    随机游走(random walk)也称随机漫步,随机行走等是指基于过去的表现,无法预测将来的发展步骤和方向。核心是指任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律,接近布朗运动,现阶段主要应用于互联网链接分析及金融股票市场中
    2022-03-03
  • Pandas:Series和DataFrame删除指定轴上数据的方法

    Pandas:Series和DataFrame删除指定轴上数据的方法

    今天小编就为大家分享一篇Pandas:Series和DataFrame删除指定轴上数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python调用Jar包的两种方式小结

    Python调用Jar包的两种方式小结

    这篇文章主要介绍了Python调用Jar包的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python单元测试工具doctest和unittest使用解析

    Python单元测试工具doctest和unittest使用解析

    这篇文章主要介绍了Python单元测试工具doctest和unittest使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python re.match()用法相关示例

    python re.match()用法相关示例

    这篇文章主要介绍了python re.match()用法相关示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • pytorch 权重weight 与 梯度grad 可视化操作

    pytorch 权重weight 与 梯度grad 可视化操作

    这篇文章主要介绍了pytorch 权重weight 与 梯度grad 可视化操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python随机数用法实例详解【基于random模块】

    Python随机数用法实例详解【基于random模块】

    这篇文章主要介绍了Python随机数用法,结合实例形式分析了基于random模块的各种随机数操作常用技巧,需要的朋友可以参考下
    2017-04-04
  • python输入错误后删除的方法

    python输入错误后删除的方法

    在本篇文章里小编给读者们整理了关于python输入错误后删除的方法以及相关知识点,有兴趣的朋友们学习下。
    2019-10-10

最新评论