决策树
决策树构建流程:
准备工作 | 选择特征 | 创建分支 | 是否终止 | 结果生成 |
---|---|---|---|---|
明确自变量和因变量 确定信息度量的方式 确定终止条件 | 得到当前待处理子集 计算所有特征信息度量 得到当前最佳分类特征 | 根据选中特征 将当前记录分成不同分支 分支个数取决于算法 | 判断是否满足终止条件 满足则退出循环 不满足则继续递归调用 | 判断是否需要剪枝 需要则进行适当修剪 不需要则为最终结果 |
例:根据现有的电脑购买记录,对购买者建模。该模型可以基于客户的一些信息预测他是否会购买电脑。
观察数据,明确自变量和因变量
自变量:年龄、收入层次、是否单身、信用等级
因变量:是否购买电脑
明确信息度量方式
常用的信息度量方式有熵和基尼系数,这里选择熵。
信息熵
信息熵:信息混乱程度的度量,信息论里的概念,由香农提出,描述混乱程度的度量,取值范围0、1,值越大,越混乱。
计算公式:
H
(
U
)
=
E
[
−
l
o
g
p
i
]
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(U)=E[-logp_i]=-\sum^n_{i=1}p_ilogp_i
H(U)=E[−logpi]=−∑i=1npilogpi
例:有一堆苹果和梨共100个,随机拿出一个,拿出的是哪种?
1. 50个苹果+50个梨子
2. 0个苹果+100个梨子
3. 80个苹果+20个梨子
E1 = -50/100log(50/100,2)-50/100log(50/100,2)=1(混乱程度最高)
E2 = -100/100log(100/100,2)=0(混乱程度最低)
E3 = -20/100log(20/100,2)-80/100*log(80/100,2)=0.722
信息增益
信息增益是确定性的增加,是从一个状态到另一个状态信息的变化,信息增益越大,对确定性贡献越大。
例:搜集了几种植物果实的颜色和味道,根据这两个信息确定是否为水果。
名称 | 颜色 | 是否甜 | 是否是水果 |
---|---|---|---|
西红柿 | 红 | 否 | 否 |
黄瓜 | 绿 | 否 | 否 |
苹果 | 红 | 是 | 是 |
提子 | 红 | 是 | 是 |
一:不考虑任何特征, 直接去估计结果。其中,两个是水果,两个不是水果,概论均为2/4
E
=
−
2
/
4
∗
l
o
g
(
2
/
4
,
2
)
−
2
/
4
∗
l
o
g
(
2
/
4
,
2
)
=
1
E=-2/4*log(2/4,2)-2/4*log(2/4,2)=1
E=−2/4∗log(2/4,2)−2/4∗log(2/4,2)=1
二:考虑以颜色为参考信息,判断是否为水果。其中,红色的有3个,2个是水果,1个不是,绿色的都不是,概率分别为:2/3,1/3以及1,0
E
=
3
/
4
∗
(
−
2
/
3
∗
l
o
g
(
2
/
3
,
2
)
−
1
/
3
∗
l
o
g
(
1
/
3
,
2
)
)
+
1
/
4
∗
(
−
1
∗
l
o
g
(
1
,
2
)
)
=
0.689
E=3/4*(-2/3*log(2/3,2)-1/3*log(1/3,2))+1/4*(-1*log(1,2))=0.689
E=3/4∗(−2/3∗log(2/3,2)−1/3∗log(1/3,2))+1/4∗(−1∗log(1,2))=0.689
三:考虑以味道为参考信息,判断是否为水果。其中,甜味的2个全是水果,不甜的2个全不是水果,概率分别为:1,0以及0,1
E
=
2
/
4
∗
(
−
2
/
2
∗
l
o
g
(
2
/
2
,
2
)
)
+
2
/
4
∗
(
−
2
/
2
∗
l
o
g
(
2
/
2
,
2
)
)
=
0
E =2/4*(-2/2*log(2/2,2))+2/4*(-2/2*log(2/2,2))=0
E=2/4∗(−2/2∗log(2/2,2))+2/4∗(−2/2∗log(2/2,2))=0
单纯考虑颜色的信息增益:1-0.689=0.311
单纯考虑味道的信息增益:1-0=1
基于这个数据集,我们想判断是否为水果时,应优先考虑信息增益大的特征——味道。
明确分支终止条件
常用的分支终止条件有:(这里选择纯度)
- 纯度:数据集内结果一致停止循环
- 记录条数:数据集内记录条数等于或小于规定的记录条数时停止循环
- 循环次数:循环一定次数后停止
构建决策树
第一级特征选择
计算整体的熵:
熵
整
体
=
−
5
14
l
o
g
2
5
14
−
9
14
l
o
g
2
9
14
=
0.940286
熵_{整体}=-\dfrac{5}{14}log_2\dfrac{5}{14}-\dfrac{9}{14}log_2\dfrac{9}{14}=0.940286
熵整体=−145log2145−149log2149=0.940286
计算年龄的熵:
熵
年
龄
=
5
14
(
−
3
5
l
o
g
2
3
5
−
2
5
l
o
g
2
2
5
)
+
4
14
(
−
4
4
l
o
g
2
4
4
)
+
5
14
(
−
3
5
l
o
g
2
3
5
−
2
5
l
o
g
2
2
5
)
=
0.694
熵_{年龄}=\dfrac{5}{14}(-\dfrac{3}{5}log_2\dfrac{3}{5}-\dfrac{2}{5}log_2\dfrac{2}{5})+\dfrac{4}{14}(-\dfrac{4}{4}log_2\dfrac{4}{4})+\dfrac{5}{14}(-\dfrac{3}{5}log_2\dfrac{3}{5}-\dfrac{2}{5}log_2\dfrac{2}{5})=0.694
熵年龄=145(−53log253−52log252)+144(−44log244)+145(−53log253−52log252)=0.694
计算收入层次的熵:
熵
收
入
=
4
14
(
−
2
4
l
o
g
2
2
4
−
2
4
l
o
g
2
2
4
)
+
6
14
(
−
4
6
l
o
g
2
4
6
−
2
6
l
o
g
2
2
6
)
+
4
14
(
−
3
4
l
o
g
2
3
4
−
1
4
l
o
g
2
1
4
)
=
0.911
熵_{收入}=\dfrac{4}{14}(-\dfrac{2}{4}log_2\dfrac{2}{4}-\dfrac{2}{4}log_2\dfrac{2}{4})+\dfrac{6}{14}(-\dfrac{4}{6}log_2\dfrac{4}{6}-\dfrac{2}{6}log2\dfrac{2}{6})+\dfrac{4}{14}(-\dfrac{3}{4}log_2\dfrac{3}{4}-\dfrac{1}{4}log_2\dfrac{1}{4})=0.911
熵收入=144(−42log242−42log242)+146(−64log264−62log262)+144(−43log243−41log241)=0.911
计算是否单身的熵:
熵
是
否
单
身
=
7
14
(
−
6
7
l
o
g
2
6
7
−
1
7
l
o
g
2
1
7
)
+
7
14
(
−
4
7
l
o
g
2
4
7
−
3
7
l
o
g
2
3
7
)
=
0.788
熵_{是否单身}=\dfrac{7}{14}(-\dfrac{6}{7}log_2\dfrac{6}{7}-\dfrac{1}{7}log_2\dfrac{1}{7})+\dfrac{7}{14}(-\dfrac{4}{7}log_2\dfrac{4}{7}-\dfrac{3}{7}log_2\dfrac{3}{7})=0.788
熵是否单身=147(−76log276−71log271)+147(−74log274−73log273)=0.788
计算信用等级的熵:
熵
信
用
等
级
=
8
14
(
−
2
8
l
o
g
2
2
8
−
6
8
l
o
g
2
6
8
)
+
6
14
(
−
3
6
l
o
g
2
3
6
−
3
6
l
o
g
2
3
6
)
=
0.892
熵_{信用等级}=\dfrac{8}{14}(-\dfrac{2}{8}log_2\dfrac{2}{8}-\dfrac{6}{8}log_2\dfrac{6}{8})+\dfrac{6}{14}(-\dfrac{3}{6}log_2\dfrac{3}{6}-\dfrac{3}{6}log_2\dfrac{3}{6})=0.892
熵信用等级=148(−82log282−86log286)+146(−63log263−63log263)=0.892
计算信息增益:
基于年龄的信息增益=0.94-0.694=0.246
基于收入的信息增益=0.94-0.911=0.029
基于单身的信息增益=0.94-0.788=0.152
基于信用的信息增益=0.94-0.892=0.048
基于年龄的信息增益最大,即当前最佳特征,第一级特征选择年龄
产生分支
年龄的取值有三种:青少年、中年、老年,按这三种分成三个数据子集
第二级特征选择
首先看青少年分支,看是否满足终止条件,不满足则继续选择当前最佳特征。
计算熵和信息增益
熵
整
体
(
青
少
年
)
=
0.971
熵_{整体(青少年)}=0.971
熵整体(青少年)=0.971
熵
收
入
(
青
少
年
)
=
0.4
;
信
息
增
益
=
0.571
熵_{收入(青少年)}=0.4;信息增益=0.571
熵收入(青少年)=0.4;信息增益=0.571
熵
单
身
(
青
少
年
)
=
0
;
信
息
增
益
=
0.971
熵_{单身(青少年)}=0;信息增益=0.971
熵单身(青少年)=0;信息增益=0.971
熵
信
用
(
青
少
年
)
=
0.951
;
信
息
增
益
=
0.02
熵_{信用(青少年)}=0.951;信息增益=0.02
熵信用(青少年)=0.951;信息增益=0.02
第二级特征选择单身,拆分数据集
满足终止条件,退出分支
两个分支的整体熵均为0,纯度已满足退出条件
继续计算其他分支
青少年分支已经全部处理完了,接下来看中年分支
首先判断是否满足终止条件,可以看到,它的整体熵为0,纯度已满足退出条件
中年分支也已经处理完了,接下来处理老年分支
判断是否满足终止条件,不满足则选择当前最佳特征
计算熵和信息增益
熵
整
体
(
老
年
)
=
0.971
熵_{整体(老年)}=0.971
熵整体(老年)=0.971
熵
收
入
(
老
年
)
=
0.951
;
信
息
增
益
=
0.02
熵_{收入(老年)}=0.951;信息增益=0.02
熵收入(老年)=0.951;信息增益=0.02
熵
单
身
(
老
年
)
=
0.951
;
信
息
增
益
=
0.02
熵_{单身(老年)}=0.951;信息增益=0.02
熵单身(老年)=0.951;信息增益=0.02
熵
信
用
(
老
年
)
=
0
;
信
息
增
益
=
0.971
熵_{信用(老年)}=0;信息增益=0.971
熵信用(老年)=0;信息增益=0.971
第二级特征选择信用,拆分数据集
两个分支的整体熵均为0,纯度满足退出条件
此时,所有分支都已经处理完了
生成结果
其他决策树算法
ID3系列算法
-
ID3(Iterative Dichotomiser 3,迭代树三代):
- 核心是信息熵,根据信息增益决定树的节点,但存在以下问题:
- 信息度量不合理:倾向于选择取值多的字段
- 输入类型但一:离散型
- 不做剪枝,容易过拟合 C4.5:相比于ID3的改进:
- 使用信息增益率代替信息增益
- 能对连续属性进行离散化,对不完整数据进行处理
- 能进行剪枝 C50:相比于C4.5的改进:
- 使用了Boosting
- 前修剪、后修剪
还有一种常见的决策树的分类方法
CART 分类回归树
- 其核心是基尼系数(Gini)
- 分类是二叉树
- 支持连续值和离散值
- 后剪枝进行修剪
- 支持回归,可以预测连续值
对比
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 |
---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 支持 | 支持 | 支持 |
CART | 分类、回归 | 二叉树 | 基尼系数 | 支持 | 支持 | 支持 |