独热编码是机器学习中一种将分类变量表示为二进制向量的方法。在这种表示中,每个不同的类别被分配一个长度等于类别数量的唯一向量,其中所有元素均为0,仅在对应类别的位置上为1。例如,如果一个特征有三个类别,,红色、绿色、蓝色,,它们可能分别被编码为[1,0,0]、[0,1,0]和[0,0,1]。这种转换使得操作数值数据的算法(如机器学习和深度学习中使用的算法)能够处理分类输入,而不会在类别之间暗示任何序数关系。
该技术广泛应用于各种应用的数据预处理流程中,包括自然语言处理、计算机视觉和表格数据分析。它在传统机器学习模型(如线性回归、逻辑回归和支持向量机)中尤为常见,这些模型需要数值输入特征。相比之下,基于树的模型(如决策树和随机森林)通常可以直接处理分类变量,但为了与其他模型类型保持一致性和兼容性,独热编码仍然经常被应用。
历史发展
用二进制指示变量表示分类数据的概念源于统计学和实验设计,可追溯至20世纪中叶。统计学家在回归分析中使用虚拟变量来编码分类预测因子,这一实践早于“独热编码”这一术语。具体名称“独热”在20世纪90年代和2000年代在数字电路设计领域获得 prominence,指的是有限状态机中的一种状态编码方案,其中任何时候恰好有一位为高(1)。这一术语后来被机器学习社区采用,尤其是在神经网络研究在2010年代扩展时。
在人工智能的背景下,独热编码成为将分类数据输入神经网络的标准预处理步骤。早期应用包括为语言模型编码单词,其中词汇表中的每个单词被表示为一个独热向量。这种方法被用于word2vec等基础模型,该模型由谷歌研究人员于2013年开发,从独热输入向量中学习密集嵌入。该技术在现代大型语言模型架构中仍然相关,尽管这些模型通常使用学习到的嵌入而非原始独热向量以提高效率。
在机器学习中的应用
独热编码应用于多个领域。在自然语言处理中,它作为表示单词或字符的基线方法,之后嵌入层会学习更紧凑的表示。在计算机视觉中,它用于编码分类任务的类别标签,例如在图像识别数据集中,每张图像属于多个类别之一。例如,在ImageNet数据集中,类别标签通常被独热编码以训练卷积神经网络。
在表格数据分析中,独热编码是处理国家、产品类型或客户细分等分类特征的标准方法。pandas和scikit-learn等数据科学库提供了内置函数来实现这种转换,使其对从业者易于使用。该技术也用于推荐系统,其中用户和物品的分类ID在传递给协同过滤模型之前被编码。
优点与局限性
独热编码的主要优点是简单且不假设排序。与标签编码(为类别分配整数值,如0、1、2,可能暗示虚假的序数关系)不同,独热编码将所有类别视为等距。这一特性对于依赖距离度量的模型(如k近邻或带核函数的支持向量机)至关重要。
然而,独热编码也有明显的局限性。它可能导致高维和稀疏的特征空间,尤其是当分类变量具有许多唯一值时。例如,编码一个包含100,000个单词的词汇表会产生100,000维的向量,这在计算上昂贵且内存密集。这一问题通常通过降维技术或使用学习到的嵌入来解决,如Transformer模型所示。此外,独热编码不捕获类别之间的关系(如相似性或层次结构),这在某些应用中可能是一个缺点。
与嵌入的关系
在现代深度学习中,独热编码通常用作嵌入层之前的中间步骤。嵌入层本质上是一个线性变换,将独热向量映射为密集的低维向量。这种方法允许模型在训练过程中学习类别的有意义的表示。例如,在用于自然语言处理的神经网络架构中,输入标记首先被转换为独热向量,然后通过嵌入矩阵传递,该矩阵通过反向传播进行更新。
这种关系在Transformer模型中尤为明显,这些模型支撑着许多当代大型语言模型系统。虽然这些模型出于效率原因不直接使用独热向量,但这一概念仍然是基础性的。斯坦福人工智能实验室和麻省理工学院计算机科学与人工智能实验室等机构的研究人员研究了独热编码的理论性质及其在表示学习中的作用,为理解人工智能系统中如何处理分类信息做出了贡献。
实际考虑
在实现独热编码时,从业者必须处理测试数据中可能出现但训练时未出现的未见类别。常见策略包括添加“未知”类别或使用回退编码。另一个考虑是在独热编码与其他方案(如二进制编码或序数编码)之间进行选择,这些方案在维度与表达能力之间进行权衡。在高基数场景中,特征哈希或目标编码等技术可能更受青睐。
尽管更复杂的嵌入方法不断涌现,独热编码仍然是机器学习工具包中的基本工具。其简单性、可解释性以及与广泛算法的兼容性确保了它在学术研究和行业应用中的持续使用,从亚马逊网络服务的云机器学习管道到谷歌云的数据处理服务。