作为数据科学家,您今天需要了解的 5 种分类编码技巧

2025年1月7日 | 阅读 12 分钟

引言

在本教程中,我们将学习五种分类编码技术。处理分类变量非常重要。它对于在数据科学中构建准确的模型至关重要。分类编码涉及将这些分类变量转换为机器学习算法可以理解的数值格式。选择正确的方法会影响模型的性能。因为有许多技术可用,所以您需要选择正确的。在本教程中,我们将探讨每位数据科学家都应该知道的五种基本分类编码技巧。这些技术将帮助您有效地处理各种类型的分类数据。它还可以提高模型的准确性。还可以优化您的数据预处理工作流程。这些技术对于在项目中有效地处理各种类型的分类数据至关重要。

什么是分类数据?

此数据也称为标称数据或有序数据。结果分为几组或几类。数值数据定量测量对象,而分类数据表示定性或描述性特征。在处理机器学习模型时,理解分类数据至关重要,因为这些模型通常需要数值输入。分类变量通常表示为字符串或标签。其值的数量有限。下面给出了分类数据的示例:

  1. 一个人的居住城市。例如,例如加尔各答、孟买、德里等。
  2. 一个人工作的部门。例如,包括 IT、金融、人力资源、生产等。
  3. 一个人的最高学历,如高中、文凭等。
  4. 学生收到的成绩。例如,A+、A、E、O+、O 等。

有哪些分类数据可用?

分类数据有两种类型,如下所示:

1. 有序数据

有序数据包含类别。它有一个序列或顺序。在有序数据编码时,保留类别顺序至关重要。

例如,班级水平表明了一个人在确定其最高可获得的学位时的资格。这可能是评估他们是否适合某个职位的关键因素。

2. 标称数据

标称数据包含类别。没有特定的顺序或序列。在编码标称数据时,至关重要的是要考虑某个特征是存在还是不存在。然而,类别的顺序无关紧要。例如,在考虑一个人居住的城市时,了解该城市的信息很重要。然而,城市中没有顺序。例如,在顺序方面,居住在加尔各答与居住在德里被视为相同。理解分类数据的性质有助于数据科学家和技术人员选择合适的编码技术。category_encoders Python 包提供了各种编码分类数据的方法。您可以使用以下代码安装它:

编码技术类型

1. 识别分类特征

首先,检查您的数据以识别包含非数值值的特征,例如文本标签或类别(如颜色、尺寸和客户类型)。这项工作需要编码。

2. 选择编码技术

有许多编码方法。每种方法都有其优点和缺点。在这里,我们将学习一些流行的选项:

  1. 独热编码:这对于具有多个类别的属性非常理想。它创建新的二进制特征,其中 1 表示类别的存在,0 表示其不存在。
  2. 标签编码:此方法用于为每个类别分配一个数值。但是,它假定类别之间存在有序关系。这可能并不总是合适的。
  3. 有序编码:它类似于标签编码。但是,它应该仅在组顺序为低、中、高或类似顺序时使用。

3. 应用编码技术

选择编码方法后,您可以将其应用于数据。许多机器学习库都提供了执行此目的的功能。例如,您可以使用独热编码创建一个新的二进制特征,并且您将拥有一个代表每个类别的原始特征。

4. 测试和改进技术

这是可选的。有时,尝试不同的编码技术是有益的。这些实验有助于您了解此过程如何影响机器学习模型的性能。这可以帮助您确定最适合您特定数据集的方法。

有序编码或标签编码

当分类特征有序时,我们使用分类数据编码技术。这意味着组顺序很重要并且必须保留。在标签编码中,每个字符都被转换为表示序列的整数值。例如,我们有关于人们学业成就的数据。这些级别具有我们想要保留的自然顺序。代码如下:

输出

现在,我们运行上面的代码并找到结果。结果如下:

 
     Education  Education_Encoded
0  High School                0.0
1    Bachelor's                1.0
2      Master's                2.0
3          PhD                3.0
4  High School                0.0
5      Master's                2.0   

在此示例中,有序编码按指定顺序为教育级别分配数值,保留了它们的自然序列。

独热编码

我们使用分类数据编码系统,而编码特征是标称的。每个组对应一个包含 0 或 1 的二进制变量。这些新的二进制特征称为哑变量。哑变量的数量对应于分类变量的级别数。这个过程可能看起来很复杂。

例如,假设我们有一个数据集,其属性代表不同的颜色,如“红色”、“绿色”和“蓝色”。代码如下:

输出

现在,我们运行上面的代码并找到结果。结果如下:

 
   Color_Blue  Color_Green  Color_Red
0           0            0          1
1           0            1          0
2           1            0          0
3           0            1          0
4           0            0          1   

在此示例中,独热编码创建了三个新的二进制列。这些列是“Color_Blue”、“Color_Green”和“Color_Red”。每列表示原始特征中相应颜色的存在 (1) 或不存在 (0)。

哑编码

哑编码与独热编码相似,因为这两种方法都将分类数据转换为二进制或哑变量。然而,独热编码使用 N 个二进制变量来表示 N 个类别,而哑编码使用 N-1 个二进制变量。这个细微的差别使得哑编码比独热编码更有效。

这是哑编码的一个简短示例。假设您有一个代表三种颜色的分类变量:红色、绿色和蓝色。

颜色
红色
绿色
蓝色

使用哑编码,您将创建两个二进制变量(N-1 = 3-1 = 2)。

颜色哑变量1 (绿色)哑变量2 (蓝色)
红色00
绿色10
蓝色01

在这里,“红色”是参考类别,在哑变量1 和哑变量2 中均由 0 表示。“绿色”在第一个哑变量中由 1 表示,在第二个中由 0 表示。“蓝色”在第一个哑变量中由 0 表示,在第二个中由 1 表示。

所以,我们在这里用代码展示这个例子。代码如下:

输出

现在我们运行上面的代码。然后我们找到结果。在此示例中,“红色”是参考类别,在哑变量“Color_Green”和“Color_Blue”中均由 0 表示。“绿色”在“Color_Green”中由 1 表示,在“Color_Blue”中由 0 表示,“蓝色”在“Color_Green”中由 0 表示,在“Color_Blue”中由 1 表示。结果如下:

 
   Color_Green  Color_Blue
0            0           0
1            1           0
2            0           1   

独热编码和哑编码的缺点

独热编码和哑编码是分类数据编码的两种强大有效的方法。它们在数据科学家中也很受欢迎,但可能效果不佳,因为:

  1. 当数据中的级别数很大时,独热编码和哑编码的效果都会降低。如果一个特征变量有多个类别,那么需要相应数量的哑变量来编码数据。例如,具有 30 个不同值的列需要 30 个新变量进行编码。
  2. 当数据集中包含多个分类特征时,也会出现类似的问题。每个分类特征及其众多类别都会导致创建许多二进制特征。例如,具有 10 个或更多分类列的数据集将导致大量的二进制特征,每个特征代表这些列中的不同类别。

在这两种情况下,这些编码方法都会导致数据集的差异。这导致许多列充满零,只有少数列为一。这意味着它们会创建大量的哑变量,而不会添加重要的信息。此外,它们可能导致哑变量陷阱。这是一种特征高度相关,并且一个变量的值可以通过其他变量预测的情况。增加的数据集大小会减慢模型的学习过程并降低整体性能。它还使模型在计算上昂贵。此外,这些编码对于基于树的模型不是最优的。

效应编码

该编码过程也称为偏差编码或总和编码。效应编码类似于哑编码,但有一些区别。哑编码使用 0 和 1 来表示数据,而效应编码使用 1、0 和 -1。具体来说,哑编码中只有 0 的行在效应编码中表示为 -1。这里我们举一个效应编码的例子,如下所示:

输出

现在我们运行上面的代码。然后我们找到结果。在此输出中,E1 和 E2 代表 Color 变量的效应编码。每个级别的编码都反映了它与整体均值的偏差,其中绿色是参考级别,由其他级别的负和隐式编码。结果如下:

 
   Color  E1  E2
0    Red   1   0
1   Blue   0   1
2  Green  -1  -1
3    Red   1   0
4  Green  -1  -1
5   Blue   0   1   

哈希编码器

要理解哈希编码,首先需要掌握哈希的概念。它是将任意大小的输入转换为固定大小值的过程。这是使用哈希算法完成的,该算法根据输入生成哈希值。哈希是单向过程。这意味着无法从其哈希值反向工程出原始输入。哈希有各种应用。哈希的例子包括数据检索、数据完整性验证和加密。有很多哈希函数。消息摘要是一种哈希函数。消息摘要的一些例子是 MD2、MD5。还有安全哈希算法。

哈希编码器类似于独热编码。它在新维度中表示分类特征。n_component 参数允许您设置变量大小。例如,一个具有 5 个类别的特征可以由 N 个新特征表示,而具有 100 个组的特征可以通过 N 个新特征进行修改。默认情况下,哈希编码器使用 MD5 哈希算法。但是用户可以指定不同的算法(如果他们愿意)。哈希编码器的示例如下:

在此示例中,HashingVectorizer 将分类数据转换为固定数量的哈希特征(本例中为 5)。alternate_sign 参数设置为 False 以确保非负值。输出是一个二维数组,表示每个类别的混合特征。

二进制编码

二进制编码结合了哈希编码和单比特编码的元素。在此方法中,分类特征首先使用有序编码器转换为数值形式。然后将这些数值转换为其二进制等效项。然后将二进制值拆分到不同的列中。当处理具有大量类别的特征时,二进制编码在机器学习中特别有效。二进制编码的示例如下:

输出

现在,我们运行上面的代码并找到结果。在这里,BinaryEncoder 已将分类值“A”、“B”和“C”转换为二进制编码格式。类别首先按顺序编码为 1、2 和 3,然后将每个数字表示为二进制形式并拆分到不同的列中。结果如下:

 
   Category_0  Category_1
0           0           1
1           0           2
2           0           3
3           0           1
4           0           2
5           0           3   

目标编码

目标编码是数据预处理中用于将分类变量转换为数值的方法。独热编码为每个类别生成二进制字符串,而目标编码根据其与目标变量的关系为每个类别分配一个数值。这种方法通常用于对活动进行分类,使用不同目标与每个类别的共性(或其他度量)而不是分类值。

目标编码捕获了分类数据的重要信息,同时减小了剩余特征空间,使其适用于决策树和梯度提升等模型。它是一种贝叶斯编码技术。贝叶斯编码器使用有关目标变量的信息来编码分类数据。在目标编码中,计算每个类别的目标变量的平均值,并用平均值替换类别变量。对于分类目标变量,每个类别都替换为目标值的后验概率。目标编码的示例如下:

输出

现在,我们运行上面的代码并找到结果。在此示例中,TargetEncoder 根据“Target”变量的平均值将分类数据“Category”转换为数值。每个类别都被替换为与该类别对应的值的平均值。结果如下:

 
  Category  Target  Encoded_Category
0        A       1               1.0
1        B       2               2.0
2        C       3               3.0
3        A       1               1.0
4        B       2               2.0
5        C       3               3.0
6        A       1               1.0   

结论

在本教程中,我们将学习五种分类编码技术。这些是每位数据科学家都应该知道的基本技术。编码分类数据是特征工程的重要方面。选择合适的编码方案至关重要,具体取决于数据集和所使用的模型。本教程探讨了各种编码技术,并重点介绍了它们的挑战和适用的用例。此外,我们还回顾了机器学习中的不同编码类型。