什么是决策树?

决策树(Decision Tree) 是一种直观的分类算法。它通过一系列"是/否"问题将数据逐步分类。

核心直觉:想象你在玩"20个问题"猜谜游戏:

  • 问题 1:这个动物有翅膀吗?→ 是/否
  • 问题 2:它会飞吗?→ 是/否
  • 问题 3:它是哺乳动物吗?→ 是/否
  • ...最终得出结论:这是鸟/狗/猫

每个内部节点都是一个决策点,叶子节点是最终分类。

🎯 适用场景

  • 可解释性要求高:银行审批、医疗诊断等需要解释决策过程的场景
  • 特征重要性分析:需要快速了解哪些特征对预测最重要
  • 混合类型数据:同时处理数值型和分类型特征
  • 数据预处理少:不需要特征缩放,对缺失值有一定容忍度
  • 快速原型开发:作为基准模型快速验证想法

💡 经典应用:信用评分、客户流失预测、医疗诊断、植物分类

📜 历史渊源

问题背景:早期的机器学习模型(如线性回归、感知机)输出的是数字或权重,人类很难理解"模型为什么这样决策"。医生、法官、银行经理需要的是可以解释的规则:"如果体温>38°且咳嗽,则可能是流感"。

关键突破:1984年,统计学家 Breiman 等人提出 CART 算法,用基尼不纯度来选择最佳分裂点。1986年,Quinlan 提出 ID3 算法,用信息增益(熵的减少量)来决定"先问哪个问题"。两种方法殊途同归——都是贪心地选择最能区分数据的特征。

深远影响:决策树是唯一能直接输出"人类可读规则"的模型,至今仍是医疗诊断、金融风控等需要可解释性场景的首选。更重要的是,它催生了随机森林、GBDT、XGBoost 等一系列强大的集成方法。

趣闻:Quinlan 开发 ID3 时的灵感来源是一个经典的猜谜游戏"20 Questions"——通过最少的是/否问题猜出对方想的东西。决策树本质上就是在玩这个游戏:每次选择最有信息量的问题来问。

🔗 发展脉络

1960s
CLS
概念学习
→
1984
CART
基尼不纯度
→
1986
ID3
信息增益
连续值问题
→
1993
C4.5
信息增益率
不稳定问题
→
2001
随机森林
集成学习

⚠️ 局限性

  • 容易过拟合:深层决策树会记住训练数据的噪声,需要剪枝
  • 不稳定:数据微小变化可能导致完全不同的树结构
  • 只能做轴平行分割:决策边界只能是垂直或水平的
  • 偏向多值特征:信息增益偏向取值较多的特征
  • 难以学习复杂关系:如 XOR 问题需要很深的树

💡 这些局限催生了:随机森林(解决不稳定)、梯度提升树(提高精度)、XGBoost(综合优化)

🏢 工业界地位

特定场景广泛使用

单棵决策树在工业界主要用于以下场景:

  • 可解释性需求场景:金融风控、医疗诊断需要解释模型决策
  • 快速特征筛选:在特征工程阶段快速识别重要特征
  • 作为基学习器:随机森林、梯度提升树的基础组件
  • 规则提取:从树中提取业务规则

🎯 现状:单棵决策树较少单独使用,但其思想是现代集成学习方法(随机森林、XGBoost、LightGBM)的基石。

交互式可视化

调整参数,观察决策树如何生长和分裂

3
2
试一试:
  • 调整「最大深度」:深度 1 只分一刀(太简单),深度过大则每个叶节点只有几个点(过拟合)
  • 观察树结构:每个节点显示了分裂条件——这就是决策树的可解释性
  • 比较不同的「分裂标准」(基尼/信息增益),观察树的结构是否变化

树的结构信息:

节点数: 0

最大深度: 0

叶子节点数: 0

数学原理

直觉引入:想象你在猜一个动物——你会问"它会飞吗?""它有四条腿吗?"每个问题都把可能的答案缩小一半。决策树做的就是这件事:找到最能"区分"数据的问题,优先问。

信息熵(衡量"混乱程度"):

$$H(D) = -\sum_{k=1}^{K} p_k \log_2 p_k$$

符号解释:

  • $D$:当前数据集
  • $K$:类别总数
  • $p_k$:第 $k$ 类样本占比

熵越大 → 越混乱 → 越需要分裂。纯净节点(只有一类)熵 = 0。

信息增益(ID3 算法):

$$\text{Gain}(D, a) = H(D) - \sum_{v=1}^{V} \frac{|D^v|}{|D|} H(D^v)$$

选择信息增益最大的特征 $a$ 进行分裂——即分裂后"混乱程度"下降最多的特征。

基尼不纯度(CART 算法):

$$\text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2$$

直觉:从数据集中随机抽两个样本,它们类别不同的概率。基尼值越小越纯净。

实例:该不该打网球?
数据集 14 天:9 天打球(+),5 天不打(-)
• 总熵:$H = -\frac{9}{14}\log_2\frac{9}{14} - \frac{5}{14}\log_2\frac{5}{14} = 0.940$

按"天气"分裂:晴(5天)、阴(4天)、雨(5天)
• $H(\text{晴}) = 0.971$,$H(\text{阴}) = 0$,$H(\text{雨}) = 0.971$
• 加权熵 = $\frac{5}{14}(0.971) + \frac{4}{14}(0) + \frac{5}{14}(0.971) = 0.694$
• 信息增益 = 0.940 - 0.694 = 0.246
对比其他特征,选增益最大的作为根节点。

剪枝(防止过拟合):

  • 预剪枝:限制最大深度、最小样本数等,提前停止生长
  • 后剪枝:先长完整棵树,再自底向上剪去不显著的分支