5.0 KiB
Python 中的一种热门编码——一种实用方法
原文:https://www.askpython.com/python/examples/one-hot-encoding
读者朋友们,你们好!在本文中,我们将关注 Python 中 One hot encoding 的实际实现。
所以,让我们开始吧!
一、什么是 one 热编码?
在深入研究一键编码的概念之前,让我们了解一些先决条件。
变量分为两个主要部分
- 连续变量:这些是描述数值变量的变量。示例:[1,2,3,4,5,6…..100]
- 分类变量:这些变量描述了数据值中的类别或组。例子:[苹果,芒果,浆果]
在数据集中,我们会遇到包含分组形式的分类数据的数据,例如[苹果、浆果、芒果]。为了将每一类数据表示为一个独立的实体,我们使用了编码技术。
最常用的编码技术包括
- 虚拟变量
- 标签编码
- 一个热编码等。
今天,让我们来讨论一个热门的编码。
一个热编码以二进制向量的形式表示分类数据。
现在,您可能会想到一个问题,当它以二进制向量格式表示类别时,它何时将数据转换为 0 和 1,即整数?
在一种热编码方案中,在将其应用于数据之前,我们需要将分类数据值映射到整数数据值。这是借助标签编码完成的。
不要担心,我们将在后面的章节中讨论标签编码的实际实现。
因此,通过一次热编码,每个类别的数据值将被分配一个整数值,并被映射到二进制向量。
因此,映射到整数值的每个数据值将被表示为二进制向量,其中,除了被标记为 1 的整数(类别)的索引值之外,向量中的所有值都为零。
一个热编码实现示例
将包含分类数据的数据集视为[苹果和浆果]。应用标签编码后,假设它会将 apple 指定为“0”,将 berry 指定为“1”。
此外,在应用独热编码时,它将创建长度为 2 的二进制向量。这里,编码为“0”的标签“苹果”将具有二进制向量[1,0]。
这是因为值 1 将被放置在编码的索引处,对于 apple 来说,该索引为零(如其标签编码所示)。
因此,[苹果,浆果,浆果]将被编码为:
[1,0] 【0,1】 【0,1】
现在让我们通过例子来实现这个概念。
示例 1:分组分类数据的热编码
看看下面的例子!我们已经用一个热编码对水果进行了编码。
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
cat_data = ["apple", "mango", "apple", "berry", "mango", "apple", "berry", "apple"]
label = LabelEncoder()
int_data = label.fit_transform(cat_data)
int_data = int_data.reshape(len(int_data), 1)
onehot_data = OneHotEncoder(sparse=False)
onehot_data = onehot_data.fit_transform(int_data)
print("Categorical data encoded into integer values....\n")
print(onehot_data)
输出:
Categorical data encoded into integer values....
[[1\. 0\. 0.]
[0\. 0\. 1.]
[1\. 0\. 0.]
[0\. 1\. 0.]
[0\. 0\. 1.]
[1\. 0\. 0.]
[0\. 1\. 0.]
[1\. 0\. 0.]]
说明:
- 加载完数据后,我们创建了一个对象
LabelEncoder(),将分类数据编码成整数值。 - 此外,我们将把相同的整数数据传递给
OneHotEncoder()以将整数值编码成类别的二进制向量。 fit_transform()函数应用要对数据或一组值执行的特定函数。
示例 2:数据集上的一个热编码
在本例中,我们将一个数据集拉入 Python 环境。你可以找到下面的数据集供你参考。
Onehot Encode Dataset
此外,我们使用了ColumnTransformer()函数来创建一个对象,该对象将类别 0 表示为 N 个类别中的第一列。
最后,我们将它应用于要编码成二进制数组形式的整个分类数据。
import pandas
import numpy
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
cat_data = pandas.read_csv("bank-loan.csv")
#print(cat_data)
column_set = ColumnTransformer([('encoder', OneHotEncoder(),[0])], remainder='passthrough')
onehot_data = numpy.array(column_set.fit_transform(cat_data), dtype = numpy.str)
print(onehot_data)
输出:
所以,你看,数据现在包含两列:第一列描述第 0 类,第二列描述第 1 类。
[['0.0' '1.0']
['1.0' '0.0']
['1.0' '0.0']
...
['1.0' '0.0']
['1.0' '0.0']
['1.0' '0.0']]
结论
到此,我们就结束了这个话题。如果你遇到任何问题,欢迎在下面评论。在那之前,请继续关注并快乐学习!!🙂
