精华内容
下载资源
问答
  • 2、根据如上线性回归模型得到相应的判决系数R2R^2R2,进而计算第 一个自变量的方差膨胀因子VIF: import pandas as pd import numpy as np from sklearn import model_selection import statsmodels.api as sn from...

    过程

    1、构造每一个自变量与其余自变量的线性回归模型,例如,数 据集中含有p个自变量,则第一个自变量与其余自变量的线性组合可以 表示为
    在这里插入图片描述
    2、根据如上线性回归模型得到相应的判决系数R2R^2,进而计算第 一个自变量的方差膨胀因子VIF:
    在这里插入图片描述

    import pandas as pd
    import numpy as np
    from sklearn import model_selection
    import statsmodels.api as sn
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    
    sdata = pd.read_csv("../input/traindatas/char7/Predict to Profit.csv")
    print(sdata.columns)
    X  = sn.add_constant(sdata.loc[:,['RD_Spend', 'Marketing_Spend']])
    vif = pd.DataFrame()
    vif["Ficture"] = X.columns
    vif["Fctor"] = [variance_inflation_factor(X.values,i) for i in range(X.shape[1])]
    print(vif)
    

    执行结果如下,如上结果所示,两个自变量对应的方差膨胀因子均低于10,说明构 建模型的数据并不存在多重共线性。如果发现变量之间存在多重共线性 的话,可以考虑删除变量或者重新选择模型

    Index(['RD_Spend', 'Administration', 'Marketing_Spend', 'State', 'Profit'], dtype='object')
               Ficture     Fctor
    0            const  4.540984
    1         RD_Spend  2.026141
    2  Marketing_Spend  2.026141
    

    过程计算

    import pandas as pd
    import numpy as np
    from sklearn import model_selection
    import statsmodels.api as sn
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    
    sdata = pd.read_csv("../input/traindatas/char7/Predict to Profit.csv")
    model = sn.formula.ols("RD_Spend~Marketing_Spend",data=sdata).fit()
    print(1/(1-model.rsquared))
    

    执行结果

    2.026140603233619
    

    上面我仅仅计算了以RD_Spend为因变量计算的VIF值,和上面的一样,为2.026140603233619

    展开全文
  • VIF 多重共线性膨胀因子

    千次阅读 2020-10-09 15:25:42
    方差膨胀系数(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, 存在严重多重共线性。

    例子

    from sklearn.datasets import load_iris
    from sklearn.preprocessing import MinMaxScaler
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    import numpy as np
    import pandas as pd
    min_max_scaler = MinMaxScaler()
    iris = load_iris()
    iris_scaler = min_max_scaler.fit_transform(iris.data)
    iris_scaler = pd.DataFrame(iris_scaler)
    iris_scaler['target'] = iris.target
    X = np.matrix(iris_scaler)
    VIF_list = [variance_inflation_factor(X, i) for i in range(X.shape[1])]
    print(VIF_list)
    

    返回值为

    [28.06795814087517,
     3.80566826039568,
     85.84941787221807,
     60.42475320136888,
     35.615649563661286]
    
    展开全文
  • 方差膨胀系数(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)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值下降了一点,不过影响不大,那么删除了共线性的特征是对我们模型的准确性是有作用的
    • 但是我们发现删除累计交易佣金这列特征时,准确性反倒有所下降,这是为什么?不是删除共线性的特征对模型有帮助吗,这时我们就会想可能是累计交易佣金这列特征所包含的信息较多,贸然删除的化,可能会导致模型拟合不足(欠拟合)
    • 而账户资金和累计交易时相关的,可以理解为账户资金的信息依靠累计交易,类似于数学里面的子集这种(不过这种理解是错误的),就是两列数据存在强烈的相关性,但累计交易佣金这列数据包含的数据相对于账户资金这列数据对模型的贡献比较高
    展开全文
  • 方差膨胀因子

    2021-05-09 13:45:08
    例如,数 据集中含有p个自变量,则第一个自变量与其余自变量的线性组合可以 表示为 2、根据如上线性回归模型得到相应的判决系数,进而计算第 一个自变量的方差膨胀因子VIF: import pandas as pd import numpy as ...
  • 通常较大的两个方差膨胀因子表明这两个变量自身本来就具有高度相关性,即这两个变量一起才解释一种东西,可以考虑去除一个自己并不怎么感兴趣的变量即可,也回到了我们最开始的目的:多重线性回归模型的主要假设之一...
  • XXX满秩(无多重共线) 零均值价值:E(εi∣Xi)=0E(ε_i|X_i)=0E(εi​∣Xi​)=0(自变量外生) 同方差:Var(εi∣Xi)=σVar(ε_i|X_i)=σVar(εi​∣Xi​)=σ 无自相关:cov(εi,εj)=0cov(ε...
  • 但还有一个显著的因素,就是选取因子之间可能存在高度的多重共线性,导致模型对股票价格与市场的解释能力存在很大偏误。    为了在筛选因子之初就避免陷入这样的误区。本文介绍一种VIF(方差膨胀检验)方法,来...
  • 方差膨胀因子(VIF)学习

    万次阅读 2020-03-01 00:55:27
    参考博客:...1.导入数据,R自带研究共线性的数据集 该数据集有7个变量,其中GNP.deflator可以作为yyy rm(list=ls()) data=longley print(data) 2.对全变量建立回归模型 model=lm(GNP.deflator~.,data=d...
  • 可决系数R^2和方差膨胀因子VIF

    千次阅读 2019-06-30 14:33:00
    然而很多时候,被筛选的特征在模型上线的预测效果并不...介绍一种VIF(方差膨胀检验)方法,来对特征之间的线性相关关系进行检验,从而选取到独立性更好的特征,增强模型的解释能力。 1.可决系数R^2 1.1什么是...
  • 多重共线性、异方差、自相关多重共线性方差自相关 多重共线性 1 多重共线性是指各个解释变量之间有准确或近似准确的线性关系。 2 多重共线性的原因: (1)经济变量之间具有共同变化趋势。 (2).利用截面数据建立...
  • 多重共线性是指自变量彼此相关的一种情况。当你拟合模型并解释结果时,多重共线性可能会...多重共线性高度影响与问题相关的方差,也会影响模型的解释,因为它削弱了自变量的统计显著性。对于一个数据集,如果一些...
  • 文章目录多重共线性@[toc]1 什么是多重共线性1.1 多重共线性含义1.2 多重共线性产生原因2 多重共线性后果2.1 完全型2.2 不完全型3 多重共线性检验3.1 简单相关系数检验3.2 方差膨胀因子法3.3 经验法3.4 逐步回归检测...
  • 多重共线性

    2020-09-11 20:30:00
    1.回归模型自变量彼此相关称为多重共线性,它给模型提供重复信息2.多重共线性会造成模型不稳定,可能会得到无法解释的现象3.检测共线性的方法通常有相关性分析,显著性检验和方差膨胀因子分析4...
  • 因此,方差膨胀因子(VIF)和条件指数(CI)被用作这种检测的量度。 除了传统的简单线性回归之外,岭回归(RR)和主成分回归(PCR)是建模中使用的其他两种方法。 为了比较这两种方法,使用了模拟数据。 我们的任务...
  • 多重共线性的确认: 做出自变量间的相关系数矩阵:如果相关系数超过0.9的变量在分析时将会存在共线性问题。在0.8以上可能会有问题。...【2】方差膨胀因子(Variance inflation factor, VIF): 由Marquardt于1960年
  • 多重共线性问题

    千次阅读 2020-09-02 13:13:13
    概述 在将数据放入到模型中进行训练时,经常需要检验各维度之间的可能存在的多重共线性的问题。接下来将简单介绍共线性的识别和常用解决办法。...一般含有如下指标:容忍度、方差膨胀因子、特征值等几个特征来
  • 如何消除多重共线性

    千次阅读 2021-06-13 08:42:13
    介绍 机器学习是一种解决不能明确编码的问题的方法,例如,分类问题。机器学习模型将从数据中学习一种模式,因此我们可以使用它来确定数据属于哪个类。...如果我们不去除多重共线性,我们将永远不会知道一个变量对结果
  • 多重线性在进行多重线性回归时,有一个隐含假设为各个自变量之间相互独立;若自变量之间存在线性相关关系,则称存在多重线性。怎么判断自变量之间存在多重线性?常用的评价指标有两个:容许度和膨胀因子(VIF...
  • 多重共线性详解

    千次阅读 2020-12-26 23:04:23
    目录 1、多重共线性的现象 2、出现的原因 3、判别标准 4、检验方法 5、多重共线性有什么影响 6、多重共线性处理方法 7、其他说明 8、多重共线性识别-python代码8.1、vif检验8.2 相关系数8.3 聚类 9、宏观把握共线性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 741
精华内容 296
关键字:

多重共线性方差膨胀因子