2016-12-02 29 views
0

我看到很多功能的工程有get_dummies上的物体的特征步骤。例如,将包含“M”和“F”的性别列虚拟为两列,并将其标记为一次性表示。 为什么我们不直接在性别栏中将'M'和'F'设置为0和1? 虚拟方法是否对分类和回归模型中的机器学习模型都有积极影响? 如果是这样,为什么? 谢谢。使用虚拟值会使模型的性能更好吗?

+0

虚值被称为嘈杂的标签。是的,他们在一定程度上是有益的。 – user1211

+0

直说,我想单独一列一分为二,意味着模型尺寸增加1,它不是100%的保证的益处必须存在(至少在M/F列)。但是为特征集增加1个维度意味着您的程序可以接受更多的维度复杂度,因此在某些情况下,它可以有利于输出的准确性,但缺点可能是系统需要维护更大的维度集。你也相对需要更大的训练集来防止过度训练 – SKLTFZ

+0

简短的回答:当然是。许多分类器/回归器仅对数值数据有效(其中特征3是具有值1的特征的3倍差/好; SVM,最近邻居)。其他人并不在乎(随机树)。其他人至少可以从虚拟变量(NN)中受益。对于分类功能来说,这当然是一件坏事。因此创建了假人。这是非常基本的东西。每个ML教程都可以帮助你。构建一个简单的线性回归器示例。在这种情况下很容易看到。 – sascha

回答

0

要独热编码与N可能值的功能,你只需要N-1列与0/1值。所以你是对的:二进制性可以用一个二进制特征编码。

使用虚拟编码与N功能而不是N-1应该不会真正增加任何机器学习模型的性能,并且会使一些统计分析(如ANOVA)变得复杂。

patsy docs on contrasts参考。

1

一般情况下,直接编码具有N个不同值的分类变量直接与(0,1,...,N-1),并变成数值变量不会与很多算法工作,因为你给广告对不同类别变量的特殊含义。性别示例的工作原理是二元的,但考虑汽车模型的价格估算示例。如果有N个不同的型号,如果你编码模型中的3个和6个B型,这将意味着,例如,对于OLS线性回归的B型影响响应变量的2倍以上相比,模型A.你不能简单地将这种随机意义赋予不同的分类值,所生成的模型就没有意义。为了防止这种数字歧义,最常见的方法是用N-1二进制单热变量对具有N个不同值的分类变量进行编码。

+0

谢谢。在N-1二进制值的每一列中,0和1是编码的最佳方式? – yanachen

相关问题