序
独热编码(One-Hot Encoding),又称一位有效编码,是一种将分类变量转换为数值形式的常用方法。其核心思想是,将一个具有 N 个不同类别的分类特征转换为 N 个二元(0 或 1)特征,其中每个新特征对应原始特征中的一个类别。对于每一个样本,只有代表其原始类别的那个新特征值为 1,其余所有新特征值均为0。
原来的问题
对于一个人,ta 会具有多种属性,比如性别、职业、国籍等等。现在假设有一组人的样本,他们的属性在如下范围内:
-
性别:男、女
-
职业:医生、律师、程序员、学生
-
国籍:中国、美国、法国
如果将上述属性用数字进行表示,会更有利于计算机处理,例如:
1 | ["男", "医生", "中国] -> [0, 0, 0] |
但是,这是不适合机器学习的。
在机器学习中,许多算法,特别是线性模型(如线性回归、逻辑回归)和距离度量相关的算法(如K近邻),都是基于数值计算的。如果直接将“医生”、“律师”、“程序员”用数字0、1、2来表示(这种方法称为标签编码 Label Encoding),模型可能会错误地学习到这些类别之间存在有序关系。比如“程序员”是“律师”的 2 倍,这是荒谬的。
因此,我们需要新的方法。
One-Hot 编码
对于性别这一属性,二者天然是互斥的,所以我们可以用一个二维向量来表示:
1 | [1, 0] 男 |
对于职业,则可以用四维向量来表示:
1 | [1, 0, 0, 0] 医生 |
独热编码通过将每个类别独立表示为一个特征,完美地解决了这个问题。每个类别都处于一个正交的向量空间中,它们(例如 [1, 0, 0]、[0, 1, 0] 和 [0, 0, 1])之间的距离是相等的,从而消除了标签编码可能引入的虚假顺序关系,让模型能够更准确地学习特征与目标之间的关系。
正如其名“One-Hot”,在每一行数据中,只有一个新特征是“热”的(值为 1)。