【问题标题】:Should binary features be one-hot encoded?二进制特征应该一次性编码吗?
【发布时间】: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


【解决方案1】:

将取值 [0, 1] 的二进制变量转换为 [(0, 1), (1, 0)] 的 one-hot 编码是多余的,不建议这样做,原因如下(其中一些已经在上面的评论中提到,但只是为了对此进行扩展):

  1. 这是多余的,因为二进制变量已经采用类似于 one-hot 编码的形式,其中最后一列被删除,因为无论有没有它都没有任何区别,因为它可以从第一个给定的column:如果我给你[(0, ), (1,)],你可以知道补列[(, 1), (, 0)]。

  2. 假设您有多个二进制变量,例如 4。如果将它们转换为 one-hot 编码形式,则维度会从 4 增加到 8。不推荐使用后者,原因如下:

    • 维度的诅咒:高维数据可能很麻烦。这是因为许多算法(例如聚类算法)使用欧几里得距离,由于平方项,欧几里得距离对噪声很敏感。事实上,随着维度的增加,数据点分散得太细,使得数据非常嘈杂。此外,邻域的概念变得毫无意义,基于寻找数据点距离之间的相对对比的方法变得不可靠。

    • 时间和内存复杂度:很明显,增加特征数量会使算法花费更多的执行时间和内存空间需求。仅举几例,在其计算中使用协方差矩阵的算法将受到影响。 多项式算法最终会包含太多项......等等。一般来说,特征越少,学习越快,尤其是在多余特征的情况下。

    • 多重共线性:由于二进制变量的 one-hot 编码形式的最后一列是冗余的,并且与第一列 100% 相关,这会给基于线性回归的方法带来麻烦算法。例如,由于普通最小二乘估计涉及矩阵求逆,如果许多特征相关,则计算机算法可能无法成功获得近似逆,因此逆可能在数值上不准确。此外,线性模型通过观察因变量 y 的变化以及一个自变量的单位变化来工作在将所有其他自变量保持为常数后,但以防万一自变量高度相关,后者失败 (there are more other consequences of Multi-Collinearity)(尽管其他一些算法可能对这一点不太敏感,如决策树)。

    • 容易过度拟合:一般来说,太多的特征(无论它们是否相关)可能会过度拟合您的模型并且无法泛化到新示例,因为数据集中的每个数据点都将由给定特征完全识别(搜索 Andrew NG 讲座,他对此进行了详细解释

总结

简而言之,将二进制变量转换为 one-hot 编码的变量是多余的,并且可能会导致不必要的和不请自来的麻烦。尽管相关特征可能并不总是会使您的模型恶化,但它们也不会总是改善它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2021-01-23
    • 2022-11-22
    • 2020-03-23
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多