2016-08-13 103 views
1

从sklearn文档here或我的实验可以看出,DecisionTreeClassifier的所有树结构都是二叉树。标准是gini或熵,每个DecisionTreeClassifier节点只能有0个或1个或2个子节点。为什么决策树结构只是sklearn DecisionTreeClassifier的二叉树?

但是从决策树介绍slide(第3页),理论决策树的每个节点都可以有2个以上的子节点。

所以我的问题是为什么决策树结构只是二叉树(每个DecisionTreeClassifier节点只能有1或2个子节点。)对于sklearn DecisionTreeClassifier?我们可以为DecisionTreeClassifier获得多于2个子节点的树结构吗?

回答

2

这是因为sklearn的做法是与数值功能,不分类工作,当你有数值的功能,它是比较硬的建立可以有阈值的任意数量(这需要一个很好的分割规则生产2个以上的孩子)。另一方面,对于分类特征(在提供的幻灯片中使用),另一种可能的选择是让尽可能多的孩子获得可能的值。这两种方法都有自己的问题(当你有很多可能的值时,分类方法使它几乎可插入),数值需要特定的特征编码(对于分类而言很热门,这意味着你仍然可以表达同一棵树,而不是“物种“与3个孩子[狗,猫,人],你会有更深的决策树:[狗,不是狗],[不是狗,而是猫,不是狗,不是猫,而是人类])。

所以简短的回答是没有,这个实现你不能达到2个以上的孩子,但是这通常不是真正的限制。

+0

谢谢lejlot。我不认为经典的ID3算法(通过信息增益)可以找到每个树节点的分类阈值。但sklearn剂量。你知道哪个算法可以用来通过sklearn找到每个树节点的分类阈值吗? – ybdesire

+0

@ybdesire一般情况下,最好在这种情况下提出单独的问题,以便其他人可以在遇到同样问题时找到答案。 Scikit-learn使用CART作为其决策树。 ID3无法处理数值(非分类)特征。 – lejlot

+0

明白了。非常感谢@lejlot。 – ybdesire