赞
踩
简书作者:格物致知Lee的文章决策树(Decision Tree)开场对决策树的描述很直观。相亲确实是一个决策的过程,比如女方对男方身高、学历、工作、家庭等特征与自己心里预期进行比较,比较的过程就是一个决策的过程,决策的结果就是女方愿不愿意与男方谈对象。
学习决策树(或者说任何机器学习的算法),我们需要明确三个方面的内容
决策树的每一次决策就是一次分类,而这一次分类可以使用任何方法:
以比大小的分类方法,作为决策树的决策函数举例。
假设,有这样的10个样本:
[
x
1
,
x
2
,
x
3
,
.
.
.
,
x
10
]
[x1,x2,x3,...,x10]
[x1,x2,x3,...,x10]
每个样本有3个特征值
[
w
1
,
w
2
,
w
3
]
[w1,w2,w3]
[w1,w2,w3]
第一层的决策阈值假设为P,当前决策使用w1作为决策函数与阈值P做比较,得出分类结果:
之后,继续使用比大小的方法,选择一个特征值作为决策函数,选择一个阈值与决策函数比较,从而再次将子节点的数据进行分类;如此往复,直到将样本数据全部分开,或者到达指定层数为止。
从上面的方法,我们了解了使用比大小的方法构成的决策树,每一层的参数就是阈值P和决策函数Wi。那么问题来了,我们从三个特征中选择哪一个作为该节点的决策函数呢?我们又应该以多大的阈值去判定决策函数呢?
对于上面使用比大小决策的决策树,求解参数就是选出每个分类节点使用那个特征作为决策函数,那个阈值比较合适。
方法步骤:
评价分类好坏的ID3与C4.5方法,是依据分类前的信息熵和分类后的信息熵作比较得出分类好坏的指标。
什么是信息熵?
−
∑
i
n
p
i
∑
j
m
p
j
l
o
g
2
(
p
j
)
-\sum\limits_{i}^np_i\sum\limits_{j}^mp_jlog_2(p_j)
−i∑npij∑mpjlog2(pj)
p
i
就
是
第
i
类
的
概
率
,
p
j
是
第
i
类
中
j
类
样
本
出
现
的
概
率
p_i就是第i类的概率,p_j是第i类中j类样本出现的概率
pi就是第i类的概率,pj是第i类中j类样本出现的概率
比如:我们有10个样本,在没有进行决策前,计算机认为只有1类,但是每一个样本都是不同类别
所以
n
=
1
n=1
n=1
m
=
10
m=10
m=10
p
i
=
1
p_i=1
pi=1
p
j
=
0.1
p_j=0.1
pj=0.1所以此时,样本的信息熵为
−
∑
i
1
1
∑
j
10
0.1
l
o
g
2
(
0.1
)
=
3.32
-\sum\limits_{i}^{1}1\sum\limits_{j}^{10}0.1log_2(0.1)=3.32
−i∑11j∑100.1log2(0.1)=3.32如果,这10个样本其中有2个是一个类别,其他8个都是不同类别
这时候信息熵的值为
−
∑
i
1
p
i
∑
j
9
p
j
l
o
g
2
(
p
j
)
,
p
i
=
1
,
n
=
1
,
m
=
9
-\sum\limits_{i}^{1}p_i\sum\limits_{j}^{9}p_jlog_2(p_j),p_i=1,n=1,m=9
−i∑1pij∑9pjlog2(pj),pi=1,n=1,m=9
−
2
/
10
l
o
g
2
(
2
/
10
)
−
1
/
10
l
o
g
2
(
1
/
10
)
∗
8
=
3.12
-2/10log_2(2/10)-1/10log_2(1/10)*8=3.12
−2/10log2(2/10)−1/10log2(1/10)∗8=3.12
我们会使用遍历特征和阈值,将样本进行第一次分类,假设有一种方法把10个样本中的x1,x3,x7分为了A类,把x2,x4,x5,x6,x8,x9,x10分为了B类
那么我们再次计算熵,得到如下结果:
A
类
:
p
i
=
3
/
10
,
p
j
=
1
/
3
A类:p_i = 3/10,p_j = 1/3
A类:pi=3/10,pj=1/3
A
类
熵
:
−
∑
i
1
3
/
10
∑
j
3
1
/
3
l
o
g
2
(
1
/
3
)
=
0.48
A类熵:-\sum\limits_{i}^{1}3/10\sum\limits_{j}^{3}1/3log_2(1/3)=0.48
A类熵:−i∑13/10j∑31/3log2(1/3)=0.48
B
类
:
p
i
=
7
/
10
,
p
j
=
1
/
7
B类:p_i = 7/10,p_j = 1/7
B类:pi=7/10,pj=1/7
B
类
熵
:
−
∑
i
1
7
/
10
∑
j
7
1
/
7
l
o
g
2
(
1
/
7
)
=
1.97
B类熵:-\sum\limits_{i}^{1}7/10\sum\limits_{j}^{7}1/7log_2(1/7)=1.97
B类熵:−i∑17/10j∑71/7log2(1/7)=1.97所以,分类后的样本总熵为
0.48
+
1.97
=
2.45
0.48+1.97=2.45
0.48+1.97=2.45
从两次计算的熵来看,分类后的熵要比分类前的熵值小。而熵越小,样本的确定性越高,类别越纯净,已知的信息量会越多。
ID3用到的方法就是计算信息增益(Information Gain),这里的信息就是指已知信息增加的量。
如果按照上面的方法将10个样本分成两类,分类结果的信息增益为:
I
G
=
3.32
−
2.45
=
0.87
IG=3.32-2.45=0.87
IG=3.32−2.45=0.87信息增益的计算公式:
I
G
=
E
(
S
)
−
E
(
S
v
)
IG=E(S)-E(S_v)
IG=E(S)−E(Sv)
所以,在所有分类情况都做了一遍后,用决策前的信息熵和每一种分类结果的信息熵求信息增益,在所有信息增益值中选择最大的那个,其所对应的分类结果就是我们想要的,同时它的参数就是该决策节点需要的参数。
但是,如果数据集中有一些数据特别不合群,而我们通过信息增益去找信息熵最小的情况时,这个节点分出来的种类就会很多(有些分出来的类可能指针对一个数据,而这个数据可能还是一个无效数据),这样训练出来的模型存在过拟合现象。
C4.5是在ID3的基础上改进,就是为了让分类结果不要过多,在一定程度上解决了过拟合问题。用到的方法是信息增益率(Gain Ratio)。从字面意思理解,就是信息增益的变化率。
信息增益率的计算公式:
G
R
=
I
G
/
S
G
GR = IG/SG
GR=IG/SG由上文ID3知道
I
G
=
E
(
S
)
−
E
(
S
v
)
IG=E(S)-E(S_v)
IG=E(S)−E(Sv)
S
G
(
分
裂
熵
)
=
−
∑
j
=
1
m
D
j
/
D
l
o
g
2
(
D
j
/
D
)
SG(分裂熵)= -\sum\limits_{j=1}^mD_j/Dlog_2(D_j/D)
SG(分裂熵)=−j=1∑mDj/Dlog2(Dj/D)
D
j
:
第
j
类
样
本
数
量
(
不
区
分
种
类
)
D_j:第j类样本数量(不区分种类)
Dj:第j类样本数量(不区分种类)
D
:
样
本
总
数
D:样本总数
D:样本总数
以上面ID3的分类结果(初始有10个样本,每个样本都不同类),计算信息增益率
S
G
=
−
3
/
10
l
o
g
2
(
3
/
10
)
−
7
/
10
l
o
g
2
(
7
/
10
)
=
0.88
SG=-3/10log_2(3/10)-7/10log_2(7/10)=0.88
SG=−3/10log2(3/10)−7/10log2(7/10)=0.88
G
R
=
0.87
/
0.88
=
0.988
GR=0.87/0.88=0.988
GR=0.87/0.88=0.988
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。