知识点深化 · 决策树
决策树:信息增益与 Gini 分裂
决策树就是一连串「如果…就…」的问答:是晴天吗?→ 有风吗?→ 去玩。每个节点问一个特征,每个叶子给一个结论。这一页讲清楚它怎么选特征分裂——ID3 信息增益、C4.5 增益率、CART 的 Gini 系数三者的区别。
① 小白第一课怎么学(4 步走,约 60 分钟)
决策树就是一连串"如果…就…"的问答。按这四步走:
1看图建立直觉(10 分钟)
读第②③部分:看一个树形图怎么从根节点一路问到叶子出结论。
2记分裂指标(15 分钟)
读第④部分:熵、信息增益、增益率、Gini,三者分别对应 ID3/C4.5/CART。
3手算例题(20 分钟)
精读第⑤部分,跟着算一遍熵和信息增益。
4刷题+纠错(15 分钟)
做第⑦⑩部分,错题回到第⑥部分高频错误里找原因。
本课小目标学完你要能:① 说出决策树选分裂特征的依据;② 手算一个数据集的熵和信息增益;③ 区分 ID3/C4.5/CART。
② 一图看懂:决策树全地图
读法:中心是"决策树",四大块——树结构、分裂指标(熵/增益/增益率/Gini)、剪枝;下方是应用和易错。
③ 本质直觉:玩 20 个问题猜东西
决策树就像玩"20 个问题"猜东西:我心里想个动物,你问"是哺乳动物吗?"→ 是/否 → 再问"会飞吗?"……一路缩小范围,最后猜出答案。
每个节点就是一个问题:"这个特征取什么值?"答案分几支,每支继续问下一个问题,直到叶子节点给出最终类别。
核心问题:先问哪个特征?当然是先问"最能缩小范围"的那个。比如猜动物,先问"是哺乳动物吗"比先问"它有几根脚趾"强多了——前者一分为二信息量巨大,后者几乎没帮助。
怎么量化"最能缩小范围"?用纯度:一个集合里如果全是同一类,就"纯"了,不用再分;如果混杂,就还得问。熵就是衡量混杂程度的指标:越纯熵越低,越杂熵越高。每次分裂选"让子节点熵下降最多"的那个特征——这就是信息增益。
三种分裂指标的区别ID3 用信息增益(偏爱取值多的特征,比如 ID 号每个值都唯一,增益最大但没用);C4.5 改进为增益率(除以特征自身的熵,惩罚多值特征);CART 用 Gini 系数(计算更快,只做二叉树,既能分类也能回归)。
④ 完整体系与公式表
熵(Entropy)——衡量混杂程度
熵
H(S) = − Σk pk · log2 pk
pk 是集合 S 中第 k 类样本的比例。全是一类 p=1,H=0(最纯);各类各半 H=1(最杂,二分类)。
信息增益(Information Gain)——ID3 用
信息增益
Gain(S, A) = H(S) − Σv (|Sv|/|S|) · H(Sv)
分裂后加权熵比原来低了多少。增益越大,这个特征分裂得越"值"。
增益率(Gain Ratio)——C4.5 用
增益率
GainRatio(S, A) = Gain(S, A) / IV(A), IV(A) = −Σ (|Sv|/|S|)·log2(|Sv|/|S|)
IV(A) 是特征 A 自身的"内在信息",取值越多 IV 越大。除以它就惩罚了 ID3 偏爱多值特征的毛病。
Gini 系数——CART 用
Gini
Gini(S) = 1 − Σk pk²
从集合里随机抽两个样本,类别不一样的概率。越小越纯。不用对数,计算快,sklearn 默认就是 CART。
三种算法对照
| 算法 | 分裂指标 | 树型 | 支持任务 | 特点 |
| ID3 | 信息增益 | 多叉 | 分类 | 偏爱多值特征 |
| C4.5 | 增益率 | 多叉 | 分类 | 修正 ID3 偏差 |
| CART | Gini / 平方误差 | 二叉 | 分类+回归 | sklearn 默认 |
Python 代码片段
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='gini', max_depth=3).fit(X, y)
⑤ 用法场景与典型例题
例1(基础·算熵)集合 S 有 4 个正例、4 个负例,求 H(S)
二分类,p₁=p₂=0.5。
① H = −(0.5·log₂0.5 + 0.5·log₂0.5)。
② log₂0.5 = −1。
③ H = −(0.5×(−1) + 0.5×(−1)) = −(−1) = 1 bit。
答案:H=1,最杂的状态。
例2(信息增益)S 有 8 样本(4 正 4 负)。用特征 A 分裂成两支:支1 有 2 正 0 负(2个),支2 有 2 正 4 负(6个)。求 Gain(S,A)
先算原熵,再算加权子熵,相减。
① 原 H(S)=1(上题)。
② 支1:p=1.0,H=0。支2:p正=2/6=1/3, p负=2/3,H=−(1/3·log₂1/3 + 2/3·log₂2/3) ≈ −(−0.528−0.390)=0.918。
③ 加权子熵 = (2/8)×0 + (6/8)×0.918 = 0.689。
④ Gain = H(S) − 加权 = 1 − 0.689 = 0.311。
答案:信息增益 0.311,A 这个特征有一定区分度。
例3(Gini)集合 S 有 3 正 1 负,求 Gini(S)
套 Gini=1−Σp²。
① p正=3/4=0.75,p负=1/4=0.25。
② Gini = 1 − (0.75² + 0.25²) = 1 − (0.5625 + 0.0625) = 1 − 0.625 = 0.375。
答案:Gini=0.375。Gini 越小越纯;全是一类时 Gini=0。
决策树为什么容易过拟合树会一直分到每个叶子只剩一个样本——把训练数据"背"下来了,新数据一来就错。所以要剪枝:限制 max_depth、min_samples_split。
⑥ 高频错误诊断(4 条)
错误 1:树不剪枝任其生长max_depth 不限制,树会深到上百层,训练准确率 100%、测试 60%。对策:设 max_depth=3~10,或 min_samples_split≥10。
错误 2:把 ID 类特征(编号)拿来分裂ID 号每个值只对应一个样本,信息增益最大(分裂后每支都纯),但毫无泛化意义。C4.5 的增益率就是为了压制这种特征。
错误 3:类别不平衡时不处理90% 负例,树会全猜负类。要加 class_weight='balanced' 或采样。
错误 4:以为决策树对异常点不敏感其实很敏感——一个异常点可能分裂出一个全新分支,改变整棵树结构。这也是为什么随机森林要用很多棵树平均来稳。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 熵/Gini 手算 | 给各类比例算纯度 | 套公式,全一类=0 |
| 信息增益 | 给分裂前后算 Gain | H(原)−加权H(子) |
| 三算法对比 | 问 ID3/C4.5/CART 区别 | 增益/增益率/Gini |
| 剪枝与过拟合 | 树太深怎么办 | max_depth、min_samples |
真题基础1. 决策树选择分裂特征的依据是?
真题中档2. CART 决策树默认使用什么分裂指标?
真题中档3. ID3 算法的主要缺点是?
真题拔高4. 一个节点全是同一类(10 个正例),它的熵和 Gini 分别是?
⑧ 必背公式卡
熵:H(S)=−Σ pk·log₂pk 越纯越小,最杂=1
信息增益:Gain=H(S)−Σ (|Sᵛ|/|S|)·H(Sᵛ) ID3,越大越好
增益率:GainRatio=Gain/IV(A) C4.5,惩罚多值特征
Gini:Gini(S)=1−Σ pk² CART,越小越纯
选特征:每步挑增益最大/Gini 最小的 贪心
叶子:多数投票定类别(分类)/取均值(回归) CART 也能回归
铁律:必须剪枝(max_depth/min_samples)否则过拟合 树不能长太深
⑨ 应用输出:用决策树做放贷风控
建模场景:银行放贷是否批准
银行有历史客户数据:年收入、工龄、负债比、是否有房,标签 y=1 表示违约、y=0 正常还款。
① 选模型:风控要可解释(为什么拒贷要跟客户说清楚),决策树是首选。
② 训练:DecisionTreeClassifier(max_depth=3).fit(X_train, y_train)。
③ 长出的树可能是:根节点问"负债比 > 0.4?"→ 是→问"年收入 < 10 万?"→ 是→叶子"违约高,拒贷"。
④ 新客户:负债比 0.5、年收入 8 万 → 一路走到"拒贷"叶子。
⑤ 可解释:拒贷理由可以直接说:"您负债比超过 40% 且年收入低于 10 万",客户能听懂。
⑥ 评估:max_depth=3 限制树深,测试集 AUC=0.82,平衡了准确率和可解释性。
口述训练思路合上课本说一遍:"每个节点挑让熵/Gini 降最多的特征分裂,分到纯或达到停止条件;树深了就剪枝;好处可解释,坏处单棵树易过拟合。"
⑩ 分层练习 18 题(基础 6 + 中档 6 + 拔高 6)
▍基础 6 题
基础1决策树每个节点做什么?
选一个特征做分裂条件,把样本分到不同分支。
基础2熵衡量什么?
集合的混杂/不纯度。越纯熵越低。
基础3全是同一类的节点熵是多少?
0。已经纯了,不用再分。
基础5CART 用什么指标?
Gini 系数(分类时);回归用平方误差。
基础6决策树叶子节点在分类时怎么定类别?
多数投票,少数服从多数。
▍中档 6 题
中档7集合 5 正 5 负,熵大约多少?
p=0.5, H=−2×0.5×log₂0.5=1 bit。
中档8Gini=0 说明什么?
节点完全纯净,所有样本同类。
中档9C4.5 为什么用增益率而不是信息增益?
信息增益偏爱取值多的特征(如 ID 号),增益率除以 IV(A) 修正这个偏差。
中档10max_depth=3 是什么意思?
树最多长 3 层就停,是预剪枝手段,防过拟合。
中档11决策树能做回归吗?
能。CART 可以做回归树,叶子输出该节点样本的均值。
中档12为什么说决策树可解释?
每一步都是 if-else 规则,可以画出来、读出来,不像黑箱模型。
▍拔高 6 题
拔高13原节点熵 0.97,分裂后两支加权熵 0.5,信息增益多少?
Gain=0.97−0.5=0.47,增益很大。
拔高14训练准确率 100%、测试 55%,怎么调?
过拟合。减小 max_depth、增大 min_samples_split、后剪枝。
拔高15类别 90% 正、10% 负,全猜正类准确率 90%,树会怎样?
树会偏向多数类,几乎不识别少数类。加 class_weight='balanced' 或采样。
拔高16预剪枝和后剪枝区别?
预剪枝:生长过程中就停止(max_depth);后剪枝:先长完再从底往上删对验证集无益的分支。
拔高17为什么单棵决策树对异常点敏感?
一个异常点可能改变分裂点,进而改变整棵树结构。这是引入随机森林的动机之一。
拔高18信息增益和 Gini 在选特征上结果一定相同吗?
不一定。两者都是纯度度量但数值不同,排序可能略有差异,但通常选出的 top 特征大致一致。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① 决策树就是问答链,根到叶出结论。
② 熵是杂度增益降,Gini 不用算对数;ID3 增益 C4.5 率,CART 二叉 Gini 量。
③ 树深必剪防过拟合,可解释是最大优点。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③④,手算 3 个熵值 | 全一类=0,各半=1 |
| 第 2 天 | 背公式卡 + 做基础 1-6 | 基础全对 |
| 第 3 天 | 做中档 7-12,手算一次信息增益 | Gain 算对 |
| 第 4 天 | 做拔高 13-18,对比三算法 | 说出 ID3/C4.5/CART 区别 |
| 第 5 天 | 做⑦真题 4 题 | 限时每题 2 分钟 |
| 第 6-7 天 | 合上书口述三句口诀,画一棵小决策树 | 不看资料全默对 |
← 返回算法与AI总览