1. One-hot 编码
1.1 定义与数学表示
One-hot 编码 是一种将离散的类别型数据(categorical data)转化为二进制向量的方法。假设有 N N N 个类别,每个类别被分配一个唯一的索引 i i i(从 0 到 N − 1 N-1 N−1)。该类别的 one-hot 表示是一个长度为 N N N 的向量,其中:
- 第 i i i 个位置为 1。
- 其他位置为 0。
数学表示:
对于类别 c i c_i ci(索引为 i i i),其 one-hot 向量为:
v i = [ 0 , 0 , … , 1 , … , 0 ] \mathbf{v}_i = [0, 0, \dots, 1, \dots, 0] vi=[0,0,…,1,…,0]
其中 v i [ j ] = 1 v_i[j] = 1 vi[j]=1 当 j = i j = i j=i,否则 v i [ j ] = 0 v_i[j] = 0 vi[j]=0。
例子:
假设有 5 种动物(猫、狗、鸟、鱼、蛇),它们的 one-hot 编码为:
- 猫: [1, 0, 0, 0, 0]
- 狗: [0, 1, 0, 0, 0]
- 鸟: [0, 0, 1, 0, 0]
- 鱼: [0, 0, 0, 1, 0]
- 蛇: [0, 0, 0, 0, 1]
1.2 特点与性质
- 稀疏性:向量中只有 1 个元素为 1,其余为 0,导致存储效率低。
- 正交性:任意两个 one-hot 向量的点积为 0,余弦相似度为 0:
v i ⋅ v j = 0 , if i ≠ j \mathbf{v}_i \cdot \mathbf{v}_j = 0, \quad \text{if } i \neq j vi⋅vj=0,if i=j
这意味着类别之间被假设为完全无关,没有语义相似性。 - 高维性:向量维度等于类别总数 N N N。当 N N N 很大(例如 NLP 中词汇表有 10 万个单词),向量维度极高。
- 无序性:One-hot 编码不假设类别之间有任何顺序关系,适合无序的分类变量。
1.3 实现代码
以下是用 Python