对分类数据使用数字重复项时,应添加新列或转换值?

数据挖掘 Python 熊猫
2022-01-24 15:39:06

如果这是数据框,在熊猫中

+--------+--------+-------+
|  Col1  |  Col2  |  Sex  |
+--------+--------+-------+
| Value  | Value  | F     |
| Value  | Value  | M     |
| Value  | Value  | M     |
| Value  | Value  | Other |
| Value  | Value  | F     |
| Value  | Value  | M     |
+--------+--------+-------+

它应该转换为

+--------+--------+-------+-------+
|  Col1  |  Col2  | Sex_M | Sex_F |
+--------+--------+-------+-------+
| Value  | Value  |     0 |     1 |
| Value  | Value  |     1 |     0 |
| Value  | Value  |     1 |     0 |
| Value  | Value  |     0 |     0 |
| Value  | Value  |     0 |     1 |
| Value  | Value  |     1 |     0 |
+--------+--------+-------+-------+

或这个

+--------+--------+-------+
|  Col1  |  Col2  |  Sex  |
+--------+--------+-------+
| Value  | Value  |    1  |
| Value  | Value  |    0  |
| Value  | Value  |    0  |
| Value  | Value  |    2  |
| Value  | Value  |    1  |
| Value  | Value  |    0  |
+--------+--------+-------+
1个回答

这取决于您使用的算法。对于线性模型(线性/逻辑回归,SVM ...),您需要创建虚拟变量,如您所注意到的,表示特征“Sex_M”和“Sex_F”。

但是,如果您使用的是基于树的技术,那么在 [0, 1, 2] 中创建一个带有 Sex 的整数类型列对于这些算法应该足够了。原因是,与线性模型相反,基于树的技术是非线性的,并且会评估所有可能的拆分来划分您的观察结果。

但是,将分类变量映射为整数的方式可能会导致不同的树结构。下面是一个例子。假设您想使用索引特征“Sex”来预测 y 变量。在左图中,类别 2 与类别 0 和 1 之间存在细微差别,因为类别没有定向。它将导致两个连续的分裂,并且应该在树构建的后期发生。但是,在右侧图表上,类别之间的均值差异大于左侧图表。所以分裂应该在树构建的早期发生。此外,您只需要 1 次拆分即可发挥作用。

总而言之,我认为简单的索引可以与基于树的技术一起使用。我还建议您以有序的方式对分类特征进行排序,以轻松进行树学习。

带索引分类变量的树学习