决策树完全指南:从ID3到随机森林,原理、剪枝与实战图解
“步步为营,有章可循”——决策树以人类可理解的“提问-决策”逻辑,成为机器学习中最直观的算法之一。从判断“是否购买某套房”(根节点:价格≤100万?→内部节点:面积≥80㎡?→叶节点:买/不买),到复杂的医疗诊断,决策树通过层层划分实现精准分类或回归。
本文将系统拆解决策树的核心原理、主流算法(ID3/C4.5/CART)、剪枝策略与集成扩展(随机森林),用图解和代码揭示其“简单结构解决复杂问题”的核心逻辑。
一、决策树的基本结构:像“流程图”一样做决策
决策树的结构模拟人类做决策的过程,由节点和分支组成,核心是通过“特征测试”将数据逐步细分,最终落到代表决策结果的叶节点。
1.1 核心组件
- 根节点:树的起点,包含全部训练样本(如“所有待判断是否购买的房屋”)。
- 内部节点:特征测试条件(如“价格≤100万?”“房龄≤5年?”),每个内部节点对应一个特征。
- 叶节点:最终决策结果(分类问题为类别标签,如“买”;回归问题为连续值,如“预测房价120万”)。
- 分支:连接节点的路径,代表特征测试的结果(如“是”→左分支,“否”→右分支)。
1.2 决策过程示例
以“是否贷款给申请人”为例,决策树的判断流程如下:
- 根节点:测试“收入≥10万/年?”
- 是→进入左子节点(测试“有无房产?”);
- 否→进入右子节点(测试“征信是否良好?”)。
- 左子节点(有房产?):
- 是→叶节点“贷款”;
- 否→叶节点“拒绝”。
- 右子节点(征信良好?):
- 是→叶节点“贷款”;
- 否→叶节点“拒绝”。
图示1:决策树结构示意图
[根节点:收入≥10万/年?]
├─ 是 → [内部节点:有无房产?]
│ ├─ 是 → [叶节点:贷款]
│ └─ 否 → [叶节点:拒绝]
└─ 否 → [内部节点:征信良好?]
├─ 是 → [叶节点:贷款]
└─ 否 → [叶节点:拒绝]
核心目标:通过特征测试的层级划分,使最终叶节点中的样本尽可能“纯”(即属于同一类别或数值接近)。
二、决策树的构建:贪心递归的“三步法”
决策树的训练过程是自上而下、贪心递归的划分过程,核心包括三个步骤:特征选择→树生成→剪枝。
2.1 第一步:特征选择——选“最能区分样本”的特征
特征选择的目标是找到“划分后子节点纯度提升最大”的特征。衡量纯度的指标主要有熵(信息增益)、信息增益比和基尼系数。
(1)熵与信息增益(ID3算法)
- 熵(Entropy):衡量样本集合的“混乱程度”,值越小纯度越高。
对包含K
个类别的样本集D
,熵的计算公式为:
H(D)=−∑k=1Kpklog2pkH(D) = -\sum_{k=1}^K p_k \log_2 p_kH(D)=−k=1∑Kpklog2pk
其中p_k
是第k
类样本在D
中的占比。- 若所有样本属于同一类(纯节点),
H(D)=0
; - 若两类样本各占50%(最混乱),
H(D)=1
(二分类场景)。
- 若所有样本属于同一类(纯节点),
- 信息增益(Information Gain):划分后熵的减少量,反映特征对纯度的提升能力。
用特征A
将D
划分为V
个子集{D_1, D_2, ..., D_V}
,信息增益为:
Gain(D,A)=H(D)−∑v=1V∣Dv∣∣D∣H(Dv)\text{Gain}(D, A) = H(D) - \sum_{v=1}^V \frac{|D_v|}{|D|} H(D_v)Gain(D,A)=H(D)−v=1∑V∣D∣