1. One-hot 编码
1.1 定义与数学表示
One-hot 编码 是一种将离散的类别型数据(categorical data)转化为二进制向量的方法。假设有 NNN 个类别,每个类别被分配一个唯一的索引 iii(从 0 到 N−1N-1N−1)。该类别的 one-hot 表示是一个长度为 NNN 的向量,其中:
- 第 iii 个位置为 1。
- 其他位置为 0。
数学表示:
对于类别 cic_ici(索引为 iii),其 one-hot 向量为:
vi=[0,0,…,1,…,0]\mathbf{v}_i = [0, 0, \dots, 1, \dots, 0]vi=[0,0,…,1,…,0]
其中 vi[j]=1v_i[j] = 1vi[j]=1 当 j=ij = ij=i,否则 vi[j]=0v_i[j] = 0vi[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:
vi⋅vj=0,if i≠j\mathbf{v}_i \cdot \mathbf{v}_j = 0, \quad \text{if } i \neq jvi⋅vj=0,if i=j
这意味着类别之间被假设为完全无关,没有语义相似性。 - 高维性:向量维度等于类别总数 NNN。当 NNN 很大(例如 NLP 中词汇表有 10 万个单词),向量维度极高。
- 无序性:One-hot 编码不假设类别之间有任何顺序关系,适合无序的分类变量。
1.3 实现代码
以下是用 Python(NumPy 和 PyTorch)实现 one-hot 编码的示例:
NumPy 实现
import numpy as np
def one_hot_encode(index, num_classes):
one_hot = np.zeros(num_classes)
one_hot[index

最低0.47元/天 解锁文章
5857

被折叠的 条评论
为什么被折叠?



