为什么决策树结构只是 sklearn DecisionTreeClassifier 的二叉树?
Why the decision tree structure is only binary tree for sklearn DecisionTreeClassifier?
从sklearn文档here可以看出,或者从我的实验来看,DecisionTreeClassifier的树结构都是二叉树。标准是gini或entropy,每个DecisionTreeClassifier节点只能有0个或1个或2个子节点。
但是从决策树介绍slide(第3页)来看,理论上决策树的每个节点可以有2个以上的子节点。
所以我的问题是为什么sklearn DecisionTreeClassifier的决策树结构只有二叉树(每个DecisionTreeClassifier节点只能有1个或2个子节点。)?我们能否为 DecisionTreeClassifier 获得具有 2 个以上子节点的树结构?
因为sklearn的方法是使用numerical特征,而不是categorical,当你有数值特征时,它相对困难建立一个漂亮的分裂规则,它可以有任意数量的阈值(需要产生超过 2 children)。另一方面,对于分类特征(在提供的幻灯片中使用),另一种可能的选择是拥有尽可能多的 children 值。这两种方法都有其自身的问题(当你有很多可能的值时,分类方法使它几乎无法追踪)并且数字需要特定的特征编码(一个热用于分类,这有效地意味着你仍然可以表达同一棵树,而不是 "species" with 3 children [dog, cat, human] 你会有更深层次的决策树:[dog, not dog], [not dog but cat, not dog, not cat but human]).
所以简短的回答是否,你不能用这个实现实现超过 2 children,但是一般来说这并不是真正的限制。
从sklearn文档here可以看出,或者从我的实验来看,DecisionTreeClassifier的树结构都是二叉树。标准是gini或entropy,每个DecisionTreeClassifier节点只能有0个或1个或2个子节点。
但是从决策树介绍slide(第3页)来看,理论上决策树的每个节点可以有2个以上的子节点。
所以我的问题是为什么sklearn DecisionTreeClassifier的决策树结构只有二叉树(每个DecisionTreeClassifier节点只能有1个或2个子节点。)?我们能否为 DecisionTreeClassifier 获得具有 2 个以上子节点的树结构?
因为sklearn的方法是使用numerical特征,而不是categorical,当你有数值特征时,它相对困难建立一个漂亮的分裂规则,它可以有任意数量的阈值(需要产生超过 2 children)。另一方面,对于分类特征(在提供的幻灯片中使用),另一种可能的选择是拥有尽可能多的 children 值。这两种方法都有其自身的问题(当你有很多可能的值时,分类方法使它几乎无法追踪)并且数字需要特定的特征编码(一个热用于分类,这有效地意味着你仍然可以表达同一棵树,而不是 "species" with 3 children [dog, cat, human] 你会有更深层次的决策树:[dog, not dog], [not dog but cat, not dog, not cat but human]).
所以简短的回答是否,你不能用这个实现实现超过 2 children,但是一般来说这并不是真正的限制。