查看全课大纲(第 26 / 82 节)
  1. 1.函数与数据泛化
  2. 2.向量:从几何直觉到高维空间
  3. 3.矩阵与张量
  4. 4.特征值与特征向量:矩阵变换的不动方向
  5. 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
  6. 6.概率与统计:机器学习的数学基础
  7. 7.独立性与随机变量:贝叶斯公式与二项分布
  8. 8.期望、方差与协方差:随机变量的数字画像
  9. 9.联合概率:当一条轴不够用的时候
  10. 10.概率分布(一):从伯努利到伽马函数
  11. 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
  12. 12.机器学习的模型:找输入与输出的关系
  13. 13.机器学习的应用
  14. 14.过拟合
  15. 15.机器学习的分类
  16. 16.有监督学习:从房价预测说起
  17. 17.损失函数
  18. 18.梯度下降(上):更新规则与学习速率
  19. 19.梯度下降(2)
  20. 20.牛顿方法
  21. 21.KNN简介
  22. 22.距离测算
  23. 23.朴素贝叶斯
  24. 24.朴素贝叶斯的实际应用
  25. 25.信息熵:决策树构建的度量基础
  26. 26.信息增益与决策树的构建
  27. 27.ID3算法
  28. 28.决策树节点的划分
  29. 29.CART树
  30. 30.Bagging
  31. 31.Boosting:自适应提升算法
  32. 32.Gradient Boosting
  33. 33.线性模型:回归与分类的同一副骨架
  34. 34.最小二乘:把最优参数直接解出来
  35. 35.最小二乘法的几何与概率视角
  36. 36.极大似然:给最小二乘一个概率出身
  37. 37.逻辑回归(1):把线性模型接到分类上
  38. 38.逻辑回归(2):损失函数与多分类
  39. 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
  40. 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
  41. 41.优化方法(1):坐标下降与前向选择
  42. 42.优化方法(2):前向策略与最小角回归
  43. 43.拉格朗日乘子法(1):从无约束到等式约束
  44. 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
  45. 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
  46. 46.最大间隔:把分类问题变成优化问题
  47. 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
  48. 48.支持向量:边界上的少数派
  49. 49.SVM 计算过程:一笔到底算完,再走进核方法
  50. 50.贝叶斯公式:概率即信念
  51. 51.隐含变量和概率模型:给看不见的原因建模
  52. 52.EM 算法:期望与最大化的迭代
  53. 53.琴生不等式:EM 的数学钥匙
  54. 54.三个硬币问题:EM 的复盘与衔接
  55. 55.高斯混合模型:用隐变量解释双峰数据
  56. 56.隐马尔可夫模型
  57. 57.隐马尔可夫模型(2):前向算法与动态混合模型
  58. 58.隐马尔可夫模型在 NLP 中的运用
  59. 59.EM 算法:把「为什么收敛」推到底
  60. 60.HMM 在 NLP 中的运用:从分词到机器翻译
  61. 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
  62. 62.高维下的高斯模型
  63. 63.主题模型:从词袋到隐含主题
  64. 64.Dirichlet 分布(1)
  65. 65.Dirichlet 分布(2)
  66. 66.统计学习内容回顾
  67. 67.K-means 算法
  68. 68.PCA 降维
  69. 69.SVD 降维
  70. 70.从聚类到流形
  71. 71.局部线性嵌入
  72. 72.随机邻域嵌入:SNE 与 t-SNE
  73. 73.无参模型:让数据自己说话
  74. 74.高斯过程:函数空间里的正态分布
  75. 75.高斯过程(2):噪声、正则化与核的线性组合
  76. 76.神经网络简介:从感知器到自编码器
  77. 77.反向传播:把误差一层层传回去
  78. 78.卷积神经网络(CNN):让特征自己学出来
  79. 79.循环神经网络(RNN):给网络装上记忆
  80. 80.深度学习回顾:静态一类,动态一类
  81. 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
  82. 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传

信息增益与决策树的构建

约 13 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 机器学习算法精讲

在上一节我们学习了信息熵的概念,它衡量了一个系统的不确定性。本节我们将利用信息熵,构建一个核心指标——信息增益,并以此为基础,阐述决策树模型如何通过一系列“提问”来对数据进行分类。学完本节,你将能够理解并手动计算信息增益,并掌握决策树选择最佳分割属性的核心思想。

💡 核心导读

  • 信息增益的定义:理解信息增益是原始数据熵与分割后各子集加权熵的差值,它量化了通过一次分割所获得的“信息纯度”提升。
  • 信息增益的计算:掌握如何具体计算一个属性分割前后的信息增益,包括计算原始熵、子集熵以及加权和。
  • 决策树的分割准则:学习决策树在构建时,如何通过比较不同属性分割带来的信息增益大小,来选择当前最佳的“提问”。
  • 从一维到多维:理解决策树的思想可以自然地扩展到多维特征空间,通过在不同维度上依次进行分割,构建出复杂的分类边界。
  • 信息增益的直观理解:明确信息增益越大越好,因为它意味着分割后的子集更“纯净”,分类更明确。

信息增益:从熵的减少到信息的获得

在决策树学习中,我们的目标是将一个混合的数据集,通过一系列基于属性的判断,分割成尽可能“纯净”的子集。如何衡量一次分割的好坏呢?这就需要引入信息增益的概念。

信息增益衡量的是:当我们根据某个属性(例如“天气”)对数据集进行分割后,整个系统的不确定性(熵)减少了多少。这个减少的量,就是我们通过这次分割所获得的“信息”。

其计算公式如下:

对于一个属性 AA,它将原始数据集 SS 分割成了 vv 个子集 {S1,S2,...,Sv}\lbrace S_1, S_2, ..., S_v\rbrace,则属性 AA 的信息增益 Gain(S,A)Gain(S, A) 为:

Gain(S,A)=Entropy(S)−∑i=1v∣Si∣∣S∣Entropy(Si)Gain(S, A) = Entropy(S) - \sum_{i=1}^{v} \frac{|S_i|}{|S|} Entropy(S_i)

其中:

  • Entropy(S)Entropy(S) 是分割前原始数据集 SS 的熵。
  • ∣Si∣|S_i| 是第 ii 个子集中样本的数量,∣S∣|S| 是总样本数。因此 ∣Si∣∣S∣\frac{|S_i|}{|S|} 就是该子集的权重 wiw_i。
  • Entropy(Si)Entropy(S_i) 是第 ii 个子集的熵。
  • ∑i=1vwiEntropy(Si)\sum_{i=1}^{v} w_i Entropy(S_i) 是分割后所有子集的加权平均熵。

直观理解:原始熵 Entropy(S)Entropy(S) 代表了分割前的不确定性。加权平均熵代表了分割后,各个子集内部不确定性的平均水平。信息增益就是不确定性减少的部分。增益越大,说明这次分割让数据变得越有序、越纯净。

信息增益计算示例

让我们通过一个具体的例子来巩固这个概念。假设我们有一个一维数据集,包含10个点,用颜色(红/绿)标记类别。我们考虑三种不同的分割线(A, B, C)将其分成左右两部分。

为了简化,我们直接使用上一节计算过的结果:

  • 原始数据集 SS 的熵 Entropy(S)=1Entropy(S) = 1(因为红绿各5个,完全不确定)。
  • 对于分割线A:左边(A1)有3个点,全是红色,Entropy(A1)=0Entropy(A1) = 0;右边(A2)有7个点(2红5绿),其熵需要计算。

首先计算 Entropy(A2)Entropy(A2)。A2中有2个红色,5个绿色,共7个点。

  • P(红)=2/7P(红) = 2/7
  • P(绿)=5/7P(绿) = 5/7
  • Entropy(A2)=−[27log⁡2(27)+57log⁡2(57)]Entropy(A2) = -[\frac{2}{7} \log_2(\frac{2}{7}) + \frac{5}{7} \log_2(\frac{5}{7})]

我们可以用一小段代码来精确计算这个值,并最终得到信息增益 Gain(S,A)Gain(S, A)。

import math

def entropy(probabilities):
    """计算熵,输入为概率列表"""
    return -sum(p * math.log2(p) for p in probabilities if p > 0)

# 计算原始熵 (5红5绿)
entropy_S = entropy([0.5, 0.5])
print(f"原始数据集熵 Entropy(S): {entropy_S:.4f}")

# 计算子集A2的熵 (2红5绿)
p_red_A2 = 2/7
p_green_A2 = 5/7
entropy_A2 = entropy([p_red_A2, p_green_A2])
print(f"子集A2的熵 Entropy(A2): {entropy_A2:.4f}")

# 计算信息增益 Gain(S, A)
# A1权重 w1 = 3/10, A2权重 w2 = 7/10
w1 = 3/10
w2 = 7/10
# 注意:Entropy(A1) = 0
gain_A = entropy_S - (w1 * 0 + w2 * entropy_A2)
print(f"基于分割线A的信息增益 Gain(S, A): {gain_A:.4f}")
原始数据集熵 Entropy(S): 1.0000
子集A2的熵 Entropy(A2): 0.8631
基于分割线A的信息增益 Gain(S, A): 0.3958

计算表明,使用分割线A,我们获得了约0.396的信息增益。按照同样的方法,我们可以计算分割线B和C的信息增益 Gain(S,B)Gain(S, B) 和 Gain(S,C)Gain(S, C)。

决策树的选择策略:在构建决策树时,我们会在当前节点所有可用的属性(或分割点)中,选择那个能带来最大信息增益的属性进行分割。因为这意味着这次分割能最有效地降低系统的不确定性,让数据朝着更纯净的方向发展。

按同样的方法可以计算分割线 B(左 6 右 4)和 C 的信息增益。讲师凭直觉给出了他的预判:IGA>IGC>IGBIG_A > IG_C > IG_B,但特别声明”这个我具体没算过,只是凭对这些数的直觉,有可能写错——大家可以去验证一下”。这是个现成的练习:把 A、B、C 三条线的信息增益都算出来,看看排序是否如他所料。

从一维分割到多维决策树

上面的例子是在一维空间(一条线上)找分割点。现实中的数据往往是多维的。决策树的强大之处在于它能自然地处理多维特征。

考虑一个二维分类问题,数据点散落在平面上,有红色和绿色两类。我们无法用一条平行于x轴或y轴的直线完美分开它们。

决策树的思路是进行序列的、轴平行的分割:

  1. 首先,我们可能在x轴上找到一个最佳分割点 x0x_0,将平面分成左右两部分。
  2. 然后,在左边的区域,我们可能发现数据仍然混合,于是再在y轴上找一个分割点 y0y_0,将该区域进一步细分。
  3. 在右边的区域,可能也需要在y轴上找另一个分割点 y1y_1 进行分割。

通过这样一系列“如果 x<x0x < x_0 且 y<y0y < y_0,则为红类”的规则,我们最终将二维平面划分成了多个矩形区域(在更高维是超矩形)。每个矩形区域对应决策树的一个叶节点,并赋予一个类别标签。

扩展到高维:对于三维或更高维的数据,决策树构建的“盒子”就是高维超立方体。决策树的学习过程,就是自动地、贪婪地(每一步选择当前最优)寻找一系列这样的分割超平面(总是平行于坐标轴),将特征空间划分为不同的区域,使得每个区域内的样本尽可能属于同一类别。

熵函数的形状回顾

在结束本节前,我们回顾一下熵函数的典型形状,这有助于理解信息增益的动机。对于最简单的二分类问题(类别为1和2),熵 H(p)=−plog⁡2(p)−(1−p)log⁡2(1−p)H(p) = -p \log_2(p) - (1-p) \log_2(1-p),其中 pp 是类别1的概率。

  • 当 p=0.5p = 0.5 时(两类样本数量相等),不确定性最大,熵 H=1H = 1。
  • 当 p=0p = 0 或 p=1p = 1 时(所有样本属于同一类),不确定性最小,熵 H=0H = 0。 熵函数是一个在 p=0.5p=0.5 处取得最大值的凹函数(concave,开口向下)。

决策树的目标,正是通过不断分割,使得每个子节点中样本的类别分布尽可能偏向 p=0p=0 或 p=1p=1,即让每个子节点的熵尽可能小。信息增益直接衡量了我们向这个目标前进的“步长”有多大。

📝 动手练一练

  1. 概念辨析:假设我们有一个数据集,根据属性“温度”分割成“高”、“中”、“低”三个子集后,计算得到信息增益为0.2。根据属性“湿度”分割成“高”、“低”两个子集后,信息增益为0.15。如果只能根据一个属性来构建决策树的根节点,应该选择哪个属性?为什么?
👉 点击查看参考答案

应该选择“温度”属性。 因为决策树构建时,在每个节点上会选择能带来最大信息增益的属性进行分割。信息增益越大,意味着该属性对降低数据不确定性的贡献越大,分割后的子集更纯净。本例中“温度”的信息增益(0.2)大于“湿度”的信息增益(0.15),因此优先选择“温度”。

  1. 动手计算:假设一个二分类数据集S有8个样本,其中5个正例,3个反例。现有一个属性A,它将S分割为两个子集S1(4个样本,全为正例)和S2(4个样本,1个正例,3个反例)。请手动计算属性A的信息增益 Gain(S,A)Gain(S, A)。(可使用计算器,log⁡2(3)≈1.585,log⁡2(0.75)≈−0.415\log_2(3) \approx 1.585, \log_2(0.75) \approx -0.415)
👉 点击查看参考答案

计算步骤:

  1. 计算原始熵 Entropy(S)Entropy(S): p+=5/8,p−=3/8p_+ = 5/8, p_- = 3/8 Entropy(S)=−58log⁡2(58)−38log⁡2(38)Entropy(S) = -\frac{5}{8}\log_2(\frac{5}{8}) - \frac{3}{8}\log_2(\frac{3}{8}) 由于 58=0.625,38=0.375\frac{5}{8}=0.625, \frac{3}{8}=0.375,利用提示 log⁡2(3)≈1.585\log_2(3) \approx 1.585,则 log⁡2(3/8)=log⁡2(3)−3≈−1.415\log_2(3/8)=\log_2(3)-3\approx -1.415,更精确地计算: Entropy(S)≈−[0.625∗log⁡2(0.625)+0.375∗log⁡2(0.375)]≈0.954Entropy(S) \approx -[0.625 * \log_2(0.625) + 0.375 * \log_2(0.375)] \approx 0.954

  2. 计算子集熵:

    • Entropy(S1)Entropy(S1): S1中全为正例,p+=1,p−=0p_+=1, p_-=0,故 Entropy(S1)=0Entropy(S1) = 0。
    • Entropy(S2)Entropy(S2): S2中1正3反,p+=1/4=0.25,p−=3/4=0.75p_+ = 1/4=0.25, p_- = 3/4=0.75。 Entropy(S2)=−[0.25∗log⁡2(0.25)+0.75∗log⁡2(0.75)]Entropy(S2) = -[0.25 * \log_2(0.25) + 0.75 * \log_2(0.75)] log⁡2(0.25)=−2,log⁡2(0.75)≈−0.415\log_2(0.25) = -2, \log_2(0.75) \approx -0.415 故 Entropy(S2)≈−[0.25∗(−2)+0.75∗(−0.415)]=−[−0.5−0.311]=0.811Entropy(S2) \approx -[0.25*(-2) + 0.75*(-0.415)] = -[-0.5 - 0.311] = 0.811
  3. 计算加权平均熵: 权重 w1=∣S1∣/∣S∣=4/8=0.5w1 = |S1|/|S| = 4/8 = 0.5 权重 w2=∣S2∣/∣S∣=4/8=0.5w2 = |S2|/|S| = 4/8 = 0.5 加权平均熵 =0.5∗0+0.5∗0.811=0.4055= 0.5*0 + 0.5*0.811 = 0.4055

  4. 计算信息增益: Gain(S,A)=Entropy(S)−加权平均熵≈0.954−0.406=0.548Gain(S, A) = Entropy(S) - 加权平均熵 \approx 0.954 - 0.406 = 0.548

因此,属性A的信息增益约为0.548。

本章小结

本节我们深入探讨了决策树构建的核心机制——信息增益。信息增益将信息熵从一个静态的“不确定性”度量,转变为一个动态的“分割效果”评估工具。通过计算和比较不同属性分割带来的信息增益,决策树算法能够以贪婪、递归的方式,构建出一个层次化的“提问-回答”模型,从而解决复杂的分类问题。

📋 行动清单

  • 理解公式:确保能独立写出信息增益 Gain(S,A)=Entropy(S)−∑wiEntropy(Si)Gain(S, A) = Entropy(S) - \sum w_i Entropy(S_i) 并说明每一项的含义。
  • 手动计算:针对一个简单的3-5个样本的二分类例子,自己设计一个属性分割,并完整计算其信息增益。
  • 思考延伸:信息增益总是越大越好吗?是否存在某种情况下,单纯追求最大信息增益会带来问题?(这将引出了我们后续要讨论的“过拟合”和“剪枝”概念)。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第6章课件:经典机器学习模型 II(决策树)
    下载
  • 第6章代码包
    下载