信息增益
itle = ‘信息增益’ description = ‘用最通俗的方式理解决策树的“选题原则”,探索信息增益在机器学习中的核心作用。’ tags = [‘机器学习’, ‘信息增益’, ‘决策树’, ‘数据科学’] +++
信息增益:用最通俗的方式理解决策树的“选题原则”
什么是信息增益?
想象你正在玩“二十个问题”的游戏,你要通过一系列的“是/否”问题猜出朋友心里想的东西。每一次提问的目标,都是尽可能多地缩小范围,让你离答案更近一步。
信息增益(Information Gain),就是衡量一个问题(特征)能帮我们减少多少“不确定性”的指标。在机器学习中,尤其是决策树算法里,信息增益用来决定“下一个分支该问哪个问题”。
生活中的例子:猜水果游戏
假设你要猜朋友手里的水果,桌上有苹果、香蕉、西瓜和柠檬。你可以问:
- “是红色的吗?”(苹果、西瓜)
- “是圆的吗?”(苹果、西瓜、柠檬)
- “皮能直接吃吗?”(苹果、香蕉、柠檬)
不同的问题,能帮你排除的选项数量不同,信息增益也不同。
信息增益最大的问题,是最能缩小范围的问题。
用房间凌乱比喻“熵”
在信息论里,我们用**熵(entropy)**来表示“混乱程度”或者“不确定性”。
- 熵高 = 很混乱(不知道具体是什么)
- 熵低 = 很有序(很容易猜到)
每问一个有效的问题,熵就会降低。
信息增益的计算公式
信息增益 = 提问题前的熵 - 提问题后的加权平均熵
公式表达:
$$ \text{信息增益} = H(\text{原始集合}) - \sum_{i=1}^n \frac{|S_i|}{|S|} H(S_i) $$其中:
- $H(S)$ 表示集合 $S$ 的熵
- $S_i$ 表示根据某特征划分后的每个子集
- $|S_i|/|S|$ 是每个子集占总集合的比例
通俗计算步骤
- 算原始熵:整体有多乱?
- 按某个特征分组:比如按“颜色”分成红色、黄色、绿色三个组。
- 算分组后的加权熵:每组内还有多少不确定性?组有多大就权重多大。
- 两者作差:分得越干净,信息增益越大!
案例:是否出门
假设你有一周的天气记录和出门决策:
天气 | 是否出门 |
---|---|
晴 | 是 |
晴 | 是 |
雨 | 否 |
阴 | 是 |
雨 | 否 |
1. 计算原始熵
有3次“是”,2次“否”:
$$ H(\text{原始}) = -\frac{3}{5}\log_2\frac{3}{5} - \frac{2}{5}\log_2\frac{2}{5} \approx 0.971 $$2. 按“天气”分组
- “晴”:2次“是”
- “雨”:2次“否”
- “阴”:1次“是”
每一组的熵都是0(组内只有一种决策)。
3. 加权平均熵
$$ H(\text{分组}) = \frac{2}{5} \times 0 + \frac{2}{5} \times 0 + \frac{1}{5} \times 0 = 0 $$4. 信息增益
$$ \text{信息增益} = 0.971 - 0 = 0.971 $$这说明“天气”这个特征把数据分得非常干净,是最佳分割特征。
决策树的选题原则
每次分叉,都选信息增益最大的特征来分。
- 信息增益大:分出去的子集越“纯”,决策越容易。
- 信息增益小:分出去还是很乱,没啥帮助。
可视化理解
import matplotlib.pyplot as plt
def plot_information_gain():
fig, ax = plt.subplots(figsize=(8, 4))
ax.bar(["分组前", "分组后"], [0.97, 0], color=['skyblue', 'lightgreen'])
ax.set_title("信息增益 = 分组前的熵 - 分组后的熵")
ax.set_ylabel("熵 (混乱度)")
for index, value in enumerate([0.97, 0]):
ax.text(index, value + 0.05, f"{value:.2f}", ha='center', fontsize=12)
plt.show()
# 运行这个plot_information_gain()可以看到直观对比
信息增益和剪枝
注意:如果分得太细,每个分组都只剩一个样本,决策树容易过拟合。这时可以用剪枝、最小分割样本数等方法限制树的生长。
总结
- 信息增益衡量一个特征能帮我们减少多少不确定性,越大越好。
- 决策树每次选择信息增益最大的特征来分裂节点。
- 信息增益的本质:每问一个好问题,世界就变得更有条理。
一句话理解
信息增益,就是每次提问能帮你“减少混乱”的程度。