one-hot 编码、multi-hot 编码 和 Embedding

1. One-hot 编码

1.1 定义与数学表示

One-hot 编码 是一种将离散的类别型数据(categorical data)转化为二进制向量的方法。假设有 NNN 个类别,每个类别被分配一个唯一的索引 iii(从 0 到 N−1N-1N1)。该类别的 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]=1j=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 jvivj=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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值