从sklearn文档here或我的实验中可以看到,DecisionTreeClassifier的所有树结构都是二叉树。准则是基尼或熵,每个DecisionTreeClassifier节点只能有0或1或2个子节点。
但是从决策树介绍slide(第3页)来看,理论决策树的每个节点可以有两个以上的子节点。
所以我的问题是,对于sklearn DecisionTreeClassifier,为什么决策树结构只是二叉树(每个DecisionTreeClassifier节点只能有1个或2个子节点。)?我们可以为DecisionTreeClassifier获取具有两个以上子节点的树结构吗?
最佳答案
这是因为sklearn的方法是使用数字特征而不是分类特征,因此当您具有数字特征时,要建立一个可以具有任意数量阈值(产生两个以上子代的阈值)的精细拆分规则是相对困难的。另一方面,对于分类特征(在提供的幻灯片中使用),另一个可能的选择是具有尽可能多的子级值。两种方法都有其自身的问题(当您拥有大量可能的值时,分类方法使其几乎无法跟踪),而数值方法则需要特殊的特征编码(分类法很热门,这有效地意味着您仍可以表示同一棵树,但不必使用“物种”(带有3个孩子[狗,猫,人]),您将拥有更深的决策树:[狗,不是狗],[不是狗,而是猫,不是狗,不是猫,而是人])。
因此,简短的答案是“否”,使用此实现您不能获得2个以上的子代,但这通常并不是真正的限制。