为什么使用独热编码可以提高机器学习性能?

132

我注意到,当在一个特定的数据集(矩阵)上使用One Hot编码,并将其作为学习算法的训练数据时,相对于使用原始矩阵本身作为训练数据,它能够显著提高预测准确性。这种性能提升是如何发生的呢?


3个回答

260
许多学习算法要么为每个特征学习一个单一的权重,要么使用样本之间的距离。前者适用于线性模型(例如逻辑回归),它们易于解释。
假设你有一个只有单个分类特征“国籍”的数据集,其取值为“英国”,“法国”和“美国”。不失一般性,假设这些被编码为0、1和2。然后,在线性分类器中,你会得到该特征的权重w,它将基于约束w×x + b > 0或等价地w×x < b做出一定的决策。
问题在于,权重w不能编码三种选择。w×x的三种可能值是0、w和2×w。其中这三个都会导致相同的决策(它们都<b或≥b),或者“英国”和“法国”导致相同的决策,或者“法国”和“美国”给出相同的决策。没有可能让模型学习到“英国”和“美国”应该被赋予相同的标签,“法国”则是不同的。
通过独热编码,你有效地将特征空间扩展到了三个特征,每个特征都将得到自己的权重。因此,决策函数现在是w[UK]x[UK] + w[FR]x[FR] + w[US]x[US] < b,其中所有的x都是布尔值。在这个空间中,这样的线性函数可以表示任何可能性的和/析取(例如“英国或美国”,这可能是某个说英语的人的预测器)。
同样地,任何基于标准距离度量(例如k近邻算法)之间的学习者没有独热编码会变得混乱。使用朴素编码和欧氏距离,法国和美国之间的距离为1,美国和英国之间的距离为2。但是,在独热编码下,[1, 0, 0]、[0, 1, 0]和[0, 0, 1]之间的成对距离都相等于√2。

并非所有的学习算法都适用于此;决策树和派生模型例如随机森林,如果足够深,可以处理分类变量而无需进行独热编码。


5
谢谢您的留言,但是当我们使用OneHotEncoding对特征进行编码时,实际上会增加特征数量,这样做是否需要增加数据样本数量以确保不会过拟合? - Manoj
这不会导致一个不可识别的线性模型吗?对于所有特征的分类特征,所有列加起来等于一,那么如何解释权重? - Lindon
8
您能否指出一些文献,以便我可以进一步阅读这方面的内容?谢谢。 - Dr.Knowitall
1
在使用诸如boosting之类的机器学习技术时,是否使用低秩矩阵(在构建常规统计模型时不会使用)有益处? - Steve S
3
在我看来,这就像一个统计学家所谓的“虚拟变量”。但也许有一些节省存储空间的好处。 - Soldalma
显示剩余4条评论

4

为了通过独热编码增加特征,可以使用特征哈希。当您进行哈希处理时,可以将桶的数量指定为远少于新引入特征数量的数量。


0

当你想要预测类别时,你想要预测一组项目。不使用独热编码就像让类别有相邻的类别(例如:如果你使用类别的整数进行回归),以某种方式和特定顺序组织。

现在,如果你将类别0分配给0,类别1分配给1,类别2分配给2,而没有使用独热编码,而你的算法的预测不确定是否应该选择0或2:他是否应该预测1,尽管他认为它是0或2之一?

你看到了吧。对于你的数据输入也是如此:如果它们不应该被认为是相邻的,则不要将它们显示为相邻的输入给你的算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接