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

Python 在这种情况下如何解释VIF?,python,machine-learning,statistics,data-science,Python,Machine Learning,Statistics,Data Science,我写了一些代码,这些代码使用一个多线性模型来预测汽车的价格,包括里程、气缸、车门、巡航、声音和皮革数据。快照中的示例数据:然后我想检查模型中是否存在高度共线的任何特征,以及它们是否影响模型质量,如下所示,我得到的结果是一个数组(我想它是VIF数组?),我的理解是,每个VIF值应该表示两个特征之间的共线性,也就是说,它应该是矩阵而不是数组,对吗?如何检查阵列的共线性?或者我应该改变我的密码来得到一个矩阵?谢谢 import pandas as pd import numpy as np from

我写了一些代码,这些代码使用一个多线性模型来预测汽车的价格,包括里程、气缸、车门、巡航、声音和皮革数据。快照中的示例数据:然后我想检查模型中是否存在高度共线的任何特征,以及它们是否影响模型质量,如下所示,我得到的结果是一个数组(我想它是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():


范围索引:804个条目,0到803
数据列(共18列):
价格804非空浮动64
里程804非空int64
气缸804非空int64
Doors 804非空int64
巡航804非空int64
声音804非空int64
皮革804非空int64
别克804非空int64
凯迪拉克804非空int64
雪佛兰804非空int64
庞蒂亚克804非空int64
萨博804非空int64
土星804非空int64
可转换804非空int64
coupe 804非空int64
掀背式804非空int64
轿车804非空int64
货车804非空int64
数据类型:float64(1)、int64(17)
内存使用率:113.1 KB
#VIF:
[5.9882999105246935,
13.522607316383963,
10.893965772667245,
4.564742540402573,
2.8815915938492838,
3.6030229813600663]

方差膨胀系数(VIF)是一种衡量添加特定变量后,模型中所有参数的估计方差相对于不存在该变量的模型的参数估计方差增加多少的指标。VIF并没有提供“两个特征之间的共线性”的比较,因为它没有选择两个不同的特征进行比较

使用此行生成的值列表:

[范围内j的方差系数(X列,j)(X列形状[1])

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

具体而言,列表中的第一个VIF为
5.9882999105246935
,对应于X_里程的VIF。这告诉您,包含所有其他变量的模型加上X_里程的参数估计方差大约是不包含X_里程的模型的方差的6倍。X_圆柱体的方差增加约为13.5倍,依此类推

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

<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]