我注意到,当对特定数据集(矩阵)使用独热编码并将其用作学习算法的训练数据时,与直接使用原始矩阵作为训练数据相比,预测准确性有了显著提高。为什么会出现这种性能提升?
回答:
许多学习算法要么为每个特征学习一个权重,要么使用样本之间的距离。前者适用于线性模型,如逻辑回归,这种模型易于解释。
假设你有一个数据集,仅包含一个分类特征“国籍”,其值为“英国”、“法国”和“美国”。假设这些值分别编码为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。
这并不适用于所有学习算法;决策树及其衍生模型如随机森林,如果足够深,可以在没有独热编码的情况下处理分类变量。