如何处理sklearn决策树中的类别自变量

时间:2020-02-04 07:07:24

标签: python scikit-learn decision-tree

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

例如如果性别是我的自变量之一,则将雄性转换为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

情况2:

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

情况3:

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

答案 1 :(得分:-1)

基本上有两种方法可以解决此问题。您可以使用

  1. 整数编码(如果类别变量本质上是序数,例如大小等)
  2. 一次热编码(如果分类变量本质上是序数 例如性别等)

似乎您已为该问题错误地实施了一键编码。您使用的是简单的整数编码(或者更确切地说是二进制编码)。正确实现的一键编码可确保转换后的值没有偏差,并且不会因为变量的绝对值而偏向于执行机器学习算法的结果。您可以详细了解here