虚拟变量陷阱(Dummy Variable Trap)
虚拟变量陷阱(Dummy Variable Trap):指当原特征有m个类别时,如果将其转换成m个虚拟变量,就会导致变量间出现完全共线性的情况。
假设我们有一个特征“性别”,包含男性和女性两个类别,如果将此特征转换为2个虚拟变量,就是:男x1=[1,0],女x2=[0,1],意思就是:变量x1,当性别为男时,x1=1,否则x1=0;变量x2,当性别为女时,x2=1,否则x2=0。这样,目标y=w1x1+w2x2+b。因为x1+x2=1,因此,变量x1和变量x2之间存在线性关系,同时使用这两个变量将会导致共线性问题,使得模型参数无法估计。
解决的办法是:把目标y变成y=w1(x1+x2)+(w2-w1)x2+b=(w2-w1)x2+w1+b,意思就是把其中一个变量作为基准(这里是把“男”作为基准),将其从目标方程式中删去,这样只通过一个变量x2就能推导出所有信息,x2=1就表示性别为女,x2=0则表示性别为男。
需要注意的是,针对二元定性变量到虚拟变量的转换,直接对类别进行数字编码(男:0,女:1)和将其转换为虚拟变量(男:[0],女:[1])看似一样,但这只是一个巧合而已,这两种方法有本质的区别。前者是直接将类别型变量转变成离散值进行表示,后者是减少一个变量(作为基准),只留取一个变量,在此基础上对另一个变量进行推论。一定要注意不要搞混了。
总结来说就是:当原特征有m个类别时,我们需要将其转换成m-1个虚拟变量。
还有一点需要注意的是,基准类别该如何选择?如果基准类别选择不合理,虚拟变量之间仍然会存在共线性的问题。这里直接给出结论:选择占比最大的类别作为基准类别。假设有a,b,c三个类别,如果基准类别a占比太少,那么即使把a去除,b和c之和也会接近于1。
参考:https://cloud.tencent.com/info/a018bd66948cd1ac84665f6fafc2082a.html
虚拟变量陷阱(Dummy Variable Trap)的更多相关文章
- 含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解
版权声明:本文为博主原创文章,博客地址:,欢迎大家相互转载交流. 使用R语言做逻辑回归的时候,当自变量中有分类变量(大于两个)的时候,对于回归模型的结果有一点困惑,搜索相关知识发现不少人也有相同的疑问 ...
- 虚拟变量和独热编码的区别(Difference of Dummy Variable & One Hot Encoding)
在<定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)>一文中,我们可以看到虚拟变量(Dummy Var ...
- 131.003 数据预处理之Dummy Variable & One-Hot Encoding
@(131 - Machine Learning | 机器学习) Demo 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制 {sex:{male, female}} ...
- R语言:利用caret包中的dummyVars函数进行虚拟变量处理
dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterizati ...
- 变量隐藏Accidental Variable Shadowing
6.5 - Variable shadowing (name hiding) | Learn C++ https://www.learncpp.com/cpp-tutorial/variable-sh ...
- R如何检验类别变量(nominal variable)与其他变量之间的相关性
1.使用Pearson积差相关系性进行检验的话可以判断两个变量之间的相关性是否显著以及相关性的强度 显著性检验 (significant test) 连续变量 vs 类别变量 (continuous ...
- Go语言规格说明书 之 变量声明(Variable/Short variable declarations)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- c++并发编程之条件变量(Condition Variable)
条件变量(Condition Variable)的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒.经典的「生产者-消费者」问题就可以用条件 ...
- tensorflow变量作用域(variable scope)
举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...
随机推荐
- 《JAVA高并发编程详解》-类的加载过程简介
- JAVA调用ORACLE存储过程时间类型参数没有日期
是因为使用cs.setDate()给数据库传参数只会传日期部分.如果改用如下代码就可以: cs.setTimestamp(3, new java.sql.Timestamp(dKssj.getTime ...
- WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?
原文:WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里? 在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标 ...
- MVC学习笔记(三)—用EF向数据库中添加数据
1.在EFDemo文件夹中添加Controllers文件夹(用的是上一篇MVC学习笔记(二)—用EF创建数据库中的项目) 2.在Controllers文件夹下添加一个空的控制器(StudentsCon ...
- 浮动IP地址(Float IP)与 ARP欺骗技术
浮动IP地址: 一个网卡是可以添加多个IP的. 就是多个主机工作在 同一个集群中,即两台主机以上.每台机器除了自己的实IP外,会设置一个浮动IP,浮动IP与主机的服务(HTTP服务/邮箱服务)绑在一起 ...
- spring boot 分布式锁组件 spring-boot-klock-starter
基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 sprin ...
- 2019 易车java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.易车等公司offer,岗位是Java后端开发,最终选择去了易车. 面试了很多家公司,感觉大部分公司考察的点都差不多 ...
- InputStream和OutputStream及相关知识汇总
https://www.jianshu.com/p/e5bc7ea5f948 最近帮学姐写爬虫的时候遇到奇怪的问题,同样的程序在Mac上可以正常运行而在Windows上返回结果错误,最后经排查发现是L ...
- 面试官再问Redis分布式锁如何续期?这篇文章甩 他一脸
一.真实案例 二.Redis分布式锁的正确姿势 据肥朝了解,很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了.关键是该工具类中还充斥着很多System.out.prin ...
- 解决for循环中异步处理(异步变同步)
前沿:参考ES6语法的async/await的处理机制 先上一段代码 function getMoney(){ var money=[100,200,300] for( let i=0; i<m ...