决策树
1. 决策树简介
决策树算法从有类标号的训练元组中,根据数据属性采用树状结构建立决策模型。
决策树中每个内部节点表示在一个属性上的测试,每个分支代表该测试上的一个输出,每个树叶节点存放一个类标号,直观看上去就像判断模块和终止块组成的流程图,判断模块表示对一个特征取值的判断,终止块表示分类结果。
决策树分类器的构造不需要任何领域知识或参数设置,适合探索式知识发现,可处理高维数据,表示直观易被理解,是许多商业规则归纳系统的基础。
如下表记录已有的用户是否还贷的相关信息:
根据该数据,构建的决策树如下:
对于一个新用户:无房产,单身,年收入6.5万,根据上述决策树,可以判断无法还贷(红色路径)。从上面的决策树,还可以知道是否拥有房产可以很大程度决定用户是否可以偿还贷款,对借贷业务具有指导意义。
2 熵
信息熵
熵的概念首先由德国物理学家鲁道夫·克劳修在热力学中引入,用于度量一个热力学系统的无序程度。
- 熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;
- 熵越小,系统越有序,意味着具有确定和有规则的运动状态。
更多例子: - 热水的热量会传到空气中,最后使得温度一致
- 整理好的耳机线放进口袋,下次再拿出来已经乱了。让耳机线乱掉的看不见的“力”就是熵力,耳机线喜欢变成更混乱
- 一根弹簧的力,就是熵力。 胡克定律其实也是一种熵力的表现。万有引力也是熵力的一种
1948年,C.E. Shannon 在《A Mathematical Theory of Communication》第一次提出了信息熵。
- **信息熵(Entropy)**是信息的不确定性(Uncertainty)的度量,不确定性越大,信息熵越大。
- 信息用来消除事件的不确定性,即消除熵=获取信息。消除熵可以通过调整事件概率、排除干扰或直接确定来消除。
一条信息消除的事件的不确定性越大(熵减越大),它蕴含的信息量越大。
信息量的大小跟随机事件的概率有关:
- 越小概率的事情(不确定性越大)发生了(熵减越大)产生的信息量越大,如湖南地震;
- 越大概率的事情(不确定性越小)发生了(熵减越小)产生的信息量越小,如太阳从东边升起。
因此,信息的量度应该依赖于事件的概率分布 p ( x ) p(x) p(x)。
(1)定义
H
=
−
∑
x
p
(
x
)
log
p
(
x
)
H= -\sum\limits_{x} p(x)\log p(x)
H=−x∑p(x)logp(x)
其中,
p
(
x
)
p(x)
p(x)为随机变量
X
X
X的概率密度函数。使用以2为底的对数函数,单位为bit。
对于离散型随机变量:
H
=
−
∑
i
=
1
n
P
(
x
i
)
log
P
(
x
i
)
H= -\sum\limits_{i=1}^{n} P(x_{i})\log P(x_{i})
H=−i=1∑nP(xi)logP(xi)
0
≤
H
(
X
)
≤
log
2
N
0 \leq H(X) \leq \log_2N
0≤H(X)≤log2N,
N
N
N是系统
S
S
S中的事件总数,当且仅当
X
X
X均匀分布(
p
1
=
p
2
=
.
.
.
=
p
N
p_1=p_2=...=p_N
p1=p2=...=pN),系统的熵达到最大值
log
2
N
\log_2N
log2N(不确定性最大)。
如对于两点分布, H = − p log p − ( 1 − p ) log ( 1 − p ) H=-p\log p - (1-p)\log(1-p) H=−plogp−(1−p)log(1−p),当 p = 0.5 p=0.5 p=0.5时, H H H取得最大值1bit。
(2)举例
- e.g.1
- 随机抛掷1枚硬币1次,有2种可能结果: H = − ∑ i = 1 2 1 2 log 2 1 2 = 1 b i t H= -\sum\limits_{i=1}^{2} \frac{1}{2} \log_2 \frac{1}{2} = 1bit H=−i=1∑221log221=1bit;
- 抛掷3次,有8中可能结果: H = − ∑ i = 1 8 1 8 log 2 1 8 = 3 b i t H= -\sum\limits_{i=1}^{8} \frac{1}{8} \log_2 \frac{1}{8} = 3bit H=−i=1∑881log281=3bit
- e.g.2 A/B/C/D 四个选项:
- 无法确定是哪个选项为正确选项,此时的熵: H = − ∑ i = 1 4 1 4 log 2 1 4 = 2 b i t H= -\sum\limits_{i=1}^{4} \frac{1}{4} \log_2 \frac{1}{4} = 2bit H=−i=1∑441log241=2bit
- 知道A不是正确选项后的熵: H A = − ∑ i = 1 3 1 3 log 2 1 3 = 1.585 b i t H_A= -\sum\limits_{i=1}^{3} \frac{1}{3} \log_2 \frac{1}{3} = 1.585 bit HA=−i=1∑331log231=1.585bit
- A不是正确选项提供的信息量: H − H A = 0.415 b i t H-H_A = 0.415 bit H−HA=0.415bit
3. 构建决策树
决策树算法的基本思想是以信息熵为度量构造一颗熵值下降最快的树,叶子节点处熵值为零。属性的信息增益越大,对样本的熵减少的能力更强,使得数据由不确定性变确定性的能力越强。
采用自顶向下的递归方法,具体算法如下
输入:训练数据集D,属性列表A
def createTree(D,A):
创建一个节点N
if D中样本属于同一类别C:
返回N作为C类叶节点
return
if A为空:
返回N作为叶节点,标记为D中样本数最多的类
return
使用划分准侧选择最优划分属性a
A_sub = 从属性集A中删除属性a
for 属性a的每个取值a_v:
D_v = D中在属性a取值为a_v的样本集
if D_v 为空:
增加一个叶节点到节点N,标记为D中样本数最多的类
else:
增加由createTree(D_v,A_sub)返回的节点到N
return
4. 划分准则
假设样本集合 D D D的属性 a a a有 v v v个可能取值 { a 1 , a 2 , . . . , a v } \{a_1,a_2,...,a_v\} {a1,a2,...,av},若使用属性 a a a对 D D D进行划分,可得到 v v v个子集 { D 1 , D 2 , . . . , D v } \{D_1,D_2,...,D_v\} {D1,D2,...,Dv},其中 D j D_j Dj中包含 D D D中属性 a a a取值为 a j a_j aj的数据。
4.1 信息增益(Information Gain)
选择具有最高信息增益的属性作为节点的分裂属性,信息增益准则对可取值数目较多的属性有所偏好。
代表算法:ID3 (Iterative Diochotomiser 3)
信息增益定义为原来的信息需求(仅基于各个类占比)与新的信息需求(对
A
A
A划分后)之间的差,使用属性
a
a
a对集合
D
D
D进行划分所获得信息增益计算如下:
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
E
n
t
a
(
D
)
=
E
n
t
(
D
)
−
∑
j
=
1
v
∣
D
j
∣
∣
D
∣
E
n
t
(
D
j
)
Gain(D,a) = Ent(D)-Ent_a(D)=Ent(D)-\sum_{j=1}^v \frac{|D_j|}{|D|}Ent(D_j)
Gain(D,a)=Ent(D)−Enta(D)=Ent(D)−j=1∑v∣D∣∣Dj∣Ent(Dj)定义数据集
D
D
D如下:
dataSet = [[1,1,'Y'],
[1,1,'Y'],
[1,0,'N'],
[0,1,'N'],
[0,1,'N']]
data = pd.DataFrame(dataSet,columns=['Col1','Col2','label'])
E
n
t
(
D
)
=
−
2
5
l
o
g
2
2
5
−
3
5
l
o
g
2
3
5
=
0.97
Ent(D) = -\frac{2}{5}log_2\frac{2}{5}-\frac{3}{5}log_2\frac{3}{5}=0.97
Ent(D)=−52log252−53log253=0.97
计算基于Col1和Col2的信息增益如下:
4.2 增益率(Gain Ratio)
选择具有最大增益率(Gain Ratio)的属性作为节点的分裂属性,增益率准则对可取值数目较少的属性有所偏好。
代表算法:C4.5(使用启发式算法,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的)。
增益率使用分裂信息(Split Infomation)将信息增益规范化,定义如下:
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
S
p
l
i
t
E
n
t
a
(
D
)
Gain\_ratio(D,a) = \frac{Gain(D,a)}{SplitEnt_a(D)}
Gain_ratio(D,a)=SplitEnta(D)Gain(D,a)
其
中
,
S
p
l
i
t
E
n
t
a
=
−
∑
j
=
1
v
∣
D
j
∣
∣
D
∣
l
o
g
2
(
∣
D
j
∣
∣
D
∣
)
其中, SplitEnt_a=-\sum_{j=1}^v \frac{|D_j|}{|D|}log_2(\frac{|D_j|}{|D|})
其中,SplitEnta=−j=1∑v∣D∣∣Dj∣log2(∣D∣∣Dj∣)
4.3 基尼指数(Gini index)
选择最小基尼指数(Gini index)的属性作为节点的分裂属性。
代表算法:CART(Classification And Regression Tree)
基尼系数度量样本集合
D
D
D的不纯度,定义如下:
G
i
n
i
(
D
)
=
∑
i
=
1
k
∑
i
≠
i
′
p
i
p
i
′
=
1
−
∑
i
=
1
k
p
i
2
Gini(D)=\sum_{i=1}^k\sum_{i \neq i'}p_ip_i'= 1-\sum_{i=1}^k p_i^2
Gini(D)=i=1∑ki=i′∑pipi′=1−i=1∑kpi2其中,数据集
D
D
D中
i
i
i类样本所占比例为
p
i
(
i
=
1
,
2
,
.
.
.
,
k
)
p_i(i=1,2,...,k)
pi(i=1,2,...,k)
G
i
n
i
(
D
)
Gini(D)
Gini(D)反映了从数据集
D
D
D中随机抽取两个样本,类别不一致的概率,
G
i
n
i
(
D
)
Gini(D)
Gini(D)越小,数据集
D
D
D的纯度越高。在候选属性集合中,选择使划分后基尼指数最小的属性作为最有划分属性。
算法比较
算法 | 特征选择 | 树结构 | 分类 | 回归 | 连续值 | 缺失值 | 剪枝 |
---|---|---|---|---|---|---|---|
ID3 | 信息增益 | 多叉树 | √ | ||||
C4.5 | 增益率 | 多叉树 | √ | √ | √ | √ | |
CART | 基尼系数 | 二叉树 | √ | √ | √ | √ | √ |