标签编码或 one-hot 编码:有什么区别?


在机器学习中,我们通常希望将分类变量转换为某种类型的数字格式,以便算法可以轻松使用。

将分类变量转换为数值变量有两种常见方法:

1. 标签编码:根据字母顺序为每个分类值分配一个整数值。

2. One Hot Encoding:创建新变量,采用值 0 和 1 来表示原始分类值。

例如,假设我们有以下包含两个变量的数据集,并且我们希望将Team变量从分类变量转换为数值变量:

以下示例展示了如何使用标签编码one-hot 编码来执行此操作。

示例:使用标签编码

使用标签编码,我们将根据字母顺序将Team列中的每个唯一值转换为整数值:

在这个例子中我们可以看到:

  • 每个“A”值已转换为0
  • 每个“B”值已转换为1
  • 每个“C”值都转换为2

我们已成功将“团队”列从分类变量转换为数值变量。

示例:使用单个 one-hot 编码

使用one-hot 编码,我们将Team列转换为仅包含 0 和 1 值的新变量:

当我们使用这种方法时,我们为原始分类变量中的每个唯一值创建一个新列。

例如,分类变量Team具有三个唯一值,因此我们在数据集中创建了三个新列,它们都包含值 0 或 1。

以下是如何解释新列中的值:

  • 如果Team列的原始值为 A,则新Team_A列的值为 1。否则,该值为 0。
  • 如果Team列的原始值为 B,则新Team_B列的值为 1。否则,该值为 0。
  • 如果Team列的原始值为 C,则新Team_C列的值为 1。否则,该值为 0。

我们已成功将“团队”列从一个分类变量转换为三个数值变量(有时称为“虚拟”变量)。

注意:在回归模型或其他机器学习算法中使用这些“虚拟”变量时,请小心避免虚拟变量陷阱

何时使用标签编码与 one-hot 编码

在大多数情况下, one-hot 编码是将分类变量转换为数值变量的首选方式,因为标签编码使得值之间看起来存在排名。

例如,考虑我们使用标签编码将 team 转换为数字变量的情况:

标签编码的数据使得 C 队看起来比 B 队和 A 队更大或更高,因为它具有更高的数值。

如果原始分类变量实际上是具有自然排序或排名的序数变量,那么这不是问题,但在许多情况下情况并非如此。

然而, one-hot 编码的缺点之一是,它要求您创建与原始分类变量中唯一值一样多的新变量。

这意味着,如果您的分类变量有 100 个唯一值,则在使用 one-hot 编码时将需要创建 100 个新变量。

根据数据集的大小和正在使用的变量的类型,您可能更喜欢 one-hot 编码或标签编码。

其他资源

以下教程解释了如何在实践中执行标签编码

以下教程解释了如何在实践中执行one-hot 编码

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注