机器学习笔记——Dummy Coding 哑变量
一文读懂哑变量/虚拟变量是什么,怎么用
目录
前言
在学习哑变量方法这个过程中,参考了一些其他的博客文章,发现并没有特别满意的版本,所以想自己整理撰写一篇。
另外,哑变量方法不止在机器学习中经常用到,在统计学(特别是计量经济学)中也是非常重要的方法,因为两者都会涉及到线性模型的构建,为了同时照顾到在这两个领域都很感兴趣的同志,这篇文章尽量使用比较通用的语句,同时也不包含任何代码。
当然,尽管有这样的想法,实际上一篇文章还是做不到完全专业和严谨,所以可能会产生一些错误,欢迎交流!
什么是哑变量
在做机器学习的特征工程时,我们都会接触到一个基本的概念,即特征的“序(order)”关系。比如,对于年龄而言,我们潜意识里就有一个青年、中年、老年的排序大小关系,所以很轻松的就可以把这个特征的取值集合设置为{1,2,3},而这也会被大多数研究者理解。但是,如果特征的取值不存在明显的序,那么这个动作就比较“危险”。比如,人的人种有黑、白、黄三种,但是我们往往不能构建出一种合理的序关系,也就是不能简单的使用{1,2,3}这个取值集合,而这个时候,为了解决这个问题,我们就就有必要使用哑变量方法来合理的构造解释变量。
那么具体哑变量是怎么构造出来的呢?换句话说,为什么哑变量方法可以解决这个问题呢?这就需要知道哑变量的基本构造形式。我们知道,哑变量又叫虚拟变量,就是我们人为地把这个解释变量拆解成若干个虚拟变量的组合。
我们就拿上面的例子讲解,对于人的三种人种,在线性模型中,我们假设某个被解释变量只和这个特征相关,即:
如上文分析,这个模型显然是不太合理的。这个时候,我们可以以“白种人”作为参照(没有歧视),人为地设置“yellow”、“black”两个变量,那么现在,y就与这两个解释变量相关,形式上就是:
当特征为“黄”或者“黑”时,模型中对应变量就取1,另一个变量取0;如果特征为“白”,两个变量均取0。现在我们再看这个模型,是不是非常好解释了?所以说,看似设置哑变量让模型的解释变量更多了,但实际上让模型的解释性更强了,这就是哑变量的优势。就像一个大蒜,我们把每一个蒜瓣拨开把它们独立起来。这里需要注意,我们绝对不能把所有的可能取值都设置一个虚拟变量,如把“白”也设置一个变量white,如下:
这样的话,如果yellow、black都取0,那white就必须是1(一个人一定会有人种特征),换句话说,这三个解释变量具有强相关性,这就不能接受了。我们在反过头看上一个模型,由于只设置了两个变量,一个变量的取值与另一个变量的取值显然是没有关系的,所以不存在相关性。也就是说,对于有k个取值的特征,我们只需要设置k-1个哑变量即可,而剩下的一个变量作为参照。
当然,并不是说具有序关系的特征就不可以使用哑变量,只要是可以更好的完成机器学习任务,我们也完全可以使用哑变量的方法。
怎么用哑变量
当我们知道了哑变量是什么,那么使用哑变量的方法也就比较清楚了。首先,我们需要知道这个特征的取值集合是离散的还是连续的,这里分不同情况讨论一下。
这里需要提前说明的是,对于一个特征的不同取值是否存在序关系,这个并不是一个完全客观的判断,换句话说,我完全可以觉得在我的机器学习任务中,黑色人种的取值会比白色人种大,黄色人种最小(无歧视)。所以这里不赘述以上内容,只以离散情况做总体讨论。而离散取值的特征比较简单的情况就如前文的例子展示。当然,我们在面临实际的任务时,特征的取值往往很复杂,所以我们需要具体情况具体分析,这里也不赘述。
对于连续取值的特征而言,我们通常不需要设置哑变量。但存在一种比较特殊的情况,就是变量的分布并不均匀,或者说在某几个区间内的不同取值对于被解释变量的影响比较微弱。这个时候我们可以考虑把特征取值离散化,转化成哑变量来作为新的解释变量。
另外,在参照的选取方面,在不同的任务中选取的方式通常也各不相同。比如,在体测成绩的特征取值中,我们可以选取标准成绩作为参照,也可以选取最差成绩作为参照。在病情检测中,我们可以选取完全健康身体指标作为参照等等。
总结
总的来说,哑变量方法的核心思想并不难理解,本身也不是非常复杂的方法。但是在实际操作中,还是需要多加练习,把它当做小技能来使用啦~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)