一、核心思想:模拟人类的决策过程

想象一下你在判断“今天是否适合打网球”?你可能会问自己一系列问题:

  1. 外面下雨吗?

    •  -> 不打网球

    •  -> 下一个问题...

  2. 湿度高吗?

    •  -> 不打网球

    •  -> 下一个问题...

  3. 有风吗?

    •  -> 不打网球

    •  -> 打网球

这个过程就是一个简单的决策树。决策树算法的目标就是从已有的数据中自动学习出这样一套“提问规则”,从而对未知的数据进行预测。


二、决策树能做什么?(应用场景)

  • 分类:预测一个离散的类别。

    • 例如:根据症状判断疾病、根据财务历史判断贷款风险、识别垃圾邮件。

  • 回归:预测一个连续的数值。

    • 例如:根据房屋特征预测房价、根据历史数据预测销量。

为了清晰起见,我们将以分类任务为主进行详细说明。


三、关键术语与树的结构

一棵决策树包含以下基本组成部分:

  • 根节点:代表整个数据集,是树的最顶层,是所有决策的起点。

  • 内部节点:代表一个特征(或属性)上的测试。每个节点会提出一个问题。

  • 分支:代表一个测试的结果。根据问题的答案(例如“是/否”、“特征值>阈值”),数据被分到不同的分支。

  • 叶节点:也叫终端节点,代表最终的决策结果(分类的类别或回归的数值)。


四、决策树是如何“生长”出来的?(核心原理)

构建决策树的核心问题是:在每一个节点上,应该选择哪个特征进行分裂?如何选择最佳的分裂点?

答案是:我们需要一个衡量标准,来评估用某个特征分裂后,数据的“不纯度”降低了多少。我们的目标是让分裂后的子集尽可能“纯”,即同一个子集内的数据尽可能属于同一类别。

关键概念:不纯度

不纯度衡量的是一个数据集合中类别的混杂程度。

  • 纯度最高:一个集合中所有样本都属于同一类别。(不纯度=0)

  • 纯度最低:一个集合中样本均匀地分布在所有类别中。(不纯度最高)

常用的不纯度指标有以下三种:

简单总结: 算法在每一个节点都会遍历所有特征和所有可能的分裂点,计算使用它们分裂后的“不纯度下降值”(信息增益/基尼增益),然后选择使不纯度下降最多的那个特征和分裂点


五、决策树如何停止生长?(剪枝)

如果让树无限地生长,直到每个叶节点都完全“纯”(只有一个样本或一个类别),这会导致严重的过拟合。这棵树会把训练数据中的所有噪声和特例都学进去,而在未知数据上表现很差。

为了防止过拟合,需要控制树的复杂度:

  • 预剪枝:在生长过程中提前停止。

    • 设置最大深度

    • 设置叶节点最少样本数

    • 设置节点分裂的最小样本数

    • 设置分裂所需的最小不纯度下降值

  • 后剪枝:让树充分生长,然后再剪掉一些分支。

    • 用一部分数据(验证集)来评估,如果剪掉一个子树能让模型在验证集上的准确率提升或不降,就进行剪枝。


六、决策树的优缺点

优点:
  1. 非常直观,易于解释:生成的规则可以很容易地被业务人员理解,这是它最大的优势(“白盒模型”)。

  2. 无需大量数据预处理:对数据的分布、缺失值不敏感,不需要特征标准化(归一化)。

  3. 可以处理多种类型数据:既能处理数值型特征,也能处理类别型特征。

  4. 非线性关系:能够捕捉特征之间的非线性关系。

缺点:
  1. 容易过拟合:如果不进行剪枝,树会变得非常复杂,泛化能力差。

  2. 不稳定:训练数据的微小变化可能导致生成完全不同的树。这个问题可以通过集成学习(如随机森林)来缓解。

  3. 有偏性:倾向于选择那些具有更多取值的特征作为分裂特征。

  4. 难以学习复杂关系:对于如“异或”这类复杂的关系,单棵决策树很难表达。


总结

决策树是一种通过递归地选择最佳特征进行分裂,从而将数据集划分成更纯的子集,最终形成一棵树状结构的预测模型。

  • 核心:选择分裂特征的标准(信息增益、基尼指数)。

  • 关键:通过剪枝来平衡模型的复杂度和泛化能力,防止过拟合。

  • 价值:其可解释性在医疗、金融等需要决策透明的领域具有无可替代的优势。

它是理解更复杂模型(如随机森林、梯度提升树GBDT/XGBoost)的基石,因为这些强大的算法正是由多棵决策树集成而来的。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐