行莫
行莫
发布于 2025-12-11 / 7 阅读
0
0

决策树ID3算法

决策树ID3算法

目录

  1. 引言:决策树是什么?
  2. 第一部分:核心概念基础
  3. 第二部分:信息熵详解
  4. 第三部分:条件熵与信息增益
  5. 第四部分:ID3算法原理
  6. 第五部分:完整实例演示
  7. 第六部分:决策树构建过程详解
  8. 第七部分:ID3算法的优缺点
  9. 总结与回顾

引言:决策树是什么?

生活中的决策过程

想象你是一位医生,需要根据病人的症状来判断是否患有某种疾病。你的决策过程可能是这样的:

如果 发烧 = 是:
    如果 咳嗽 = 是:
        如果 头痛 = 是:
            诊断:可能是流感
        否则:
            诊断:可能是普通感冒
    否则:
        诊断:可能是其他疾病
否则:
    如果 咳嗽 = 是:
        诊断:可能是过敏
    否则:
        诊断:需要进一步检查

这就是一个决策树!它通过一系列"如果...那么..."的判断,最终得出结论。

什么是决策树?

决策树(Decision Tree)是一种监督学习算法,用于分类和回归任务。它通过一系列规则对数据进行分类,这些规则形成了一个树状结构:

  • 根节点(Root Node):树的顶部,包含所有数据
  • 内部节点(Internal Node):表示一个特征或属性
  • 叶节点(Leaf Node):表示最终的分类结果
  • 分支(Branch):表示一个决策规则

为什么需要ID3算法?

构建决策树的关键问题是:如何选择最佳的特征进行分裂?

ID3(Iterative Dichotomiser 3)算法使用信息增益来选择最优特征,而信息增益基于信息熵的概念。

类比理解:

  • 信息熵:衡量数据的"混乱程度"或"不确定性"
  • 信息增益:衡量使用某个特征后,不确定性减少了多少
  • 选择信息增益最大的特征,就是选择最能"减少混乱"的特征

第一部分:核心概念基础

1.1 决策树的基本结构

决策树由节点和边组成:

         [根节点:所有数据]
              |
        [特征A = ?]
         /      \
    [值1]      [值2]
     /            \
[子节点1]      [子节点2]
     |              |
[特征B = ?]    [叶节点:类别1]
  /      \
[值1]  [值2]
 |       |
[类别2] [类别3]

1.2 数据集表示

在机器学习中,数据集通常表示为:

样本ID特征1特征2...特征m类别
1$x_{11}$$x_{12}$...$x_{1m}$$y_1$
2$x_{21}$$x_{22}$...$x_{2m}$$y_2$
..................
n$x_{n1}$$x_{n2}$...$x_{nm}$$y_n$

1.3 信息论基础

ID3算法基于信息论,核心概念包括:

  • 信息量(Information):事件发生的不确定性
  • 信息熵(Entropy):所有可能事件的平均信息量
  • 条件熵(Conditional Entropy):在已知某个条件下,事件的不确定性
  • 信息增益(Information Gain):使用特征后,不确定性减少的量

第二部分:信息熵详解

2.1 信息量的定义

信息量:事件 $x$ 发生的信息量定义为:

$$
I(x) = -\log_2 P(x)
$$

其中 $P(x)$ 是事件 $x$ 发生的概率。

理解:

  • 概率越小的事件,信息量越大(越意外,信息越多)
  • 概率为1的事件,信息量为0(确定发生,没有信息)
  • 使用 $\log_2$ 是为了让信息量以"比特"为单位

例子:

  • 抛硬币正面朝上:$P = 0.5$,$I = -\log_2(0.5) = 1$ 比特
  • 太阳从东方升起:$P \approx 1$,$I \approx 0$ 比特

概率的取值范围:
概率 $P(x)$ 的取值范围是 $[0, 1]$:
$P(x) = 1$:事件必然发生
$P(x) = 0$:事件不可能发生
$P(x) = 0.5$:事件发生的可能性中等

对数函数的性质:
当 $P(x) \in [0, 1]$ 时,$\log_2 P(x)$ 的值:
如果 $P(x) = 1$,则 $\log_2(1) = 0$
如果 $P(x) = 0.5$,则 $\log_2(0.5) = -1$
如果 $P(x) = 0.25$,则 $\log_2(0.25) = -2$
如果 $P(x) = 0$,则 $\log_2(0) = -\infty$
关键观察:$\log_2 P(x)$ 在 $[0, 1]$ 区间内是负数或零。

信息量的直观要求:
我们希望信息量满足:
概率越大 → 信息量越小(常见事件,信息量小)
概率越小 → 信息量越大(罕见事件,信息量大)
信息量应该是非负数(便于度量)

负号的作用:
不加负号:$\log_2 P(x)$ 在 $[0, 1]$ 上是负数或零,且概率越大值越大(与直觉相反)
加负号:$-\log_2 P(x)$ 在 $[0, 1]$ 上是非负数,且概率越大值越小(符合直觉)

具体例子:

事件概率 $P(x)$$\log_2 P(x)$$-\log_2 P(x)$ (信息量)直观解释
1.0 (必然发生)00 比特没有信息,因为已经确定
0.5 (抛硬币)-11 比特需要1位来表示结果
0.25 (4选1)-22 比特需要2位来表示结果
0.125 (8选1)-33 比特需要3位来表示结果
0.01 (罕见)≈ -6.64≈ 6.64 比特罕见事件,信息量大

数学验证:
当 $P(x) = 1$:$-\log_2(1) = 0$(必然事件,信息量为 0)
当 $P(x) = 0.5$:$-\log_2(0.5) = 1$(需要 1 比特)
当 $P(x) \to 0$:$-\log_2 P(x) \to +\infty$(极罕见事件,信息量极大)

2.2 信息熵的定义

信息熵:衡量随机变量的不确定性,定义为所有可能事件的信息量的期望值:

$$
H(X) = -\sum_{i=1}^{n} P(x_i) \log_2 P(x_i)
$$

其中:

  • $X$ 是随机变量
  • $x_i$ 是 $X$ 的第 $i$ 个可能取值
  • $P(x_i)$ 是 $x_i$ 发生的概率
  • $n$ 是可能取值的数量

2.3 信息熵的性质

  1. 非负性:$H(X) \geq 0$
  2. 确定性:当某个 $P(x_i) = 1$ 时,$H(X) = 0$(完全确定,无不确定性)
  3. 对称性:概率分布的顺序不影响熵值
  4. 最大值:当所有事件概率相等时,熵达到最大值

最大熵定理:
对于 $n$ 个可能的事件,当 $P(x_i) = \frac{1}{n}$ 对所有 $i$ 成立时,熵达到最大值:

$$
H_{max}(X) = \log_2 n
$$

2.4 信息熵的直观理解

信息熵衡量数据的"混乱程度":

  • 熵 = 0:数据完全纯净,所有样本属于同一类
  • 熵 = 最大值:数据完全混乱,各类别均匀分布
  • 熵越大:数据越混乱,越难分类

例子:
假设有10个样本,分类为"是"或"否":

情况"是"的数量"否"的数量熵值
情况1100$H = 0$(完全确定)
情况255$H = 1$(最大混乱)
情况382$H \approx 0.72$(较确定)
情况437$H \approx 0.88$(较混乱)

2.5 信息熵的计算示例

示例1:二分类问题

假设数据集 $D$ 中有14个样本:

  • 9个属于类别"是"(正类)
  • 5个属于类别"否"(负类)

计算信息熵:

$$
P(是) = \frac{9}{14} = 0.643
$$

$$
P(否) = \frac{5}{14} = 0.357
$$

$$
H(D) = -P(是) \log_2 P(是) - P(否) \log_2 P(否)
$$

$$
H(D) = -0.643 \times \log_2(0.643) - 0.357 \times \log_2(0.357)
$$

$$
H(D) = -0.643 \times (-0.637) - 0.357 \times (-1.485)
$$

$$
H(D) = 0.410 + 0.530 = 0.940
$$

示例2:三分类问题

假设数据集 $D$ 中有15个样本:

  • 5个属于类别A
  • 5个属于类别B
  • 5个属于类别C

计算信息熵:

$$
P(A) = P(B) = P(C) = \frac{5}{15} = \frac{1}{3}
$$

$$
H(D) = -\sum_{i=A,B,C} P(i) \log_2 P(i)
$$

$$
H(D) = -3 \times \frac{1}{3} \times \log_2\left(\frac{1}{3}\right)
$$

$$
H(D) = -\log_2\left(\frac{1}{3}\right) = \log_2(3) \approx 1.585
$$


第三部分:条件熵与信息增益

3.1 条件熵的定义

条件熵:在已知随机变量 $Y$ 的条件下,随机变量 $X$ 的不确定性:

$$
H(X|Y) = -\sum_{j=1}^{m} P(y_j) \sum_{i=1}^{n} P(x_i|y_j) \log_2 P(x_i|y_j)
$$

其中:

  • $Y$ 是条件变量(通常是特征)
  • $X$ 是目标变量(通常是类别)
  • $P(y_j)$ 是 $Y = y_j$ 的概率
  • $P(x_i|y_j)$ 是在 $Y = y_j$ 条件下 $X = x_i$ 的条件概率

简化形式(在决策树中):

$$
H(D|A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v)
$$

其中:

  • $D$ 是数据集
  • $A$ 是特征
  • $V$ 是特征 $A$ 的可能取值数量
  • $D_v$ 是特征 $A$ 取值为 $v$ 的子集
  • $|D_v|$ 是子集 $D_v$ 的样本数量
  • $|D|$ 是数据集 $D$ 的样本数量

3.2 条件熵的直观理解

条件熵衡量:在已知某个特征的情况下,类别的不确定性

  • 条件熵 = 0:使用该特征后,类别完全确定
  • 条件熵 = 原始熵:该特征对分类没有帮助
  • 条件熵越小:该特征对分类的帮助越大

3.3 信息增益的定义

信息增益:使用特征 $A$ 后,信息熵的减少量:

$$
Gain(D, A) = H(D) - H(D|A)
$$

其中:

  • $H(D)$ 是数据集 $D$ 的原始信息熵
  • $H(D|A)$ 是使用特征 $A$ 后的条件熵

3.4 信息增益的直观理解

信息增益衡量:使用某个特征后,不确定性减少了多少

  • 信息增益 = 0:该特征对分类没有帮助
  • 信息增益 = 原始熵:该特征能完全确定类别
  • 信息增益越大:该特征对分类的帮助越大

ID3算法的核心思想:
选择信息增益最大的特征作为分裂特征!

3.5 信息增益的计算步骤

步骤1: 计算数据集 $D$ 的信息熵 $H(D)$

步骤2: 对于每个特征 $A$:

  • 计算特征 $A$ 的每个取值 $v$ 对应的子集 $D_v$
  • 计算每个子集的信息熵 $H(D_v)$
  • 计算条件熵:$H(D|A) = \sum_{v} \frac{|D_v|}{|D|} H(D_v)$

步骤3: 计算信息增益:$Gain(D, A) = H(D) - H(D|A)$

步骤4: 选择信息增益最大的特征


第四部分:ID3算法原理

4.1 ID3算法的基本思想

ID3算法采用自顶向下的贪心策略构建决策树:

  1. 从根节点开始,包含所有训练样本
  2. 选择最优特征:计算每个特征的信息增益,选择信息增益最大的特征
  3. 分裂节点:根据选定的特征,将数据分成多个子集
  4. 递归构建:对每个子集递归执行步骤2-3
  5. 停止条件
    • 所有样本属于同一类别
    • 没有剩余特征可用
    • 信息增益小于阈值

4.2 ID3算法的伪代码

函数 ID3(数据集D, 特征集A):
    如果 D中所有样本属于同一类别:
        返回 叶节点(类别)
    
    如果 A为空 或 D中所有样本的特征值相同:
        返回 叶节点(D中多数类)
    
    选择信息增益最大的特征 a* = argmax(Gain(D, a))
    
    创建节点,标记为特征 a*
    
    对于特征 a* 的每个取值 v:
        创建分支,对应 D_v = {样本 | 样本的特征a* = v}
        
        如果 D_v 为空:
            添加叶节点(D中多数类)
        否则:
            递归调用 ID3(D_v, A - {a*})
    
    返回 节点

4.3 ID3算法的特点

优点:

  • 算法简单,易于理解
  • 构建的树结构直观,可解释性强
  • 不需要数据预处理(如归一化)
  • 可以处理多分类问题

缺点:

  • 只能处理离散特征
  • 容易过拟合
  • 对噪声敏感
  • 倾向于选择取值较多的特征(信息增益偏向)

第五部分:完整实例演示

5.1 数据集描述

我们使用一个经典的天气预测是否打网球的数据集:

样本ID天气温度湿度风力是否打网球
1
2
3
4
5正常
6正常
7正常
8
9正常
10正常
11正常
12
13正常
14

数据集统计:

  • 总样本数:14
  • 特征:天气、温度、湿度、风力(4个特征)
  • 类别:是否打网球(2个类别:是、否)
  • "是"的数量:9
  • "否"的数量:5

5.2 第一步:计算根节点的信息熵

数据集 $D$ 的信息熵:

$$
P(是) = \frac{9}{14} = 0.643
$$

$$
P(否) = \frac{5}{14} = 0.357
$$

$$
H(D) = -P(是) \log_2 P(是) - P(否) \log_2 P(否)
$$

$$
H(D) = -0.643 \times \log_2(0.643) - 0.357 \times \log_2(0.357)
$$

$$
H(D) = -0.643 \times (-0.637) - 0.357 \times (-1.485)
$$

$$
H(D) = 0.410 + 0.530 = 0.940
$$

根节点信息熵:$H(D) = 0.940$

5.3 第二步:计算各特征的信息增益

5.3.1 特征"天气"的信息增益

特征"天气"的取值: 晴、阴、雨

统计各取值下的样本分布:

天气样本ID"是"数量"否"数量总数
1,2,8,9,11235
3,7,12,13404
4,5,6,10,14325

计算条件熵:

对于"晴":
$$
P(晴) = \frac{5}{14}
$$

$$
H(D_{晴}) = -\frac{2}{5} \log_2\left(\frac{2}{5}\right) - \frac{3}{5} \log_2\left(\frac{3}{5}\right)
$$

$$
H(D_{晴}) = -0.4 \times (-1.322) - 0.6 \times (-0.737) = 0.529 + 0.442 = 0.971
$$

对于"阴":
$$
P(阴) = \frac{4}{14}
$$

$$
H(D_{阴}) = -\frac{4}{4} \log_2\left(\frac{4}{4}\right) - \frac{0}{4} \log_2\left(\frac{0}{4}\right) = 0
$$

(注意:$0 \times \log_2(0) = 0$)

对于"雨":
$$
P(雨) = \frac{5}{14}
$$

$$
H(D_{雨}) = -\frac{3}{5} \log_2\left(\frac{3}{5}\right) - \frac{2}{5} \log_2\left(\frac{2}{5}\right)
$$

$$
H(D_{雨}) = -0.6 \times (-0.737) - 0.4 \times (-1.322) = 0.442 + 0.529 = 0.971
$$

计算条件熵:

$$
H(D|天气) = P(晴) \times H(D_{晴}) + P(阴) \times H(D_{阴}) + P(雨) \times H(D_{雨})
$$

$$
H(D|天气) = \frac{5}{14} \times 0.971 + \frac{4}{14} \times 0 + \frac{5}{14} \times 0.971
$$

$$
H(D|天气) = 0.347 + 0 + 0.347 = 0.694
$$

计算信息增益:

$$
Gain(D, 天气) = H(D) - H(D|天气) = 0.940 - 0.694 = 0.246
$$

5.3.2 特征"温度"的信息增益

特征"温度"的取值: 高、中、低

统计各取值下的样本分布:

温度样本ID"是"数量"否"数量总数
1,2,3,13224
4,8,10,11,14325
5,6,7,9314

计算条件熵:

对于"高":
$$
H(D_{高}) = -\frac{2}{4} \log_2\left(\frac{2}{4}\right) - \frac{2}{4} \log_2\left(\frac{2}{4}\right) = 1.000
$$

对于"中":
$$
H(D_{中}) = -\frac{3}{5} \log_2\left(\frac{3}{5}\right) - \frac{2}{5} \log_2\left(\frac{2}{5}\right) = 0.971
$$

对于"低":
$$
H(D_{低}) = -\frac{3}{4} \log_2\left(\frac{3}{4}\right) - \frac{1}{4} \log_2\left(\frac{1}{4}\right) = 0.811
$$

计算条件熵:

$$
H(D|温度) = \frac{4}{14} \times 1.000 + \frac{5}{14} \times 0.971 + \frac{4}{14} \times 0.811
$$

$$
H(D|温度) = 0.286 + 0.347 + 0.232 = 0.865
$$

计算信息增益:

$$
Gain(D, 温度) = H(D) - H(D|温度) = 0.940 - 0.865 = 0.075
$$

5.3.3 特征"湿度"的信息增益

特征"湿度"的取值: 高、正常

统计各取值下的样本分布:

湿度样本ID"是"数量"否"数量总数
1,2,3,4,8,12,14347
正常5,6,7,9,10,11,13617

计算条件熵:

对于"高":
$$
H(D_{高}) = -\frac{3}{7} \log_2\left(\frac{3}{7}\right) - \frac{4}{7} \log_2\left(\frac{4}{7}\right) = 0.985
$$

对于"正常":
$$
H(D_{正常}) = -\frac{6}{7} \log_2\left(\frac{6}{7}\right) - \frac{1}{7} \log_2\left(\frac{1}{7}\right) = 0.592
$$

计算条件熵:

$$
H(D|湿度) = \frac{7}{14} \times 0.985 + \frac{7}{14} \times 0.592 = 0.493 + 0.296 = 0.789
$$

计算信息增益:

$$
Gain(D, 湿度) = H(D) - H(D|湿度) = 0.940 - 0.789 = 0.151
$$

5.3.4 特征"风力"的信息增益

特征"风力"的取值: 弱、强

统计各取值下的样本分布:

风力样本ID"是"数量"否"数量总数
1,3,4,5,8,9,10,13628
2,6,7,11,12,14336

计算条件熵:

对于"弱":
$$
H(D_{弱}) = -\frac{6}{8} \log_2\left(\frac{6}{8}\right) - \frac{2}{8} \log_2\left(\frac{2}{8}\right) = 0.811
$$

对于"强":
$$
H(D_{强}) = -\frac{3}{6} \log_2\left(\frac{3}{6}\right) - \frac{3}{6} \log_2\left(\frac{3}{6}\right) = 1.000
$$

计算条件熵:

$$
H(D|风力) = \frac{8}{14} \times 0.811 + \frac{6}{14} \times 1.000 = 0.463 + 0.429 = 0.892
$$

计算信息增益:

$$
Gain(D, 风力) = H(D) - H(D|风力) = 0.940 - 0.892 = 0.048
$$

5.4 第三步:选择根节点特征

各特征的信息增益汇总:

特征信息增益
天气0.246
温度0.075
湿度0.151
风力0.048

结论: 特征"天气"的信息增益最大(0.246),因此选择"天气"作为根节点的分裂特征。


第六部分:决策树构建过程详解

6.1 第一层分裂:根节点

根据"天气"特征进行分裂:

                    [根节点:D(14个样本)]
                    H(D) = 0.940
                           |
                    [特征:天气]
                    Gain = 0.246
                    /      |      \
              [晴:5]   [阴:4]   [雨:5]

子集划分:

  • $D_{晴}$(5个样本):样本1,2,8,9,11

    • "是":2个(样本9,11)
    • "否":3个(样本1,2,8)
    • $H(D_{晴}) = 0.971$
  • $D_{阴}$(4个样本):样本3,7,12,13

    • "是":4个
    • "否":0个
    • $H(D_{阴}) = 0$(完全确定,已经是叶节点)
  • $D_{雨}$(5个样本):样本4,5,6,10,14

    • "是":3个(样本4,5,10)
    • "否":2个(样本6,14)
    • $H(D_{雨}) = 0.971$

6.2 第二层分裂:处理"晴"分支

当前数据集: $D_{晴}$(5个样本)

计算信息熵:

$$
H(D_{晴}) = -\frac{2}{5} \log_2\left(\frac{2}{5}\right) - \frac{3}{5} \log_2\left(\frac{3}{5}\right) = 0.971
$$

计算各特征的信息增益(在$D_{晴}$上):

6.2.1 特征"温度"的信息增益

温度样本ID"是"数量"否"数量总数
1,2022
8,11112
9101

$$
H(D_{晴}|温度) = \frac{2}{5} \times 0 + \frac{2}{5} \times 1.000 + \frac{1}{5} \times 0 = 0.400
$$

$$
Gain(D_{晴}, 温度) = 0.971 - 0.400 = 0.571
$$

6.2.2 特征"湿度"的信息增益

湿度样本ID"是"数量"否"数量总数
1,2,8033
正常9,11202

$$
H(D_{晴}|湿度) = \frac{3}{5} \times 0 + \frac{2}{5} \times 0 = 0
$$

$$
Gain(D_{晴}, 湿度) = 0.971 - 0 = 0.971
$$

6.2.3 特征"风力"的信息增益

风力样本ID"是"数量"否"数量总数
1,8,9213
2,11112

$$
H(D_{晴}|风力) = \frac{3}{5} \times 0.918 + \frac{2}{5} \times 1.000 = 0.551 + 0.400 = 0.951
$$

$$
Gain(D_{晴}, 风力) = 0.971 - 0.951 = 0.020
$$

信息增益汇总:

特征信息增益
温度0.571
湿度0.971
风力0.020

结论: 选择"湿度"作为分裂特征(信息增益最大)。

分裂结果:

  • $D_{晴,高}$(3个样本):样本1,2,8

    • "是":0个
    • "否":3个
    • $H = 0$(完全确定,叶节点:否)
  • $D_{晴,正常}$(2个样本):样本9,11

    • "是":2个
    • "否":0个
    • $H = 0$(完全确定,叶节点:是)

6.3 第二层分裂:处理"雨"分支

当前数据集: $D_{雨}$(5个样本)

计算信息熵:

$$
H(D_{雨}) = -\frac{3}{5} \log_2\left(\frac{3}{5}\right) - \frac{2}{5} \log_2\left(\frac{2}{5}\right) = 0.971
$$

计算各特征的信息增益(在$D_{雨}$上):

6.3.1 特征"温度"的信息增益

温度样本ID"是"数量"否"数量总数
4,10,14213
5,6112

$$
H(D_{雨}|温度) = \frac{3}{5} \times 0.918 + \frac{2}{5} \times 1.000 = 0.551 + 0.400 = 0.951
$$

$$
Gain(D_{雨}, 温度) = 0.971 - 0.951 = 0.020
$$

6.3.2 特征"湿度"的信息增益

湿度样本ID"是"数量"否"数量总数
4,14112
正常5,6,10213

$$
H(D_{雨}|湿度) = \frac{2}{5} \times 1.000 + \frac{3}{5} \times 0.918 = 0.400 + 0.551 = 0.951
$$

$$
Gain(D_{雨}, 湿度) = 0.971 - 0.951 = 0.020
$$

6.3.3 特征"风力"的信息增益

风力样本ID"是"数量"否"数量总数
4,5,10303
6,14022

$$
H(D_{雨}|风力) = \frac{3}{5} \times 0 + \frac{2}{5} \times 0 = 0
$$

$$
Gain(D_{雨}, 风力) = 0.971 - 0 = 0.971
$$

信息增益汇总:

特征信息增益
温度0.020
湿度0.020
风力0.971

结论: 选择"风力"作为分裂特征(信息增益最大)。

分裂结果:

  • $D_{雨,弱}$(3个样本):样本4,5,10

    • "是":3个
    • "否":0个
    • $H = 0$(完全确定,叶节点:是)
  • $D_{雨,强}$(2个样本):样本6,14

    • "是":0个
    • "否":2个
    • $H = 0$(完全确定,叶节点:否)

6.4 完整的决策树结构

                        [根节点:D(14个样本)]
                        H(D) = 0.940
                                 |
                        [特征:天气]
                        Gain = 0.246
                        /      |      \
                  [晴:5]   [阴:4]   [雨:5]
                   /           |          \
            [湿度]         [叶节点]      [风力]
            Gain=0.971       是        Gain=0.971
            /      \                    /      \
      [高:3]    [正常:2]          [弱:3]    [强:2]
        |           |                |          |
    [叶节点:否]  [叶节点:是]    [叶节点:是]  [叶节点:否]

6.5 决策树的文本表示

如果 天气 = 阴:
    返回 是
否则如果 天气 = 晴:
    如果 湿度 = 高:
        返回 否
    否则(湿度 = 正常):
        返回 是
否则(天气 = 雨):
    如果 风力 = 弱:
        返回 是
    否则(风力 = 强):
        返回 否

6.6 决策树的ASCII图示

                    ┌─────────────────┐
                    │  根节点(14样本) │
                    │  H(D) = 0.940   │
                    └────────┬────────┘
                             │
                    ┌────────▼────────┐
                    │   特征:天气     │
                    │  Gain = 0.246   │
                    └───┬──────┬──────┘
                        │      │      │
            ┌───────────┘      │      └───────────┐
            │                  │                  │
    ┌───────▼──────┐   ┌──────▼──────┐   ┌───────▼──────┐
    │  晴 (5样本)  │   │  阴 (4样本)  │   │  雨 (5样本)  │
    │ H = 0.971    │   │ H = 0.000    │   │ H = 0.971    │
    └───────┬──────┘   └──────┬──────┘   └───────┬──────┘
            │                 │                  │
            │            ┌────▼────┐             │
            │            │ 叶节点:是│             │
            │            └─────────┘             │
    ┌───────▼────────┐                  ┌───────▼────────┐
    │  特征:湿度     │                  │  特征:风力     │
    │ Gain = 0.971   │                  │ Gain = 0.971   │
    └───┬──────┬─────┘                  └───┬──────┬─────┘
        │      │                            │      │
┌───────▼──┐ ┌─▼───────┐          ┌───────▼──┐ ┌─▼───────┐
│ 高(3样本)│ │正常(2样本)│          │ 弱(3样本)│ │强(2样本)│
│ H = 0.000│ │ H = 0.000│          │ H = 0.000│ │ H = 0.000│
└───────┬──┘ └─┬───────┘          └───────┬──┘ └─┬───────┘
        │      │                          │      │
    ┌───▼───┐ ┌▼────┐                ┌───▼───┐ ┌▼────┐
    │叶:否  │ │叶:是│                │叶:是  │ │叶:否│
    └───────┘ └─────┘                └───────┘ └─────┘

6.7 验证决策树

让我们用几个样本验证决策树:

样本1: 天气=晴, 温度=高, 湿度=高, 风力=弱

  • 路径:天气=晴 → 湿度=高 → ✓(实际:否)

样本3: 天气=阴, 温度=高, 湿度=高, 风力=弱

  • 路径:天气=阴 → ✓(实际:是)

样本5: 天气=雨, 温度=低, 湿度=正常, 风力=弱

  • 路径:天气=雨 → 风力=弱 → ✓(实际:是)

样本6: 天气=雨, 温度=低, 湿度=正常, 风力=强

  • 路径:天气=雨 → 风力=强 → ✓(实际:否)

所有训练样本都能被正确分类!


第七部分:ID3算法的优缺点

7.1 优点

  1. 算法简单直观

    • 易于理解和实现
    • 决策过程清晰,可解释性强
  2. 不需要数据预处理

    • 不需要特征缩放或归一化
    • 可以处理缺失值(需要额外处理)
  3. 可以处理多分类问题

    • 不仅限于二分类
  4. 特征选择明确

    • 基于信息论,有理论支撑
  5. 构建速度快

    • 对于小到中等规模的数据集,构建速度较快

7.2 缺点

  1. 只能处理离散特征

    • 连续特征需要先离散化
    • 这是ID3的主要限制
  2. 容易过拟合

    • 没有剪枝机制
    • 可能生成过于复杂的树
  3. 对噪声敏感

    • 训练数据中的噪声会影响树的结构
  4. 信息增益偏向

    • 倾向于选择取值较多的特征
    • 可能导致不合理的特征选择
  5. 不能处理缺失值

    • 需要预处理缺失值
  6. 不稳定

    • 数据的小幅变化可能导致树结构的显著变化

7.3 改进算法

为了解决ID3的缺点,后续发展出:

  • C4.5算法:使用信息增益比,可以处理连续特征和缺失值
  • CART算法:使用基尼不纯度,可以处理回归问题
  • 剪枝技术:预剪枝和后剪枝,防止过拟合

总结与回顾

核心概念回顾

  1. 信息熵 $H(X)$

    • 衡量数据的不确定性
    • 公式:$H(X) = -\sum_{i=1}^{n} P(x_i) \log_2 P(x_i)$
    • 熵越大,数据越混乱
  2. 条件熵 $H(X|Y)$

    • 在已知条件 $Y$ 下,$X$ 的不确定性
    • 公式:$H(X|Y) = \sum_{j=1}^{m} P(y_j) H(X|y_j)$
    • 条件熵越小,特征对分类的帮助越大
  3. 信息增益 $Gain(D, A)$

    • 使用特征 $A$ 后,不确定性的减少量
    • 公式:$Gain(D, A) = H(D) - H(D|A)$
    • 信息增益越大,特征越重要
  4. ID3算法流程

    • 计算数据集的信息熵
    • 对每个特征计算信息增益
    • 选择信息增益最大的特征进行分裂
    • 递归构建子树
    • 直到满足停止条件

关键公式汇总

信息熵:
$$
H(D) = -\sum_{k=1}^{K} \frac{|C_k|}{|D|} \log_2 \frac{|C_k|}{|D|}
$$

条件熵:
$$
H(D|A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v)
$$

信息增益:
$$
Gain(D, A) = H(D) - H(D|A)
$$

其中:

  • $D$:数据集
  • $C_k$:第 $k$ 个类别的样本集合
  • $A$:特征
  • $D_v$:特征 $A$ 取值为 $v$ 的样本子集
  • $K$:类别数量
  • $V$:特征 $A$ 的取值数量

学习要点

  1. 理解信息熵的物理意义:衡量不确定性,熵越大越混乱
  2. 掌握信息增益的计算:这是ID3算法的核心
  3. 理解递归构建过程:每个节点独立选择最优特征
  4. 注意停止条件:避免无限递归

实际应用建议

  1. 数据预处理:确保特征是离散的
  2. 特征选择:ID3会自动选择重要特征
  3. 过拟合控制:考虑使用剪枝或限制树深度
  4. 模型解释:决策树的可解释性是其优势

延伸学习

  • C4.5算法:改进ID3,处理连续特征
  • CART算法:使用基尼不纯度,支持回归
  • 随机森林:集成多个决策树
  • 剪枝技术:防止过拟合的方法

评论