什么是独热编码(详解)

在机器学习中需要对样本的标签值进行表示,而独热编码(one-hot encoding)就是一种样本标签值的表示方式,当样本标签为离散值时,可采用独热编码方式来表示。本文将详细解读什么是独热编码。

举例来说,某个数据集中有 N 个样本,分别为  x1、x2 … xn,每一个样本都有个 n 特征值,对于数据集中的第 i 个样本,其 n 个特征值分别为 xi1 、 xi2…,xin。所有样本的标签分为 3 类,分别为从 c1 、c2、c3,可以把这 3 类标签分别表示为 0、1、2,这样每一个样本的标签都为 0、1、2 中的一个值。当样本中的标签为离散值时,可以使用另一种方式来表示,这种方式称为“独热编码”。

表示形式

离散值的标签使用“独热编码”进行表示后,每个标签都变为一个数组,每个标签数组的长度与数据集中的样本标签值的种类数一致。因为数据集中的样本一共有 3 种,所以经过独热编码后的每个标签数组的长度为 3。标签的独热编码形式的构造原理如下:

  • 若样本的标签为第 1 类(0),就把数组中第 1 个位置元素设为 1,其他位置的元素设为 0,记为[1, 0, 0];
  • 若样本的标签为第 2 类(1),就把数组中第 2 个位置元素设为 1,其他位置的元素设为 0,记为 [0, 1, 0];
  • 同理,若为第 3 类标签的独热编码表示形式为 [0, 0, 1]。

这样就把 0、1、2 这 3 种标签分别用 [1, 0, 0]、[0, 1, 0]、[0, 0, 1] 这 3 个数组来表示。

代码实现

假设数据集中有 10 个样本,全部样本的标签为 3 类,分别记为 0、1、2。我们使用下面这段代码来对这 10 个样本进行独热编码,使用 n_classes 变量来表示数据集中样本标签的种类个数。

因为 NumPy 库中的 eye 函数可以用来生成指定维度的对角矩阵,所以可以利用其生成对角矩阵,取出对角矩阵中的离散标签值作为下标值对应的那一行数组,该数组即为对应离散标签值的独热编码的表示形式。具体代码如下:

# 导入所需库
import numpy as np
# n_classes表示数据集中样本标签的种类,一共有3类
n_classes = 3
# y表示数据集全部样本的标签
y = np.array([0, 1, 0, 2, 1, 2, 2, 1, 0, 1])
# 定义独热编码函数
# 应用NumPy库中的eye函数生成对角矩阵来完成独热编码操作
def one_hot_encoding(labels, n_classes):
    result = np.eye(n_classes)[labels]
    print(result)
    return result
# 使用独热编码函数将样本标签转换为独热编码的形式
one_hot_encoding(y, n_classes)

通过调用这个独热编码函数,成功将数据集中全部样本的标签转换为独热编码的形式,输出结果如下所示:

[[1. 0. 0.]
[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]
[0. 0. 1.]
[0. 0. 1.]
[0. 1. 0.]
[1. 0. 0.]
[0. 1. 0.]]
© 版权声明
THE END
喜欢就支持一下吧
点赞4赞赏
分享
评论 共3条
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情
    • HarryPotter的头像|艾奇编程网
      Mark
      0