如何在 Python 中将分类特征转换为数字特征?

2023-08-11 15:20:27 浏览数 (1)

在机器学习中,数据有不同的类型,包括数字、分类和文本数据。分类要素是采用一组有限值(如颜色、性别或国家/地区)的特征。但是,大多数机器学习算法都需要数字特征作为输入,这意味着我们需要在训练模型之前将分类特征转换为数字特征。

在本文中,我们将探讨在 Python 中将分类特征转换为数字特征的各种技术。我们将讨论独热编码、标签编码、二进制编码、计数编码和目标编码,并提供如何使用category_encoders库实现这些技术的示例。在本文结束时,您将很好地了解如何在机器学习项目中处理分类特征。

标签编码

标签编码是一种用于通过为每个类别分配一个唯一的整数值来将分类数据转换为数值数据的技术。例如,可以分别为类别为“红色”、“绿色”和“蓝色”的分类特征(如“颜色”)分配值 0、1 和 2。

标签编码易于实现且内存高效,只需一列即可存储编码值。但是,它可能无法准确表示类别的固有顺序或排名,并且某些机器学习算法可能会将编码值解释为连续变量,从而导致不正确的结果。

要在 Python 中实现标签编码,我们可以使用 scikit-learn 库中的 LabelEncoder 类。下面是一个示例:

代码语言:javascript复制
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data['color_encoded'] = le.fit_transform(data['color'])

在此代码中,我们首先创建 LabelEncoder 类的实例。然后,我们将编码器拟合到数据集的“颜色”列,并将该列转换为其编码值。

独热编码

独热编码是一种将类别转换为数字的方法。我们为每个类别创建一个新特征,如果一行具有该类别,则其特征为 1,而其他特征为 0。此技术适用于表示名义分类特征,并允许在类别之间轻松比较。但是,如果有很多类别,它可能需要大量内存并且速度很慢。

要在 Python 中实现独热编码,我们可以使用 pandas 库中的 get_dummies() 函数。下面是一个示例:

代码语言:javascript复制
To implement one-hot encoding in Python, we can use the get_dummies() function from the pandas library. Here is an example:

在此代码中,我们首先从 CSV 文件中读取数据集。然后,我们使用 get_dummies() 函数为 “color” 列中的每个类别创建新的二进制特征。

二进制编码

二进制编码是一种将分类特征转换为二进制表示的技术。例如,我们可以将值 0、1 和 2 分配给名为“颜色”的特征的类别,然后将它们转换为二进制表示:0 变为 00,1 变为 01,2 变为 10。该技术结合了标签编码和独热编码的优点。

二进制编码可以减少内存使用量并捕获有关类别的一些序号信息。但是,它可能无法准确表示名义上的分类特征,并且可能会因许多类别而变得复杂。

要在 Python 中实现二进制编码,我们可以使用 category_encoders 库。下面是一个示例:

代码语言:javascript复制
import category_encoders as ce encoder = ce.BinaryEncoder(cols=['color']) encoded_data = encoder.fit_transform(data)

在此代码中,我们首先导入category_encoders库。然后,我们创建 BinaryEncoder 类的实例,并将“颜色”列指定为要编码的列。我们将编码器拟合到数据集,并将列转换为其二进制编码值。

计数编码

计数编码是一种将每个类别替换为其在数据集中出现的次数的技术。例如,如果一个名为“颜色”的分类特征有三个类别,“红色”出现 10 次,“绿色”出现 5 次,“蓝色”出现 3 次,我们可以用 10 代替“红色”,用 5 替换“绿色”,用 3 替换“蓝色”。

计数编码对于高基数分类特征很有用,因为它减少了通过独热编码创建的列数。它还捕获类别的频率,但对于频率不一定指示类别的顺序或排名的有序分类特征,它可能并不理想。

要在 Python 中实现计数编码,我们可以使用 category_encoders 库。下面是一个示例:

代码语言:javascript复制
import category_encoders as ce encoder = ce.CountEncoder(cols=['color']) encoded_data = encoder.fit_transform(data)

在此代码中,我们首先导入category_encoders库。然后,我们创建 CountEncoder 类的实例,并将“color”列指定为要编码的列。我们将编码器拟合到数据集,并将列转换为其计数编码值。

目标编码

目标编码是一种将每个类别替换为该类别的平均目标值的方法。例如,如果我们有一个名为“color”的分类特征和一个二进制目标变量,我们可以将“red”替换为平均目标值 0.3,将“green”替换为 0.6,将“blue”替换为 0.4。目标编码适用于高基数分类特征,并且可以捕获类别与目标变量之间的关系。但是,如果类别很少或目标变量不平衡,则可能会过度拟合。

要在 Python 中实现目标编码,我们可以使用 category_encoders 库。下面是一个示例:

代码语言:javascript复制
import category_encoders as ce encoder = ce.TargetEncoder(cols=['color']) encoded_data = encoder.fit_transform(data, target)

在此代码中,我们首先导入category_encoders库。然后,我们创建 TargetEncoder 类的实例,并将“颜色”列指定为要编码的列。我们将编码器拟合到数据集,并使用目标变量作为目标将列转换为其目标编码值。

结论

综上所述,在本文中,我们介绍了在 Python 中将分类特征转换为数字特征的不同方法,例如独热编码、标签编码、二进制编码、计数编码和目标编码。方法的选择取决于分类特征的类型和使用的机器学习算法。将分类特征转换为数值特征有助于机器学习算法更准确地处理和分析分类数据,从而生成更好的模型。

0 人点赞