为什么我们需要丢弃一个虚拟变量?


16

我了解到,为了创建回归模型,我们必须通过将分类变量转换为虚拟变量来加以处理。例如,如果在我们的数据集中存在诸如location之类的变量:

Location 
----------
Californian
NY
Florida

我们必须像这样转换它们:

1  0  0
0  1  0
0  0  1

但是,建议无论存在多少个虚拟变量,都必须丢弃一个虚拟变量。

为什么我们需要丢弃一个虚拟变量?


3
因为第三个虚拟对象可以解释为前两个的线性组合:FL = 1-(CA + NY)。
chainD

@chainD但是对三个以上虚拟变量的解释是什么?
米顿·萨克·舒夫罗

2
无论总数是多少,它都会比您拥有的类别总数少1。扩展您的示例,说所有50个州都在数据集中表示。对于给定的个人,假设您查看的前49个虚拟变量恰好都是零,那么即使不看,您也知道最后一个虚拟变量是1(假设数据集中的每个人都来自50个州之一)。换句话说,可以说,最后一个虚拟对象的信息已经包含在第一个49的结果中。
chainD

@chainD谢谢
Mithun Sarker Shuvro '18

1
如果不是春天,不是夏天,也不是秋天,那就是冬天!
Stev

Answers:


10

简而言之,因为您的分类特征级别(此处为位置)在进行虚拟编码以进行回归时成为参考组,并且是多余的。我在这里引用形式:“ K个类别或级别的分类变量通常作为K-1个虚拟变量的序列进入回归。这相当于对级别均值的线性假设。”

这已经在这个非常好的stats.stackexchange答案中进行了讨论。

有人告诉我Yandex在Coursera开设了一门高级课程,如果您仍有疑问,请更详细地介绍该主题,请参见此处。请注意,您始终可以免费审核课程内容。;-)

另外一个不错的职位,如果你想要有很多的差异有统计学角度的例子和一个详尽的解释并不仅仅限于虚拟编码,看到这个来自加州大学洛杉矶分校(在读)

请注意,如果使用pandas.get_dummies,则有一个参数,即drop_first是否通过删除第一个级别从k个分类级别中获取k-1个虚拟对象。请注意default = False,这意味着不会删除该引用,并且会从k个分类级别中创建k个假人!


4
请注意,只有在模型具有截距(即常数项)的情况下,这才是正确的。否则,通过使用单热编码而不丢弃一个虚拟变量,您将隐式添加一个拦截器。
Elias Strehle,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.