[我使用onehotencoder将所有分类自变量从字符串转换为数字(二进制1和0),但是当我运行决策树时,算法将二进制分类变量视为连续的。
例如如果性别是我的自变量之一,则将male转换为1并将female转换为0。当我在决策树中使用此变量时,节点将拆分为0.5,这没有任何意义。
如何将此连续数值转换为分类数值?
如何将此连续数值转换为分类数值?
如果结果相同,您需要吗?
例如如果性别是我的自变量之一,则将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()
基本上有两种方法可以解决此问题。您可以使用
似乎您针对此问题错误地实施了一键编码。您使用的是简单的整数编码(或者更确切地说是二进制编码)。正确实现的一键编码可确保转换后的值没有偏差,并且不会因为变量的绝对值而偏向于执行机器学习算法的结果。您可以阅读有关它的更多信息here。