【发布时间】:2017-09-16 20:56:21
【问题描述】:
我正在处理由几十个关于人的二进制特征组成的数据,这些特征基本上归结为“人具有特征 x”[真/假]。
据我所知,在线分类数据应该是一次性编码的,而不是为每个类别分配任意值,因为您不能说“类别 1 小于类别 2”。所以解决方法是为每个类别创建一个虚拟变量:
Cat || dummy 1 | dummy 2 | dummy 3
____||_________|_________|________
1 || 1 | 0 | 0
2 || 0 | 1 | 0
3 || 0 | 0 | 1
现在对于二元特征,可以选择直接使用变量(1 表示真,0 表示假)或使用两个虚拟变量((1, 0) 表示真,(0, 1) 表示假。)。但我找不到任何显示/解释最佳方法的来源。
我自己很矛盾,因为一方面,虚拟变量降低了每个单独变量的重要性,这表明至少在某些情况下模型的准确性会受到影响,source。但另一方面,这也可以对缺失数据进行编码(以 (0, 0) 的形式)。此外,是否可以说“假小于真”?
我实际上是在 python 中使用随机森林,我知道基于树的分类器(如随机森林)支持分类数据,但 Sklearn 包还没有实现这一点。
我在 Sklearn 数字数据集上写了一个小测试。该数据集有许多 8 x 8 的数字图像 (0-9),每个像素都有一个介于 0 和 16 之间的值,一个简单的模型可以使用它来学习识别数字。
对于我的测试,我将 > 8 的值更改为 True,将
非常感谢您对推荐方法的解释!
【问题讨论】:
-
不,它们应该作为单一功能单独存在。实际上,从某种意义上说,它们已经是 one-hot 编码的。请记住,在 one-hot 编码中,建议删除最后一个特征,因为可以使用所有其他特征来推断它。引入总是与第一个特征相反的第二个特征只会增加特征的相关性(因为它可以从第一个特征导出)。无论如何,这个问题不适合 SO。也许张贴在 stats.stackexchange.com
-
谢谢。并没有考虑通过使用所有其他功能来推断最后一个功能。很抱歉把这个问题放在这里而不是放在 stats.SE 上。
-
@vivek 某些模型可能会出现这种情况,但并非所有模型都可以访问所有变量(即随机森林中仅具有特征子集的单个树)。在这种情况下,模型是否无法从 one-hot 编码中推断出潜在信息?
标签: python machine-learning scikit-learn