如何在 python 中执行 one-hot 编码


One-hot 编码用于将分类变量转换为机器学习算法可以轻松使用的格式。

one-hot 编码的基本思想是创建新变量,用值 0 和 1 来表示原始分类值。

例如,下图显示了我们如何进行单热编码,将包含团队名称的分类变量转换为仅包含 0 和 1 值的新变量:

以下分步示例展示了如何在 Python 中对这一精确数据集执行 one-hot 编码。

第 1 步:创建数据

首先,我们创建以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
                   ' points ': [25, 12, 15, 14, 19, 23, 25, 29]})

#view DataFrame
print (df)

  team points
0 to 25
1 to 12
2 B 15
3 B 14
4 B 19
5 B 23
6 C 25
7 C 29

第2步:执行one-hot编码

接下来,让我们从sklearn库导入OneHotEncoder()函数,并使用它对 pandas DataFrame 中的“team”变量执行热编码:

 from sklearn. preprocessing import OneHotEncoder

#creating instance of one-hot-encoder
encoder = OneHotEncoder(handle_unknown=' ignore ')

#perform one-hot encoding on 'team' column 
encoder_df = pd. DataFrame ( encoder.fit_transform (df[[' team ']]). toarray ())

#merge one-hot encoded columns back with original DataFrame
final_df = df. join (encoder_df)

#view final df
print (final_df)

  team points 0 1 2
0 to 25 1.0 0.0 0.0
1 to 12 1.0 0.0 0.0
2 B 15 0.0 1.0 0.0
3 B 14 0.0 1.0 0.0
4 B 19 0.0 1.0 0.0
5 B 23 0.0 1.0 0.0
6 C 25 0.0 0.0 1.0
7 C 29 0.0 0.0 1.0

请注意,由于原始“team”列包含三个唯一值,因此已将三个新列添加到 DataFrame 中。

注意:您可以在此处找到OneHotEncoder()函数的完整文档。

步骤 3:删除原始分类变量

最后,我们可以从 DataFrame 中删除原始的“team”变量,因为我们不再需要它:

 #drop 'team' column
final_df. drop (' team ', axis= 1 , inplace= True )

#view final df
print (final_df)

   points 0 1 2
0 25 1.0 0.0 0.0
1 12 1.0 0.0 0.0
2 15 0.0 1.0 0.0
3 14 0.0 1.0 0.0
4 19 0.0 1.0 0.0
5 23 0.0 1.0 0.0
6 25 0.0 0.0 1.0
7 29 0.0 0.0 1.0

相关:如何删除 Pandas 中的列(4 种方法)

我们还可以重命名最终 DataFrame 的列,以使它们更易于阅读:

 #rename columns
final_df. columns = ['points', 'teamA', 'teamB', 'teamC']

#view final df
print (final_df)

   points teamA teamB teamC
0 25 1.0 0.0 0.0
1 12 1.0 0.0 0.0
2 15 0.0 1.0 0.0
3 14 0.0 1.0 0.0
4 19 0.0 1.0 0.0
5 23 0.0 1.0 0.0
6 25 0.0 0.0 1.0
7 29 0.0 0.0 1.0

One-hot 编码已完成,我们现在可以将此 pandas DataFrame 插入到我们想要的任何机器学习算法中。

其他资源

如何在 Python 中计算截尾平均值
如何在 Python 中执行线性回归
如何在 Python 中执行逻辑回归

添加评论

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