为什么一个热门编码可以提高机器学习性能?
我注意到,当一个热门编码被用在一个特定的数据集(一个matrix)上,并用作学习algorithm的训练数据时,与使用原始matrix本身作为训练数据相比,它在预测准确性方面显示了更好的结果。 这种性能如何增长?
许多学习algorithm要么学习每个特征的单个权重,要么使用样本之间的距离。 前者是逻辑回归等线性模型的情况,这很容易解释。
假设您的数据集只有一个“国籍”的分类特征,其值为“英国”,“法国”和“美国”。 假设在不失一般性的情况下,它们被编码为0,1和2.然后,在线性分类器中,这个特征的权重为w,这将根据约束w×x + b> 0做出某种决策,或者等于w×x <b。
现在的问题是,重量W不能编码三路select。 w×x的三个可能值是0,w和2×w。 这三者全部导致相同的决定(它们都是<b或≥b)或“英国”和“法国”导致相同的决定,或者“法国”和“美国”给出相同的决定。 模型不可能得知“英国”和“美国”应该被赋予相同的标签,“法国”应该被赋予相同的标签。
通过单热编码,你可以将特征空间有效地炸成三个特征,每个特征都会得到自己的权重,所以决策函数现在是[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。
所有学习algorithm都不是这样; 决策树和衍生模型,如随机森林,如果深度足够,可以处理分类variables,而不需要一个热门的编码。
关于通过做一个热编码的function的增加可以使用特征散列。 当你做散列的时候,你可以指定桶的数量远远less于新引入的function的数量。