决策树 · 信息增益 / 节点分裂

决策树:一次问一个最值钱的问题

树是人类天生的思考方式:「花瓣长度大于 2.5 吗?是→再看花瓣宽度…」机器把它学成了算法:每长一个节点,都是在「哪个问题能让混乱度下降最多」上做选择。按「单步构建」亲手看它问问题,再把深度旋钮拧到 6 亲眼看它过拟合。

决策区域 · 颜色即树的判断

背景色块 = 树对每个位置的判断;散点 = 训练数据。每一次分裂都会把某个色块沿水平或垂直方向切成两半。

控制台

节点 / 叶子1 / 1
当前深度0
训练准确率—
上次分裂信息增益—

树结构(每行一次分裂)

还没有分裂:整棵树只有一个叶子节点,直接猜多数类。

分裂时发生了什么

树在每个候选节点上遍历「特征 × 阈值」的所有切法,选信息增益最大的一刀:增益 = 切之前的熵 − 切之后加权的熵。熵衡量混乱度,增益越大,这一刀换来的「秩序」越多。切不动(增益≈0、深度到上限、或节点已经纯净)就变成叶子,直接输出多数类。

原理:熵、信息增益与递归分裂

熵(entropy)衡量一个节点里标签有多混乱——各类越均匀、越「猜不准」,熵越大。二分类时:

H(S) = −p⁺ log₂p⁺ − p⁻ log₂p⁻

对每个候选切法(特征 j、阈值 t),把节点切成左右两半,信息增益定义为「切之前的熵 − 切之后加权的熵」:

Gain = H(S) − ( |S左|/|S| · H(S左) + |S右|/|S| · H(S右) )

树构建就是贪心递归:在每个节点遍历所有「特征 × 阈值」组合,选增益最大的一刀切开,再对左右子节点重复——直到触底停机(增益≈0、深度到上限、或节点纯净)。

一次完整的分裂(亲手验证)

鸢尾花数据上,「花瓣长 ≤ 2.45」这一刀就能把 setosa 完整切出来:切之前三类混杂(H≈1.58),切之后左边纯 setosa(H=0)、右边两类各半——增益最大,所以它永远是最先被问出的问题。这就是「最值钱的问题」:同样问一句,它换来的秩序最多。

停机与剪枝:控制树的野心

  • 预剪枝。本页的「最大深度」就是最常用的预剪枝:深度 2 时明显欠拟合(大片同色),深度 6 时每个点都被圈进小块——训练准确率 100%,但那是在「背答案」。
  • 后剪枝。先让树长满,再自底向上把「没带来验证集提升」的子树剪掉。工程里后剪枝通常更优,代价是多一倍计算。
  • 为什么过拟合发生在深处。叶子越深、覆盖样本越少,它的多数类可能只是「这份数据的偶然」——树把噪声当成了规律。观察指标条的「训练准确率」一路涨到 100%:它从不告诉你泛化能力。

延伸:基尼系数与回归树

分类树还有另一套流行的不纯度度量——基尼系数 Gini = 1 − Σpₖ²,计算比熵便宜(不用算 log),CART 系算法默认用它,分裂结果与熵高度相似。而回归树把「熵」换成「方差」:叶子输出训练样本均值,分裂目标是让两边方差和最小——预测就变成「落到哪个叶子,就给那个叶子的平均数」。

动手实验:用双月数据分别构建深度 2 和深度 6 的树,各截一张「训练准确率」的图——这两张图就是「欠拟合 vs 过拟合」最好的考前证据。

知识点拆解:把决策树学扎实

度量

熵 vs 基尼 vs 方差

熵带 log、理论味浓;基尼是 1−Σp²、算得快;方差用于回归树。三者都在回答同一句话:「往这个节点里扔一个新样本,你猜错的概率有多大」。

对应演示:盯住「上次分裂信息增益」
几何

轴平行是树的天性

每次分裂只沿一个坐标轴切,决策区域永远是横平竖直的矩形。围一个圆需要几十刀——单棵树的天花板,也是后面集成学习的伏笔。

对应演示:看背景色块的边
贪心

增益会越来越小

每刀都在「当前最好」里选最好——贪心不保证全局最优(找到最优树是 NP 完全问题),但换来速度和可解释性。树越深,单刀能榨出的秩序越少。

对应演示:增益逐次下降直到停机
特质

可解释性之王

树的每个判断都能翻译成人话(「花瓣长>2.45 → 往左走」),这是医疗、信贷等场景偏爱它的原因;代价是数据一变整棵树重长、单棵树很不稳定——「不稳定」正是它能被 Bagging 随机森林用好的原因。

对应演示:tree-view 里的每行分裂
  • 信息熵 H — 混乱度;均匀分布时最大
  • 信息增益 — 分裂前后的熵下降量
  • 基尼系数 — 1−Σpₖ²,熵的廉价替身
  • 预剪枝 — 长树途中设停机条件
  • 后剪枝 — 长满再回删无效子树
  • 回归树 — 叶子输出均值,分裂看方差

期末高频问答

  • 为什么不用「分类正确率」当分裂标准?错分率对分裂不敏感:0.5/0.5 和 0.9/0.1 的错分率相同(都是 0.5→0.1 才变),但熵/基尼能区分「更接近纯净」的中间态,引导树继续探索。
  • 连续特征怎么分裂?先排序,取相邻值的中点做候选阈值逐个试——本页就是这么做的。类别多的高基数特征要小心「偏袒」问题(增益偏向可取值多的特征)。
  • ID3 / C4.5 / CART 什么区别?ID3 用信息增益、只支持离散特征;C4.5 改用增益率并支持连续特征;CART 用基尼、支持回归且强制二叉树。考点是「度量 × 剪枝 × 树形状」三个维度。