通常一棵决策树有一个根节点、一些节点和一些叶子。
很多教程将其说明为类似于二叉树的东西。
决策树中的一个节点是否有可能超过 2 个节点?
这张图片来自这篇文章
“超过 2 个节点”是指距根节点有超过 3 个分割(在本例中为 3、Low、Med、High)。
如果在实际应用中合理,请提供一个开放数据集,决策树将在该数据集上吐出超过 2 个节点,以及一段 sklearn 代码。
通常一棵决策树有一个根节点、一些节点和一些叶子。
很多教程将其说明为类似于二叉树的东西。
决策树中的一个节点是否有可能超过 2 个节点?
这张图片来自这篇文章
“超过 2 个节点”是指距根节点有超过 3 个分割(在本例中为 3、Low、Med、High)。
如果在实际应用中合理,请提供一个开放数据集,决策树将在该数据集上吐出超过 2 个节点,以及一段 sklearn 代码。
可以在决策树中进行不止一个二分分裂。卡方自动交互检测 (CHAID)是一种不仅仅用于二元分割的算法。
但是,scikit-learn 仅支持二元拆分,原因有很多。限制为二进制拆分的一个主要原因是该库可以使用相同的 API 支持尽可能多的拆分标准。例如,Gini Impurity仅支持二元拆分。
在实践中,仅支持二进制拆分不是问题,因为一系列二进制拆分可以模拟任意数量的同时拆分。
我认为 scikit-learn 只实现了二叉树。但是,您可以将示例转换为二叉树,以便使用 scikit-learn:
Savings == Low
True => Assets == Low
True => Bad Risk
False => Good Risk
False => Savings == Med
True => Good Credit Risk
False => Income <= 30K
True => Bad Risk
False => Good Risk
IMO 决策树 - 根据定义 - 设计为在每个步骤中选择单个“最佳”分割(统计学习简介,第 8.1 章)。我认为您需要在值低、中、高上进行拆分,在这种情况下,第一次拆分将发生在(低)与(中、高)之间,而稍后的拆分将在(中、高)之间发生,无论给出什么最合适。
单个决策树通常没有很好的预测能力(参见统计学习简介,第 8.2 章)。如果您对预测的准确性感兴趣,您应该更进一步,在许多树(或“树的集合”)上使用“bagging”甚至更好的“boosting”来种植一个随机森林。在这种情况下,种植了许多树,它们一起就如何预测某些结果进行“投票”。
scikit-learn 中的随机森林:https ://scikit-learn.org/stable/modules/ensemble.html
突出的增强方法是例如 catboost ( https://catboost.ai/docs/concepts/about.html ) 或 lightGBM ( https://lightgbm.readthedocs.io/en/latest/ )。
替代(非基于树)模型将能够毫无问题地通过三个类别进行区分(ISL,第 4 章)。一个例子是形式的逻辑模型(或“logit”)risk = b0 + b1*savings。在此模型中,您还可以计算边际效应,告诉您,如果有人从 A 类移动到 B 类,“坏风险”的概率会发生多大的变化(边际效应)。
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
你可以找到一堆好的代码,直接覆盖这里提到的主题,并在“统计学习简介”一书中在线讨论:https ://github.com/JWarmenhoven/ISLR-python
总结:如果你对预测感兴趣,不要坚持简单的决策树,而是转向别的东西。
如果在现实生活中是合理的
根据我对这个问题的理解,从技术上讲,我认为将决策树/森林从根节点拆分为 3 个或更多节点是完全合理的。如果你没有,请检查这个例子。在此示例中,预测变量是是否在给定日期打网球取决于当天的气候情况。
但是我不确定考虑到树结构这是否实际上可行,并且拆分策略涉及找到与模型中熵减少最多或信息增益最大增益相对应的节点。
PS:如果这个答案没有给你任何新的信息或清晰,请说出来。我会删除它,以免误导或任何人。