Press "Enter" to skip to content

Pandas:如何进行独热编码数据

Pandas:如何进行独热编码数据 四海 第1张

 

什么是独热编码

 

独热编码是一种数据预处理步骤,用于将分类值转换为兼容的数值表示。

分类列 bool列 列1 列2 标签
值A 9 4 0
值B 7 2 0
值D 9 5 0
值D 8 3 1
值D 9 0 1
值D 5 4 1
值B 8 1 1
值D 6 6 1
值C 0 5 0

 

例如对于这个虚拟数据集,分类列有多个字符串值。许多机器学习算法要求输入数据以数值形式存在。因此,我们需要一种方法将此数据属性转换为与这些算法兼容的形式。因此,我们将分类列分解为多个二进制值列。

 

如何使用Pandas库进行独热编码

 

首先,将.csv文件或任何其他相关文件读入Pandas数据框。

df = pd.read_csv("data.csv")

 

为了检查唯一值并更好地了解我们的数据,我们可以使用以下Pandas函数。

df['分类列'].nunique()
df['分类列'].unique()

 

对于这个虚拟数据,函数返回以下输出:

>>> 4
>>> 数组(['值_A', '值_C', '值_D', '值_B'], dtype=对象)

 

对于分类列,我们可以将其拆分为多个列。为此,我们使用pandas.get_dummies()方法。它接受以下参数:

参数
data:类似数组、Series或DataFrame 原始的pandas数据帧对象
columns:类似列表,默认值为None 要进行热编码的分类列的列表
drop_first:布尔值,默认为False 删除分类标签的第一个级别

 

为了更好地理解该函数,让我们对虚拟数据集进行一次独热编码。

 

热编码分类列

 

我们使用get_dummies方法,并将原始数据帧作为data输入。在columns中,我们传递一个只包含分类列标题的列表。

df_encoded = pd.get_dummies(df, columns=['分类列', ])

 

以下命令删除分类列并为每个唯一值创建一个新列。因此,单个分类列被转换为4个新列,其中只有其中一个列的值为1,其他3个列的值为0。这就是为什么它被称为独热编码。

分类列_值_A 分类列_值_B 分类列_值_C 分类列_值_D
1 0 0 0
0 1 0 0
0 0 0 1
0 0 0 1
0 0 0 1
0 0 0 1
0 1 0 0
0 0 0 1
0 0 1 0
0 0 0 1

当我们想要对布尔列进行独热编码时,问题就出现了。这样会创建两个新的列。

独热编码二进制列

df_encoded = pd.get_dummies(df, columns=[bool_col, ])

bool_col_False bool_col_True
0 1
1 0
0 1
1 0

当我们可以只有一列,其中True被编码为1,False被编码为0时,我们没有必要增加一列。为了解决这个问题,我们使用drop_first参数。

df_encoded = pd.get_dummies(df, columns=['bool_col'], drop_first=True)

bool_col_True
1
0
1
0

结论

虚拟数据集被独热编码,最终结果如下所示

col_1 col_2 bool A B C D label
9 4 1 1 0 0 0 0
7 2 0 0 1 0 0 0
9 5 1 0 0 0 1 0
8 3 0 0 0 0 1 1
9 0 0 0 0 0 1 1
5 4 0 0 0 0 1 1
8 1 1 0 1 0 0 1
6 6 1 0 0 0 1 1
0 5 1 0 0 1 0 0
1 8 1 0 0 0 1 0

 

分类值和布尔值已经被转换为可以用作机器学习算法输入的数值。Muhammad Arham是一名从事计算机视觉和自然语言处理的深度学习工程师。他曾参与部署和优化多个生成式人工智能应用,这些应用在Vyro.AI的全球排行榜上名列前茅。他对构建和优化智能系统的机器学习模型感兴趣,并坚信不断改进。

Leave a Reply

Your email address will not be published. Required fields are marked *