首页 > 解决方案 > 如何处理 sklearn 决策树中的分类自变量

问题描述

我使用 onehotencoder 将所有分类自变量从字符串转换为数字(二进制​​ 1 和 0),但是当我运行决策树时,算法将二进制分类变量视为连续变量。

例如,如果性别是我的自变量之一,则将男性转换为 1,将女性转换为 0。当我在决策树中使用它时,节点在 0.5 处分裂,这是没有意义的。

如何将此数字连续转换为数字分类?

标签: pythonscikit-learndecision-tree

解决方案


如何将此数字连续转换为数字分类?

如果结果相同,你需要吗?

例如,如果性别是我的自变量之一,则将男性转换为 1,将女性转换为 0。当我在决策树中使用它时,节点在 0.5 处分裂,这是没有意义的。

也许我错了,但这种分裂对我来说是有意义的。

假设我们有一个带有分类规则的决策树。除法将是二进制除法,这意味着“0”在左边,“1”在右边(在这种情况下)。

现在,我们如何优化这个划分规则?我们可以使用一个操作来替换这两个检查,而不是搜索值是“0”还是“1”。左边是“0”,其他一切都是正确的。现在,我们可以将相同的检查从类别替换为浮点数,<0.5 为左,否则为右。

在代码中,它很简单:

情况1:

if value == "0":
    tree.left()
elif value == "1":
    tree.right()
else:
    pass # if you work with binary, this will never happen, so its useless

案例二:

 if value == "0":
     tree.left()
 else:
     tree.right()

案例3:

if value < 0.5:
    tree.left()
else:
    tree.right()

推荐阅读