Python教程-Python中的VIF
在讨论VIF之前,首先要了解线性回归中的多重共线性是什么?
多重共线性的情况发生在两个独立变量之间存在强相关性的情况下。
无论何时进行探索性数据分析,我们的目标是获得影响目标变量的显著参数。
因此,相关性是帮助我们了解两个变量之间存在的线性关系的重要步骤。
什么是相关性?
相关性测量两个变量之间的相互依赖程度。
通过视觉检查两个变量之间存在哪种相关性的想法。我们可以绘制图表并解释一个属性值的增加如何影响另一个属性值。
在统计学方面,我们可以使用皮尔逊相关性来获取相关性系数和P值。
让我们看看相关性的标准 -
相关系数 | 关系 |
---|---|
1. 接近+1 | 大正相关 |
2. 接近-1 | 大负相关 |
3. 接近0 | 不存在关系 |
P-值 | 确定性 |
---|---|
P-值<0.001 | 强 |
P-值<0.05 | 中等 |
P-值<0.1 | 弱 |
P-值>0.1 | 不存在 |
现在我们已经详细了解了相关性,我们现在明白了,如果数据集的两个独立变量之间存在强相关性,那么会导致多重共线性。
让我们讨论由于多重共线性可能会出现哪些问题 -
- 由于存在强关系,确定显著变量将是一项困难的任务。
- 我们将获得的变量系数可能不稳定,因此模型的解释将是一项繁琐的工作。
- 可能会发生过拟合,并且模型的准确性将随着数据集的变化而变化。
检查多重共线性
检查多重共线性的两种方法是 -
- 绘制热图以理解相关性
- 使用方差膨胀因子(VIF)
绘制热图以理解相关性
使用数据集,绘制热图将帮助我们推断哪个属性具有最高的相关性值。这个值将告诉我们因变量和自变量之间的影响程度。
让我们看一个示例程序,演示了如何实现这一点。
示例 -
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
# importing the data
df = pd.read_csv("/content/SampleSuperstore.csv")
print(df.corr())
# plotting the correlation heatmap
df_plot = sns.heatmap(df.corr(), cmap="YlGnBu", annot=True)
# displaying the heatmap
plt.show()
输出:
使用方差膨胀因子(VIF)
方差膨胀因子(VIF)是用于衡量在多元回归中涉及的变量集中存在的多重共线性的度量。
通常,VIF值超过10表示与其他独立变量存在高相关性。
让我们看一个示例程序,演示了如何实现这一点。
示例 -
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
import pandas as pd
df = pd.DataFrame(
{'x': [2, 2, 4, 1, 3],
'y': [1, 1, 2, 3, 2],
'z': [7, 4, 8, 6, 9],
'w': [5, 4, 3, 4, 5]}
)
X = add_constant(df)
ds=pd.Series([variance_inflation_factor(X.values, i)
for i in range(X.shape[1])],
index=X.columns)
print(ds)
输出:
解决多重共线性问题的不同方法 -
- 选择变量
应该以一种方式选择变量,即删除高度相关的变量,仅使用显著变量。
- 变量的转换
变量的转换是一个重要步骤,这里的目标是保持特征,但是通过进行转换可以给我们一个不会产生偏倚结果的范围。
- 主成分分析
主成分分析是一种降维技术,通过该技术,我们可以获得数据集的显著特征,这些特征对我们的目标变量产生了很大的影响。
在实施PCA时,我们要注意的一件事是,不要丢失重要的特征,并尽量以能够获取最大可能的信息的方式减少它们。