在这种情况下,如何解释VIF?



我编写了一些代码,这些代码使用多线性模型根据里程、气缸、车门、巡航、声音、皮革数据等特征来预测汽车的价格。快照中的示例数据:汽车 然后我想检查模型中是否有任何高度共线的特征以及它们是否影响模型质量,如下所示,我得到的结果是一个数组(我想它是一个 VIF 数组?(,但是,我的理解是每个 VIF 值应该代表每个两个特征之间的共线性, 这意味着,它应该是一个矩阵而不是数组,对吗?如何检查数组的共线性?或者我应该以某种方式更改我的代码以获得矩阵?谢谢!

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
import scipy, scipy.stats
from sklearn.model_selection import train_test_split
cars = pd.read_csv('cars.csv')
cars.head()
cars.info()
X=cars[['Mileage', 'Cylinder', 'Doors', 'Cruise', 'Sound', 'Leather']].values
y=cars['Price'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
regressor = LinearRegression()  
regressor.fit(X_train, y_train)
from statsmodels.stats.outliers_influence import variance_inflation_factor
[variance_inflation_factor(X_train, j) for j in range(X_train.shape[1])]

我得到的输出: #cars.info((:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 804 entries, 0 to 803
Data columns (total 18 columns):
Price          804 non-null float64
Mileage        804 non-null int64
Cylinder       804 non-null int64
Doors          804 non-null int64
Cruise         804 non-null int64
Sound          804 non-null int64
Leather        804 non-null int64
Buick          804 non-null int64
Cadillac       804 non-null int64
Chevy          804 non-null int64
Pontiac        804 non-null int64
Saab           804 non-null int64
Saturn         804 non-null int64
convertible    804 non-null int64
coupe          804 non-null int64
hatchback      804 non-null int64
sedan          804 non-null int64
wagon          804 non-null int64
dtypes: float64(1), int64(17)
memory usage: 113.1 KB
#VIF:
[5.9882999105246935,
13.522607316383963,
10.893965772667245,
4.564742540402573,
2.8815915938492838,
3.6030229813600663]

方差膨胀因子 (VIF( 是与缺少该变量的模型的参数估计值相比,添加特定变量时模型中所有参数的估计值的方差增加多少的度量。VIF没有给你一个"每个两个特征之间的共线性"的比较,因为它没有选择两个不同的特征进行比较。

使用此行生成的值列表:

[variance_inflation_factor(X_train, j) for j in range(X_train.shape[1])]

是将不包含X_j的模型的参数估计值的方差与包含X_j的模型的估计值进行比较时得出的 VIF 值列表,对于所有X_j

具体来说,列表中的第一个 VIF 是5.9882999105246935,对应于X_mileage的 VIF。这告诉您,包含所有其他变量加上X_mileage的模型的参数估计值的方差大约是不包含X_mileage的模型的方差的 6 倍。X_cylinder的方差增加是 ~13.5 倍,依此类推。

评估多重共线性的影响不是一个纯粹的统计问题。也就是说,除了完美多重共线性(一个变量完美地预测另一个变量的值(的情况之外,没有明确的规则可以说变量应该或不应该包含在模型中。您将看到提供的各种准则,例如使用 VIF> 5 消除任何变量,有时使用 VIF> 10 消除任何变量,但这些只是建议(尽管通常基于非常好的推理(。

最新更新