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值,表明这两个变量高度相关。这是预料之中的,因为一个人的身高确实会影响他们的体重。因此,将这两个特征一起考虑会导致具有高多重共线性的模型。

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值