什么是独热编码
独热编码是一种数据预处理步骤,用于将分类值转换为兼容的数值表示。
| categorical_column | bool_col | col_1 | col_2 | label |
|---|---|---|---|---|
| value_A | True | 9 | 4 | 0 |
| value_B | False | 7 | 2 | 0 |
| value_D | True | 9 | 5 | 0 |
| value_D | False | 8 | 3 | 1 |
| value_D | False | 9 | 0 | 1 |
| value_D | False | 5 | 4 | 1 |
| value_B | True | 8 | 1 | 1 |
| value_D | True | 6 | 6 | 1 |
| value_C | True | 0 | 5 | 0 |
例如,在这个虚拟数据集中,分类列具有多个字符串值。许多机器学习算法要求输入数据为数值形式,因此需要某种方法将此数据属性转换为与此类算法兼容的形式,本文将分类列分解为多个二进制值列。
使用Pandas库进行独热编码
首先,将.csv文件或任何其他相关文件读入Pandas数据帧。
df = pd.read_csv("data.csv")
为了检查唯一值并更好地理解数据,可以使用以下Panda函数。
df['categorical_column'].nunique()
df['categorical_column'].unique()
对于这些虚拟数据,函数会返回以下输出结果:
>>> 4
>>> array(['value_A', 'value_C', 'value_D', 'value_B'], dtype=object)
对于分类列,可以将其分解为多个列,为此本文使用pandas.get_dummies()方法。它需要以下参数:
| 参数 | |
|---|---|
| data:类似数组、Series或DataFrame | Pandas的原始数据帧对象 |
| columns:类似列表,默认为None | 要进行独热编码的分类列列表 |
| drop_first:布尔值,默认为False | 移除分类标签的第一个级别 |
为了更好地理解这个函数,让我们来对这个虚拟数据集进行一次独热编码。
- 对分类列进行独热编码
我们使用get_dummies方法,并将原始数据帧作为数据输入,在columns中,我们传入一个只包含categorical_column标题的列表。
df_encoded = pd.get_dummies(df, columns=['categorical_column', ])
以下命令删除了categorical_column,并为每个唯一值创建了一个新列。因此,单个分类列被转换为4个新列,其中只有一个列的值为1,其他3个列的值为0,这就是为什么它被称为独热编码。
| categorical_column_value_A | categorical_column_value_B | categorical_column_value_C | categorical_column_value_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 |
分类值和布尔值已转换为可以作为机器学习算法输入的数值。

497

被折叠的 条评论
为什么被折叠?



