多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性

多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性多重共线性在python中的解决方法本文将讨论多重共线性的相关概念及利用python自动化消除多重共线性的方法,以供参考,欢迎拍砖线性模型与非线性模型关于线性模型与非线性模型的定义,似乎并没有确切的定论,但是个人认为建模首先得清楚地认识样本,样本有线性可分与线性不可分两种,所谓是否线性可分,是指是否存在一条直线(或平面)将样本分开。上图中y=0和y=1的样本可以由一条直线分开,如逻辑回归…

大家好,又见面了,我是你们的朋友全栈君。

多重共线性在python中的解决方法

本文将讨论多重共线性的相关概念及利用python自动化消除多重共线性的方法,以供参考,欢迎拍砖

线性模型与非线性模型

关于线性模型与非线性模型的定义,似乎并没有确切的定论,但是个人认为建模首先得清楚地认识样本,样本有线性可分与线性不可分两种,所谓是否线性可分,是指是否存在一条直线(或平面)将样本分开。
多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性
上图中y=0和y=1的样本可以由一条直线分开,如逻辑回归模型最佳的应用样本即为上图样本(线性可分);如果样本是线性不可分,决策树等模型可以更有效地将样本分开,此时选择逻辑回归分类结果可能较差。
在这里插入图片描述
如上图中的样本,使用逻辑回归可能取得较差的分类效果。但是如果将特征映射到更高维空间,在这里插入图片描述
上式在二维直角坐标系中表现为圆,就可以将图中样本分开。
因此总结来说

  1. 选择何种模型取决于数据本身,线性可分数据使用逻辑回归等可以线性分开数据的线性模型可以取得更好的分类效果;线性不可分数据则不适合。
  2. 传统的线性模型可以通过将特征映射到高维空间中达到线性分开数据的目的,如SVM采用核技巧,逻辑回归加入原始特征的高维转换等。

多重共线性对线性回归和逻辑回归的影响

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

VIF 和相关系数

相关矩阵是指由样本的相关系数组成的矩阵,自变量相关系数过大意味着存在共线性,同时会导致信息冗余,维度增加。设置相关系数的阈值,当大于threshold时,删除IV值较小的变量(IV值的定义及计算后文解释)。
VIF(variance inflation factors)VIF =1/(1-R^2) 式中,R^2是以xj为因变量时对其它自变量回归的复测定系数。VIF越大,该变量与其他的变量的关系越高,多重共线性越严重。如果所有变量最大的VIF超过10,删除最大VIF的变量。

解决方案(利用statsmodels.stats)

利用相关系数删除相关性过高的变量(df中变量先得按IV值从大到小排序)

def get_var_no_colinear(cutoff, df):
    corr_high = df.corr().applymap(lambda x: np.nan if x>cutoff else x).isnull()
    col_all = corr_high.columns.tolist()
    del_col = []
    i = 0
    while i < len(col_all)-1:
        ex_index = corr_high.iloc[:,i][i+1:].index[np.where(corr_high.iloc[:,i][i+1:])].tolist()
        for var in ex_index:
            col_all.remove(var)
        corr_high = corr_high.loc[col_all, col_all]
        i += 1
    return col_all

利用VIF删除导致高共线性的变量

import numpy as np
import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor
## 每轮循环中计算各个变量的VIF,并删除VIF>threshold 的变量
def vif(X, thres=10.0):
    col = list(range(X.shape[1]))
    dropped = True
    while dropped:
        dropped = False
        vif = [variance_inflation_factor(X.iloc[:,col].values, ix)
               for ix in range(X.iloc[:,col].shape[1])]
        
        maxvif = max(vif)
        maxix = vif.index(maxvif)
        if maxvif > thres:
            del col[maxix]
            print('delete=',X_train.columns[col[maxix]],'  ', 'vif=',maxvif )
            dropped = True
    print('Remain Variables:', list(X.columns[col]))
    print('VIF:', vif)
    return list(X.columns[col]) 

如果对原理和代码有问题。欢迎一起讨论哦,IV值的定义及计算后面再讲哈

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137450.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python2.7安装pytorch_PyTorch安装「建议收藏」

    python2.7安装pytorch_PyTorch安装「建议收藏」这个系列写了好几篇文章,这是相关文章的索引,仅供参考:以下是相关深度学习工具包的安装,包括Tensorflow,PyTorch,Torch等:首先安装libcupti-devsudoapt-getinstalllibcupti-dev然后用virtualenv方式安装Tensorflow(当前是1.4版本)sudoapt-getinstallpython-pippython…

    2022年6月24日
    27
  • Mysql 启动命令详解「建议收藏」

    Mysql 启动命令详解「建议收藏」1,找到mysql安装的bin目录,启动mysql进程。如:本机是:C:\ProgramFiles\MySQL\MySQLServer5.7\bin在cmd里切换到此目录,C:\>cdC:\ProgramFiles\MySQL\MySQLServer5.7\binC:\ProgramFiles\MySQL\MySQLServer5.7\bin>查看…

    2022年5月21日
    45
  • AppFabric_性能监视器汉化版

    AppFabric_性能监视器汉化版最近项目要上线了,appfabric这块是我比较担心的,因为以前项目的.netframework版本是3.5,而用了appfabric后必须升级为.net4.0.另appfabric究竟如何,还是有些担心  我个人最近要做的是多模拟安装了几次appfabric,准备好了需要用到的命令.  这两天把性能监视这块看看了,汇集了些资料,共享下了: 地址为:http://msdn.mic

    2022年10月17日
    3
  • hashmap put过程面试_面试时问你base在哪儿

    hashmap put过程面试_面试时问你base在哪儿一个HashMap能跟面试官扯上半个小时关注安琪拉的博客1.回复面试领取面试资料2.回复书籍领取技术电子书3.回复交流领取技术电子书前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。开场面试官:你先自我介绍一下吧!安琪拉:我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目…

    2022年8月22日
    6
  • 大数据平台数据脱敏介绍

    大数据平台数据脱敏介绍数据脱敏(DataMasking),又称数据漂白、数据去隐私化或数据变形。百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样,就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。可以看到数据脱敏具有几个关键点:敏感数据、脱敏规则、使用环境。敏感数据,又称隐私数据,常见的敏感数据有:姓名、身

    2022年6月21日
    25
  • 抖音API接口_抖音榜单数据api接口

    抖音API接口_抖音榜单数据api接口发布抖音视频接口一枚,无限制免费调用,但需要AppKey更新2019.09.231.视频统计信息公开2019.06.231.修复无水印解析失败BUG。2.接口返回内容调整,已获取视频播放量等统计信息,目前暂未公开。接口地址:https://api.berryapi.net/?s=Parse/Video请求示例:https://api.berryapi.net/?s=Parse/Video&…

    2022年10月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号