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

问题描述 投票:1回答:2

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

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

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

python scikit-learn decision-tree
2个回答
0
投票

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

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

例如如果性别是我的自变量之一,则将male转换为1并将female转换为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. 整数编码(如果分类变量本质上是序数,例如大小等)
  2. 单次编码(如果分类变量本质上是序数如性别等)

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

© www.soinside.com 2019 - 2024. All rights reserved.