大家好,又见面了,我是你们的朋友全栈君。
参考:https://www.zhihu.com/question/270451437/answer/405814593
https://www.cnpython.com/qa/38203
import numpy as np
import scipy as sp
a = [1, 1, 2, 3, 4]
b = [2, 2, 3, 2, 1]
c = [4, 6, 7, 8, 9]
d = [4, 3, 4, 5, 4]
ck = np.column_stack([a, b, c, d])
cc = sp.corrcoef(ck, rowvar=False)
VIF = np.linalg.inv(cc)
VIF.diagonal()
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
df = pd.DataFrame(
{'a': [1, 1, 2, 3, 4],
'b': [2, 2, 3, 2, 1],
'c': [4, 6, 7, 8, 9],
'd': [4, 3, 4, 5, 4]}
)
X = add_constant(df)
>>> pd.Series([variance_inflation_factor(X.values, i)
for i in range(X.shape[1])],
index=X.columns)
参考:https://zhuanlan.zhihu.com/p/56468729
使用VIF进行检验的方法主要为,对某一因子和其余因子进行回归,得到R^2,计算VIF,剔除因子中VIF高的因子,保留VIF较低的因子,以此类推,直到得到一个相关性较低的因子组合来增强模型的解释能力。
在实际测试过程中,并非要指定一个VIF阈值,比如某因子的VIF值超过阈值才剔除,而是通过观察所有因子值的VIF值,如果发现该值较大(显著离群),剔除该因子即可。本次我们的几个因子表现都非常出色,VIF值稳定且没有离群较大值,因此,没能找到任何一个需要剔除的因子。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135202.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...