精华内容
下载资源
问答
  • 方差膨胀系数(variance inflation factor,VIF)是衡量多元线性回归模型中复 (多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。  多重共线性是指自变量之间...

     

      方差膨胀系数(variance inflation factor,VIF)是衡量多元线性回归模型中复 (多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。

      多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。若存在多重共线性,计算自变量的偏回归系数时矩阵不可逆。其表现主要有:整个模型的方差分析结果与各个自变量的回归系数的检验结果不一致,专业判断有统计学意义的自变量检验结果却无意义,自变量的系数或符号与实际情况严重不符等。
    检验方法主要有:容忍度(Tolerance)和方差膨胀系数(Variance inflation factor,VIF)。其中最常用的是VIF,计算公式为:
    VIF的取值大于1。VIF值越接近于1,多重共线性越轻,反之越重。当多重共线性严重时,应采取适当的方法进行调整 [3]  。容忍度的值界于0至1之间,当容忍度值较小时,表示此自变量与其他自变量之间存在共线性。容忍度这个变量回归系数的估计值不够稳定,则回归系数的计算值也会有很大误差。方差膨胀系数是容忍度的倒数,VIF越大,表示自变量的容忍度越小,越有共线性问题。
      通常以10作为判断边界。当VIF<10,不存在多重共线性;当10<=VIF<100,存在较强的多重共线性;当VIF>=100, 存在严重多重共线性。

    import numpy as np
    from sklearn.linear_model import LinearRegression

    coef0=np.array([5,6,7,8,9,10,11,12])
    X1=np.random.rand(100,8)
    y=np.dot(X1,coef0)+np.random.normal(0,1.5,size=100)
    training=np.random.choice([True,False],p=[0.8,0.2],size=100)
    lr1=LinearRegression()
    lr1.fit(X1[training],y[training])
    # 系数的均方误差MSE
    print(((lr1.coef_-coef0)**2).sum()/8)
    # 测试集准确率(R2)
    print(lr1.score(X1[~training],y[~training]))


    X2=np.column_stack([X1,np.dot(X1[:,[0,1]],np.array([1,1]))+np.random.normal(0,0.05,size=100)])
    X2=np.column_stack([X2,np.dot(X2[:,[1,2,3]],np.array([1,1,1]))+np.random.normal(0,0.05,size=100)])
    X3=np.column_stack([X1,np.random.rand(100,2)])

    import matplotlib.pyplot as plt
    clf=LinearRegression()
    vif2=np.zeros((10,1))
    for i in range(10):
    tmp=[k for k in range(10) if k!=i]
    clf.fit(X2[:,tmp],X2[:,i])
    vifi=1/(1-clf.score(X2[:,tmp],X2[:,i]))
    vif2[i]=vifi

    plt.figure()
    ax = plt.gca()
    ax.plot(vif2)
    #ax.plot(vif3)
    plt.xlabel('feature')
    plt.ylabel('VIF')
    plt.title('VIF coefficients of the features')
    plt.axis('tight')
    plt.show()

    转载于:https://www.cnblogs.com/liu-304711/p/10945717.html

    展开全文
  • 多重共线性VIF

    千次阅读 2020-06-24 15:11:07
    多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。 方差膨胀系数(variance inflation factor,VIF) 是衡量多元线性回归模型中复 (多重)共线性严重程度的一种度量。...

    多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。

    方差膨胀系数(variance inflation factor,VIF)

    是衡量多元线性回归模型中复 (多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。
    多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。
    检验方法主要有:容忍度(Tolerance)和方差膨胀系数(Variance inflation factor,VIF)。其中最常用的是VIF,计算公式为:1/(1-R2)
    VIF的取值大于1。VIF值越接近于1,多重共线性越轻,反之越重。当多重共线性严重时,应采取适当的方法进行调整。
    容忍度的值界于0至1之间,当容忍度值较小时,表示此自变量与其他自变量之间存在共线性。容忍度这个变量回归系数的估计值不够稳定,则回归系数的计算值也会有很大误差。方差膨胀系数是容忍度的倒数,VIF越大,表示自变量的容忍度越小,越有共线性问题。
    通常以10作为判断边界。当VIF<10,不存在多重共线性;当10<=VIF<100,存在较强的多重共线性;当VIF>=100, 存在严重多重共线性。

    ## 多重共线性对线性回归和逻辑回归的影响
    多重共线性是指在变量空间中,存在自变量可以近似地等于其他自变量的线性组合:
    Y 约等于 W1X1 + W2X2 + … + Wn*Xn
    此时如果将所有自变量用于线性回归或逻辑回归的建模,将导致模型系数不能准确表达自变量对Y的影响。比如:如果X1和X2近似相等,则模型Y = X1 + X2 可能被拟合成Y = 3 X1 - X2,原来 X2 与 Y 正向相关被错误拟合成负相关,导致模型没法在业务上得到解释。在评分卡建模中,可能将很多相关性很高的变量加入到建模自变量中,最终得到的模型如果用变量系数去解释自变量与目标变量的关系是不合适的。

    展开全文
  • 文章目录多重共线性检验-方差膨胀系数(VIF)1、原理:2、多重共线性:3、检验方法:方差膨胀系数(VIF):相关性检验:4、代码测试4.1 导入相关库4.2准备数据4.3计算膨胀因子4.4计算相关系数4.5分割测试集4.6模型...


    ✌ 多重共线性检验-方差膨胀系数(VIF)

    1、✌ 原理:

    方差膨胀系数是衡量多元线性回归模型中多重共线性严重程度的一种度量。
    它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。

    2、✌ 多重共线性:

    是指各特征之间存在线性相关关系,即一个特征可以是其他一个或几个特征的线性组合。如果存在多重共线性,求损失函数时矩阵会不可逆,导致求出结果会与实际不同,有所偏差。

    例如:

    x1=[1,2,3,4,5]
    x2=[2,4,6,8,10]
    x3=[2,3,4,5,6]
    # x2=x1*2
    # x3=x1+1
    

    上述x2,x3都和x1成线性关系,这会进行回归时,影响系数的准确性,说白了就是多个特征存在线性关系,数据冗余,但不完全是,所以要将成线性关系的特征进行降维

    3、✌ 检验方法:

    ✌ 方差膨胀系数(VIF):

    通常情况下,当VIF<10,说明不存在多重共线性;当10<=VIF<100,存在较强的多重共线性,当VIF>=100,存在严重多重共线性

    # 导入计算膨胀因子的库
    from statsmodels.stats.outliers_influence import variance_inflation_factor 
    # get_loc(i) 返回对应列名所在的索引
    vif=[variance_inflation_factor(x.values,x.columns.get_loc(i)) for i in x.columns]
    list(zip(list(range(1,21)),vif))
    

    ✌ 相关性检验:

    这个就不举例子,很容易的

    import pandas as pd
    data=pd.DataFrame([[3,4],[4,5],[1,2]])
    data.corr()
    

    4、✌ 代码测试

    说明:由于只是介绍多重相关性,所以建模的参数都为默认,只是基本结构

    4.1 ✌ 导入相关库

    # 画图
    import seaborn as sns
    # 制作数据集
    from sklearn.datasets import make_blobs
    # VIF膨胀因子
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    # 分割数据集
    from sklearn.model_selection import train_test_split
    # 逻辑回归
    from sklearn.linear_model import LogisticRegression
    # AUC和准确度
    from sklearn.metrics import accuracy_score
    from sklearn.metrics import roc_auc_score
    
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    

    4.2 ✌ 准备数据

    在这里插入图片描述

    data=pd.read_excel('股票客户流失'.xlsx)
    # 提取特征矩阵和标签
    x=data.drop(columns=['是否流失'])
    y=data['是否流失']
    

    4.3 ✌ 计算膨胀因子

    在这里插入图片描述

    vif=[variance_inflation_factor(x.values,x.columns.get_loc(i)) for i in x.columns]
    list(zip(list(range(1,21)),vif))
    

    4.4 ✌ 计算相关系数

    在这里插入图片描述

    x.corr()
    # 可以画出热力图进行展示
    plt.subplots(figsize=(20,16))
    ax=sns.heatmap(x.corr(),vmax=1,square=True,annot=True)
    

    在这里插入图片描述

    4.5 ✌ 分割测试集

    x_train,x_test,y_train,y_test=train_test_split(x,
                                                   y,test_size=0.2,
                                                   random_state=2021
                                                   )
    

    4.6 ✌ 模型选择

    clf=LogisticRegression(max_iter=300)
    clf.fit(x_train,y_train)
    y_pred=clf.predict(x_test)
    accuracy_score(y_test,y_pred)
    

    在这里插入图片描述

    4.7 ✌ AUC值

    roc_auc_score(y_test,clf.predict_proba(x_test)[:,1])
    

    在这里插入图片描述

    4.8 ✌ 模型调整

    由上述VIF值可以看出 累计交易佣金和账户资金有较强的多重相关性,所以考虑删除二者中的某个特征进行建模,我们分别删除两个特征进行对比

    4.8.1 ✌ 删除 账户资金

    x=x.drop(columns=['账户资金(元)'])
    x=pd.DataFrame(x)
    y=y
    vif=[variance_inflation_factor(x.values,x.columns.get_loc(i)) for i in x.columns]
    vif
    

    在这里插入图片描述

    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=2021)
    clf=LogisticRegression(max_iter=300)
    clf.fit(x_train,y_train)
    y_pred=clf.predict(x_test)
    accuracy_score(y_test,y_pred)
    

    在这里插入图片描述

    roc_auc_score(y_test,clf.predict_proba(x_test)[:,1])
    

    在这里插入图片描述

    4.8.2 ✌ 删除 累计交易佣金

    x=x.drop(columns=['累计交易佣金(元)'])
    x=pd.DataFrame(x)
    y=y
    vif=[variance_inflation_factor(x.values,x.columns.get_loc(i)) for i in x.columns]
    vif
    

    在这里插入图片描述

    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=2021)
    clf=LogisticRegression(max_iter=300)
    clf.fit(x_train,y_train)
    y_pred=clf.predict(x_test)
    accuracy_score(y_test,y_pred)
    

    在这里插入图片描述

    roc_auc_score(y_test,clf.predict_proba(x_test)[:,1])
    

    在这里插入图片描述

    5、✌ 总结

    Score AUC面积
    原始特征 0.7806 0.8194
    删除账户资金 0.7821 0.8149
    删除累计交易佣金 0.7586 0.7272
    • 我们可以看出当我们删除账户资金这列特征时,分数有所上升,而AUC值下降了一点,不过影响不大,那么删除了共线性的特征是对我们模型的准确性是有作用的
    • 但是我们发现删除累计交易佣金这列特征时,准确性反倒有所下降,这是为什么?不是删除共线性的特征对模型有帮助吗,这时我们就会想可能是累计交易佣金这列特征所包含的信息较多,贸然删除的化,可能会导致模型拟合不足(欠拟合)
    • 而账户资金和累计交易时相关的,可以理解为账户资金的信息依靠累计交易,类似于数学里面的子集这种(不过这种理解是错误的),就是两列数据存在强烈的相关性,但累计交易佣金这列数据包含的数据相对于账户资金这列数据对模型的贡献比较高
    展开全文
  • 在统计学中,多重共线性(共线性)是指多元线性回归模型中的某个预测变量(自变量/解释变量)可以以相当大的准确度通过其他预测变量线性预估。 在这种情况下,模型或数据的微小变化就可能导致多元回归模型的系数估计值...

    在统计学中,多重共线性(共线性)是指多元线性回归模型中的某个预测变量(自变量/解释变量)可以以相当大的准确度通过其他预测变量线性预估。 在这种情况下,模型或数据的微小变化就可能导致多元回归模型的系数估计值出现不规律地改变,可能造成如下后果:回归系数的普通最小二乘估计量可靠度降低。如图1与2所示,随着多重共线性程度的提高,参数方差(

    表示变量

    的相关度)会急剧上升到很大的水平,理论上使最小二乘法估计的有效性、可靠性和价值都受到影响,实践中参数估计的可靠程度下降。图1. 二元线性回归模型图2. 二元线性回归系数的最小二乘估计量与方差回归系数的普通最小二乘估计量的业务含义不合理。如β1的普通最小二乘估计量的意义是:在自变量

    维持不变的情况下,自变量

    每变化一个单位时因变量

    的均值的变化率。然而,模型在存在不完全多重共线性的问题时,自变量

    是高度线性相关的,因此无法做到保持变量

    不变的情况下,只变化变量

    的值。也就是说,此时反映的是自变量

    对因变量

    的共同影响,而不是

    的独立影响,并且没有方法能够度量

    中自变量

    对因变量

    的各自影响的大小。因此,失去了

    原本的业务含义。

    变量无法通过显著性检验的概率增大,可能将重要的解释变量排除在模型之外。如对变量

    进行显著性检验,原假设为

    ,检验统计量

    值为

    。如前所述,当自变量

    存在高度线性相关,并且相关程度越来越高时,

    的方差和标准差迅速增大,从而使得

    值变小,接受原假设的可能性增大,即变量无法通过显著性检验的概率增大。

    但是务必强调的一点是,多重共线性不会降低整个模型的预测能力或可靠性, 它只影响有关个体预测因子(individual predictors)的计算。 也就是说,一个具有共线预测变量的多元回归模型可以指示所有预测变量组合对因变量的预测结果,但它可能不能给出任何单个预测变量的有效结果,也不能说明哪些预测因子相对于其他预测因子是多余的。(That is, a multivariate regression model with collinear predictors can indicate how well the entire bundle of predictors predicts the outcome variable, but it may not give valid results about any individual predictor, or about which predictors are redundant with respect to others.)

    LR作为回归模型之一,多重共线性同样会导致LR的系数不准确,产生偏差,进而导致模型的解释出现问题,更甚者,在使用递归特征消除法逐步筛选变量时,会产生不利影响。如果你期望的变量总是进入不了模型,很有可能就是多重共线性造成的影响。

    因此,如何检查自变量的多重共线性及其共线程度是个重要命题。

    相关性分析是检查多重共线性的手段之一,通常认为,相关系数高于0.8,就存在共线性;但是,但是,但是,相关系数低,并不能表示不存在多重共线性!!!目前业界检验共线性最常用的方法是VIF检验。VIF越高,多重共线性的影响越严重。由于没有VIF临界值表,我们只能使用经验法则:若VIF>5,则存在严重多重共线性。也有人建议用VIF>10作为存在严重多重共线性的标准,特别在解释变量多的情形应当如此。

    利用Python进行VIF检验也很简单, 计算案例数据来源于此。

    import pandas as pd

    import numpy as np

    from statsmodels.stats.outliers_influence import variance_inflation_factor

    #宽表

    data = pd.DataFrame([[15.9,16.4,19,19.1,18.8,20.4,22.7,26.5,28.1,27.6,26.3]

    ,[149.3,161.2,171.5,175.5,180.8,190.7,202.1,212.1,226.1,231.9,239]

    ,[4.2,4.1,3.1,3.1,1.1,2.2,2.1,5.6,5,5.1,0.7]

    ,[108.1,114.8,123.2,126.9,132.1,137.7,146,154.1,162.3,164.3,167.6]]).T

    #自变量

    X=data[[1,2,3]]

    #✨✨✨务必注意✨✨✨,一定要加上常数项

    X[4]=1

    #计算第2个变量的(第二列)的方差膨胀因子

    variance_inflation_factor(X[[1,2,3,4]].values,1)

    #如果没有常数项列,计算结果天差地别,可能VIF等于好几千

    展开全文
  • Python 多重共线性检验

    2021-03-13 10:28:41
    多重共线性概念 共线性问题指的是输入的自变量之间存在较高的...共线性检验 1. 方差膨胀系数(variance inflation factor,VIF) VIF是容忍度的倒数,值越大则共线性问题越明显,通常以10作为判断边界。当VIF<10,不存
  • 一个应用MATLAB对数据进行多重共线性检验的小程序。在进行多元线性回归前,通常需要进行多重共线性检验,以保证良好的回归效果。多重共线性的表征方法为VIF值,改程序用于自动计算VIF值。
  • =i] clf.fit(X2[:,tmp],X2[:,i]) vifi=1/(1-clf.score(X2[:,tmp],X2[:,i])) vif2[i]=vifi plt.figure() ax = plt.gca() ax.plot(vif2) #ax.plot(vif3) plt.xlabel('feature') plt.ylabel('VIF') plt.title('VIF ...
  • 本文将讨论多重共线性的相关概念及利用python自动化消除多重共线性的方法,以供参考,欢迎拍砖 线性模型与非线性模型 关于线性模型与非线性模型的定义,似乎并没有确切的定论,但是个人认为建模首先得清楚地认识...
  • 高斯-马尔科夫定理:若满足A1和A2假定,则采用最小二乘法得到回归参数估计是最佳线性无偏估计 方程估计值b1和b2可以看做偏回归系数,也是相应自变量对y的一种偏效应 偏效应:在控制变量下,各自变量X对因变量Y的净...
  • VIF 多重共线性膨胀因子

    千次阅读 2020-10-09 15:25:42
    方差膨胀系数(variance inflation factor,VIF)是衡量多元线性回归模型中复 (多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。 多重共线性是指自变量之间存在...
  • 更多精彩内容请关注我们小...在进行了回归分析后,我们首先对自变量进行多重共线性检验,以判断自变量是否存在多重共线性,此处我们使用方差膨胀因子来进行检验。方差膨胀因子简称VF左侧表格展示的是VIF的检验结果,从其...
  • 多重共线性详解

    2020-12-26 23:04:23
    目录 1、多重共线性的现象 2、出现的原因 3、判别标准 4、检验方法 5、多重共线性有什么影响 6、多重共线性处理方法 7、其他说明 8、多重共线性识别-python代码8.1、vif检验8.2 相关系数8.3 聚类 9、宏观把握共线性...
  • 在统计学中,多重共线性共线性)是指多元线性回归模型中的某个预测变量(自变量/解释变量)可以以相当大的准确度通过其他预测变量线性预估。 在这种情况下,模型或数据的微小变化就可能导致多元回归模型的系数估计...
  • 方差扩大因子(variance inflation factor)简称VIF,是表征自变量观察值之间复共线性程度的数值。线性回归分析中,回归系数βj的估计量的方差为σ2Cjj,其中Cjj=(1-Rj)-1,称Cjj为βj的方差扩大因子,这里Rj为xj对...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

共线性检验vif