第五章 决策树
目录
1.决策树简介
2.ID3决策树
3.C4.5决策树
4.CART决策树
5.案例泰坦尼克号生存预测
6.CART回归树
7.决策树 剪枝
2-信息增益 3-信息增益率 4- GiNi 基尼值 6-和传统回归的区别 4.5-掌握 2346-面试了解
1 、决策树简介
一、生活中的决策树
二、决策树是一种树形结构
树中的内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果
三、决策树的建立过程
1.特征选择:选取有较强分类能力的特征
2.决策树生成:根据选择的特征生成决策树
3.决策树也易过拟合,采用剪枝的方法环节过拟合
四、思考
1.女孩相亲过程中,更看重那些特征?
年龄>长相>收入>是否公务员
2.机器学习算法中,选择数据集中的那些特征进行分裂,会更好呢?
2、ID3决策树
2.1 熵
一、ID3 决策树核心思想
- ID3 决策树通过信息增益来决定用哪个特征进行划分。
- 信息增益 = 熵 − 条件熵
- 信息增益越大,特征越优先作为划分节点。
二、熵(信息熵)是什么
- 熵(entropy)表示数据的不确定度 / 混乱程度。
- 数据越规整 → 熵越小
数据越混乱 → 熵越大
大白话:熵就是数据的混乱程度。
三、熵的计算公式
- pi:第 i个类别在数据中出现的比例(分类占比)
- 对所有类别求和,前面加负号
例子 1(8 个数据,A/B/C/D/E/F/G 各出现 1 次)
例子 2(8 个数据:A 出现 4 次,B 出现 2 次,C 出现 1 次,D 出现 1 次)
计算结果为1.75
四、Python 快速计算熵
方法一:终端 / Python 命令行
frommathimportlog log(8,2)# 以2为底8的对数 = 3.0方法二:PyCharm 的 Python Console / Terminal
- Terminal:输入
python进入交互模式 - Python Console:直接使用
frommathimportlog# 计算例子2-0.5*log(0.5,2)-0.25*log(0.25,2)-0.125*log(0.125,2)*2结果:1.75
五、练习题与答案
1. 三个类别,各占 1/3
2. 占比 1/10、2/10、7/10
3. 全部属于同一类(占比 1)
说明:纯节点熵为 0。
六、信息增益定义
- 信息增益:特征 A 对训练集 D 的信息增益,记作 g(D, A)
- 公式:
g(D, A) = H(D) - H(D| A) - H(D) :数据集的信息熵(混乱程度)
- H(D | A) :给定特征 A 下的条件熵
大白话:用了特征 A 之后,数据的不确定性减少了多少。
2.2 信息增益
一、条件熵的计算公式
- D_v:特征 A 取值为 v 的子集
- |D_v|/|D|:该子集的占比(分类占比)
- H(D_v):该子集内部的信息熵
条件熵 = 每个分支的占比 × 该分支的熵,再求和。
三、完整计算案例
已知数据(6个样本)
| 特征 A | 目标 |
|---|---|
| 阿尔法 | A |
| 阿尔法 | A |
| 阿尔法 | A |
| 阿尔法 | B |
| 贝塔 | B |
| 贝塔 | B |
- 汇总:阿尔法 4 个(3A + 1B),贝塔 2 个(0A + 2B)
- 总体:3A + 3B
第一步:计算信息熵 H(D)
因为 A 和 B 各占 1/2,熵 = 1。
第二步:计算条件熵 H(D|A)
2.1 阿尔法分支的熵 H(D_阿尔法)
数据集:3A + 1B(共4个)
2.2 贝塔分支的熵H(D_贝塔)
数据集:0A + 2B(共2个,全是 B)
2.3 条件熵
第三步:计算信息增益
g(D, A) = H(D) - H(D|A) = 1 - 0.54 = 0.46
四、ID3 决策树构建流程
- 计算每个特征的信息增益
- 选择信息增益最大的特征作为当前节点
- 根据该特征的不同取值,将数据集拆分成若干子集
- 对每个子集重复上述步骤(剩余特征继续计算信息增益)
- 直到:
- 子集中所有样本属于同一类别 → 停止,设为叶节点
- 没有特征可用 → 停止,取多数类
五、案例中的树结构
特征 A ├── 阿尔法(3A + 1B)→ 还会继续分裂 └── 贝塔(0A + 2B)→ 全是B,停止(叶节点)- 贝塔分支不再分裂(熵 = 0)
- 阿尔法分支需要继续计算剩余特征的信息增益
六、一句话总结
信息增益 = 熵 − 条件熵
ID3 = 每次找信息增益最大的特征来分裂数据。
2.3 ID3树构建
一、核心回顾
- ID3 核心思想:每次选择信息增益最大的特征作为节点
- 信息增益 = 信息熵 − 条件熵
- 信息熵:衡量数据混乱程度
- 条件熵:给定特征后剩余的不确定性
二、案例背景
数据集:论坛客户流失数据(15个样本)
| 性别 | 活跃度 | 是否流失(1=流失,0=未流失) |
|---|---|---|
| 男 | 高 | 0 |
| 女 | 中 | 0 |
| … | … | … |
目标:判断“性别”和“活跃度”哪个对流失影响更大,并构建决策树。
三、计算步骤
第一步:计算信息熵 H(D)
- 总样本:15个
- 流失(1):5个
- 未流失(0):10个
第二步:计算“性别”的条件熵 H(D|性别)
2.1 男分支(8个样本)
- 男中流失:3个
- 男中未流失:5个
2.2 女分支(7个样本)
- 女中流失:2个
- 女中未流失:5个
2.3 条件熵
H(D|性别) =8/15* H(男) +7/15*H(女)=0.9748
2.4 信息增益
g(D,性别) = 0.9812 - 0.9748 = 0.0064
第三步:计算“活跃度”的条件熵 H(D|活跃度)
活跃度分三类:高、中、低
3.1 高(6个样本)
- 全是未流失(0)
H(高) = 0
3.2 中(5个样本)
- 流失1个,未流失4个
3.3 低(4个样本)
- 全是流失(1)
H(低) = 0
3.4 条件熵
H(D|活跃度) =6/150 +5/15H(中) +4/15*0=0.6776
3.5 信息增益
g(D,活跃度) = 0.9812 - 0.6776 = 0.3036
四、比较与结论
| 特征 | 信息增益 |
|---|---|
| 性别 | 0.0064 |
| 活跃度 | 0.3036 |
- 活跃度的信息增益更大 → 对流失影响更大
- 根节点选择:活跃度
五、决策树构建结果
活跃度 ├── 高 → 非流失(全0) ├── 中 → 按性别继续划分 │ ├── 女 → 非流失(全0) │ └── 男 → 流失/非流失混合(需继续或停止) └── 低 → 流失(全1)中活跃度 + 男的情况可能还需要进一步分裂(本例中因数据少可停止或作为叶节点)
六、重要结论(选择题考点)
决策树:
- 每个内部节点 = 判断条件
- 每个叶节点 = 结果
- 可以明确特征重要程度 ✅
信息熵:
- 熵越大 → 数据越混乱
- 数据越一致 → 熵越小
信息增益:
- ID3 核心
- 增益越大 → 特征越重要
- 对类别多的特征更青睐(但须注意过拟