决策树之信息熵简介
1 课程概览
本课讲解ID3决策树的核心概念——信息熵。信息熵表示随机变量不确定度的度量,大白话是数据的混乱程度。数据越乱熵越大,越规整熵越小。讲解信息熵的计算公式和示例。
2 核心概念与定义
- 信息熵(Entropy):随机变量不确定度的度量。
- 数据混乱程度:数据越乱熵越大,越规整熵越小。
- 信息增益:熵减去条件熵。
- ID3决策树:根据信息增益划分节点。
3 算法与模型详解
3.1 信息熵定义
专业定义:在信息论中,表示随机变量不确定度的度量
大白话:数据的混乱程度
特点:
- 数据越规整 → 熵越小
- 数据越乱 → 熵越大
- 熵越大 → 不确定度越高,信息越多
- 熵越小 → 不确定性越低
3.2 信息增益
公式: $$\text{信息增益} = \text{熵} - \text{条件熵}$$
作用:ID3决策树根据信息增益划分节点
规则:信息增益越大,越优先参考
3.3 信息熵计算公式
公式: $$H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$$
说明:
- $p_i$:第i个分类的占比
- $\log_2$:以2为底的对数
- 负号:保证结果为正
- $\sum$:求和,每个分类都要算
计算步骤:
- 计算每个分类的占比 $p_i$
- 计算 $\log_2 p_i$
- 计算 $-p_i \log_2 p_i$
- 对所有分类求和
3.4 信息熵计算示例
数据Alpha:8个数据,8种分类(A, B, C, D, E, F, G, H)
计算:
- 每个分类占比:$p_i = 1/8$
- $H(\alpha) = -8 \times \frac{1}{8} \log_2 \frac{1}{8}$
计算过程: $$\log_2 \frac{1}{8} = \log_2 8^{-1} = -\log_2 8 = -3$$
$$H(\alpha) = -8 \times \frac{1}{8} \times (-3) = -1 \times (-3) = 3$$
结果:$H(\alpha) = 3$
数据Beta:8个数据,2种分类(A: 4个, B: 4个)
计算:
- A占比:$p_A = 4/8 = 1/2$
- B占比:$p_B = 4/8 = 1/2$
$$H(\beta) = -\frac{1}{2} \log_2 \frac{1}{2} - \frac{1}{2} \log_2 \frac{1}{2}$$
$$= -\frac{1}{2} \times (-1) - \frac{1}{2} \times (-1) = \frac{1}{2} + \frac{1}{2} = 1$$
结果:$H(\beta) = 1$
3.5 熵的比较
| 数据 | 分类数 | 熵 | 说明 |
|---|---|---|---|
| Alpha | 8种 | 3 | 数据混乱 |
| Beta | 2种 | 1 | 数据规整 |
结论:
- Alpha熵=3 > Beta熵=1
- Alpha数据更混乱
- Beta数据更规整
4 数学原理与推导
4.1 信息熵公式
$$H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$$
4.2 信息增益
$$\text{Gain}(D, A) = H(D) - H(D|A)$$
其中:
- $H(D)$:数据集D的熵
- $H(D|A)$:在特征A条件下D的熵(条件熵)
4.3 对数计算
$$\log_2 \frac{1}{8} = \log_2 8^{-1} = -\log_2 8 = -3$$
$$\log_2 \frac{1}{2} = \log_2 2^{-1} = -\log_2 2 = -1$$
5 代码示例
import numpy as np
def entropy(labels):
"""计算信息熵"""
# 统计每个分类的数量
_, counts = np.unique(labels, return_counts=True)
# 计算每个分类的占比
probabilities = counts / len(labels)
# 计算熵: -sum(p * log2(p))
ent = -np.sum(probabilities * np.log2(probabilities))
return ent
# 1. 数据Alpha:8个数据,8种分类
alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(f"Alpha数据: {alpha}")
print(f"Alpha熵: {entropy(alpha)}") # 3.0
# 2. 数据Beta:8个数据,2种分类(A:4, B:4)
beta = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']
print(f"\nBeta数据: {beta}")
print(f"Beta熵: {entropy(beta)}") # 1.0
# 3. 更规整的数据
gamma = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']
print(f"\nGamma数据: {gamma}")
print(f"Gamma熵: {entropy(gamma)}") # 0.0
# 4. 不同混乱程度的数据对比
print("\n=== 不同混乱程度的熵 ===")
datasets = {
'完全混乱(8类)': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
'较混乱(4类)': ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
'较规整(2类)': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'完全规整(1类)': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']
}
for name, data in datasets.items():
ent = entropy(data)
print(f"{name}: 熵={ent:.4f}")
# 5. 信息增益计算示例
def information_gain(parent, left_child, right_child):
"""计算信息增益"""
# 父节点的熵
parent_entropy = entropy(parent)
# 子节点的加权熵
n = len(parent)
n_left = len(left_child)
n_right = len(right_child)
children_entropy = (n_left / n) * entropy(left_child) + (n_right / n) * entropy(right_child)
# 信息增益 = 父节点熵 - 子节点加权熵
return parent_entropy - children_entropy
# 示例:根据某个特征划分数据
parent = ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D']
left = ['A', 'A', 'B', 'B'] # 划分后的左子节点
right = ['C', 'C', 'D', 'D'] # 划分后的右子节点
ig = information_gain(parent, left, right)
print(f"\n信息增益: {ig:.4f}")
输出示例:
Alpha数据: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Alpha熵: 3.0
Beta数据: ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']
Beta熵: 1.0
Gamma数据: ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A']
Gamma熵: 0.0
=== 不同混乱程度的熵 ===
完全混乱(8类): 熵=3.0000
较混乱(4类): 熵=2.0000
较规整(2类): 熵=1.0000
完全规整(1类): 熵=0.0000
信息增益: 1.0000
6 重难点与易错提醒
- ❗重点:信息熵表示数据的混乱程度。
- ❗重点:数据越乱熵越大,越规整熵越小。
- ❗重点:信息熵公式:$H(X) = -\sum p_i \log_2 p_i$。
- ❗重点:信息增益 = 熵 - 条件熵。
- ⚠️易错:忘记负号。
- ⚠️易错:对数底数用错(必须用2)。
- 💡深入理解:信息增益越大,说明该特征对分类越重要。
7 课堂问答精选
Q: 什么是信息熵?
A: 信息熵是随机变量不确定度的度量,大白话是数据的混乱程度:
- 数据越规整,熵越小
- 数据越乱,熵越大
- 完全规整的数据熵为0
- 完全混乱的数据熵最大
Q: 如何计算信息熵?
A: 信息熵公式:$H(X) = -\sum p_i \log_2 p_i$ 计算步骤:
- 计算每个分类的占比 $p_i$
- 计算 $\log_2 p_i$
- 计算 $-p_i \log_2 p_i$
- 对所有分类求和 例如:8个数据8种分类,每个占比1/8,熵 = -8 × (1/8) × log2(1/8) = 3
8 本课小结
- 信息熵:数据混乱程度的度量。
- 公式:$H(X) = -\sum p_i \log_2 p_i$。
- 特点:数据越乱熵越大,越规整熵越小。
- 信息增益:熵 - 条件熵。
- ID3:根据信息增益划分节点。
9 延伸思考与实践
- 实践:用Python计算不同数据的信息熵。
- 预习:信息增益计算。
- 思考:为什么信息增益越大,特征越重要?