概述
决策树
- 1 决策树原理
- 1.1 决策树的构造
- 1.2 划分指标
- 1.2.1 信息增益
- 1.2.2 基尼(GINI)系数
- 1.3 决策树种类
- 1.3.1 ID3
- 1.3.2 C4.5
- 1.3.3 CART
- 2 剪枝处理
- 2.1 预剪枝
- 2.2 后剪枝
1 决策树原理
决策树是基于树形结构来进行决策的,目的是产生一颗泛化能力强的决策树,其基本流程遵循简单且直观的分而治之策略。一般的,一颗决策树包含一个根结点、若干内部结点和若干叶结点;其中叶结点对应决策结果,其他结点对应一个属性测试,每个分支代表一个判断结果的输出;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根节点包含样本全部结点。
1.1 决策树的构造
对于训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D={(x_1,y_1),(x_2,y_2),dots,(x_m,y_m)} D={(x1,y1),(x2,y2),…,(xm,ym)}和属性集 A = { a 1 , a 2 , … , a d } A={a_1,a_2,dots,a_d} A={a1,a2,…,ad}
递归构造(D, A):
- 生成结点node;
- 如果 D D D中样本全部属于同一类别 C C C,那么将node标记未 C C C类叶结点,return;(该步是以当前结点所含样本最多的类别划分,注意与第5步区别)
- 如果 A A A为空或者 D D D中样本在 A A A上取值相同,那么将node标记为叶结点,其类别标记为 D D D中样本数最多的类,return;
- *从 A A A中选择最优划分属性 a ∗ a_* a∗(例如,选择属性脐部);
- 遍历
a
∗
a_*
a∗中的每一个属性值
a
∗
v
a_*^v
a∗v(例如脐部属性,属性值有凹陷、稍凹、平坦),并执行如下操作:
为node生成一个分支;
令 D v D_v Dv表示 D D D中在 a ∗ a_* a∗取值为 a ∗ v a_*^v a∗v的样本子集;
如果 D v D_v Dv为空,那么将分支结点标记为叶结点,其类别标记为 D D D中样本最多的类,return(例如,脐部凹陷的样本集为空,直接标记为叶结点,类别为好瓜);(该步是以根节点所含样本最多的类别划分,注意与第2步区别)
否则以 D v D_v Dv和 a ∗ ∉ A {a_*} notin A a∗∈/A 为分支结点,递归构建下一个结点; - 输出以node为根节点的决策树。
1.2 划分指标
从构造过程可知,决策树学习的关键在于第4步,如何选择最优划分属性。因此这里有两个划分指标:信息增益和基尼(GINI)系数。
1.2.1 信息增益
信息增益衡量的是划分前后信息不确定性程度的减小。而“信息熵”是衡量样本集合纯度最常用的一种指标,“信息熵”越小样本集合的纯度越大。因此我们使用“信息熵”来衡量样本的不确定程度,定义为:
H
(
D
)
=
−
∑
k
=
1
∣
y
∣
p
k
l
o
g
p
k
H(D)=-sum_{k=1}^{|y|}p_klogp_k
H(D)=−k=1∑∣y∣pklogpk
其中
k
k
k表示样本的标签,
p
p
p表示该类样本出现的概率。样本集合越纯则
p
k
p_k
pk越大,则
E
n
t
(
D
)
Ent(D)
Ent(D)越小。
在对样本进行划分时,我们选择属性
a
a
a,假设该属性有
v
v
v个可能的取值
{
a
1
,
a
2
,
…
,
a
v
}
{a^1,a^2,dots,a^v}
{a1,a2,…,av},那么依此划分会产生
v
v
v个分支,第
v
v
v个分支的数据集为
D
v
D^v
Dv,由此可计算出每个分支条件下对应的信息熵,即条件熵:
H
(
D
∣
a
)
=
∑
a
v
∈
a
p
(
a
v
)
H
(
D
∣
a
=
a
v
)
=
−
∑
a
v
∈
a
p
(
a
v
)
∑
y
∈
Y
p
(
y
∣
a
v
)
l
o
g
p
(
y
∣
a
v
)
=
−
∑
a
v
∈
a
∑
y
∈
Y
p
(
y
,
a
v
)
l
o
g
p
(
y
∣
a
v
)
=
−
∑
a
v
∈
a
,
y
∈
Y
p
(
y
,
a
v
)
l
o
g
p
(
y
,
a
v
)
p
(
a
v
)
=
∑
a
v
∈
a
,
y
∈
Y
p
(
y
,
a
v
)
l
o
g
p
(
a
v
)
p
(
y
,
a
v
)
H(D|a)=sum_{a^vin a}p(a^v)H(D|a=a^v)\ qquadqquadqquadqquad;=-sum_{a^vin a}p(a^v)sum_{yin Y}p(y|a^v)logp(y|a^v)\ qquadqquadqquad=-sum_{a^vin a}sum_{yin Y}p(y,a^v)logp(y|a^v)\ qquadqquadqquad;=-sum_{a^vin a,yin Y}p(y,a^v)logfrac{p(y,a^v)}{p(a^v)}\ qquadqquadquad=sum_{a^vin a,yin Y}p(y,a^v)logfrac{p(a^v)}{p(y,a^v)}
H(D∣a)=av∈a∑p(av)H(D∣a=av)=−av∈a∑p(av)y∈Y∑p(y∣av)logp(y∣av)=−av∈a∑y∈Y∑p(y,av)logp(y∣av)=−av∈a,y∈Y∑p(y,av)logp(av)p(y,av)=av∈a,y∈Y∑p(y,av)logp(y,av)p(av)
信息增益定义为信息熵与条件熵的差值,即父亲节点的信息熵减去所有子节点归一化条件下的信息熵:
I
G
=
H
(
D
,
a
)
=
H
(
D
)
−
H
(
D
∣
a
)
IG=H(D,a)=H(D)-H(D|a)
IG=H(D,a)=H(D)−H(D∣a)
信息增益IG越大,说明使用该特征划分数据所获得的信息量变化越大,子节点的样本“纯度”越高。
因此,属性选择为:
a
∗
=
a
r
g
m
a
x
a
∈
A
H
(
D
,
a
)
a_* =arg;max_{ain A};H(D,a)
a∗=argmaxa∈AH(D,a)
1.2.2 基尼(GINI)系数
同样的,我们可以使用基尼系数衡量样本集合的不纯度。
G
i
n
i
=
1
−
∑
p
i
2
Gini = 1 - sum{p_i^2}
Gini=1−∑pi2
当我们划分时,计算使用当前属性
a
a
a划分的基尼系数:
G
i
n
i
a
=
∑
a
∈
A
p
(
A
=
a
)
[
1
−
∑
p
i
2
]
Gini_a = sum_{ain A}p(A=a)[1 - sum{p_i^2}]
Ginia=a∈A∑p(A=a)[1−∑pi2]
一般来说,我们选择使得划分后Gini指数最小的特征(注意这里是直接根据Gini指数进行判断,而并非其变化量):
a
∗
=
a
r
g
m
i
n
a
∈
A
G
i
n
i
a
a_* =arg;min_{ain A};Gini_a
a∗=argmina∈AGinia
1.3 决策树种类
1.3.1 ID3
使用信息增益作为划分指标。
1.3.2 C4.5
ID3越细小的分割分类错误率越小,所以ID3会越分越细,但是这会导致过度学习。基于此C4.5对ID3进行了改进,使用信息增益率作为划分指标。如果分割太细那么增益率的分母就会增加,信息增益率会降低,其他的构建过程和ID3相同。
信息增益率定义为:
H
r
a
t
i
o
(
D
,
a
)
=
H
(
D
,
a
)
I
V
(
a
)
I
V
(
a
)
=
−
∑
a
v
∈
a
p
(
a
v
)
l
o
g
p
(
a
v
)
=
−
∑
a
v
∈
a
∣
D
v
∣
∣
D
∣
l
o
g
∣
D
v
∣
∣
D
∣
H_ratio(D,a)=frac{H(D,a)}{IV(a)}\ IV(a)=-sum_{a^v in a}p(a^v)logp(a^v)=-sum_{a^v in a}frac{|D^v|}{|D|}logfrac{|D^v|}{|D|}
Hratio(D,a)=IV(a)H(D,a)IV(a)=−av∈a∑p(av)logp(av)=−av∈a∑∣D∣∣Dv∣log∣D∣∣Dv∣
1.3.3 CART
CART叫分类回归树,它是一种二叉树。使用基尼系数(Gini)作为划分指标。CART与ID3有相同的问题,可能导致划分太细导致过度学习。
2 剪枝处理
前面已经说过决策树可能会划分过细,导致过度学习,此时可以使用剪枝技术进行处理,防止过拟合。剪枝技术可分为“预剪枝”和“后剪枝”。
2.1 预剪枝
预剪枝是指在决策树生成个过程中,对每个结点在划分前先进行评估,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分,并将当前结点标记为叶结点,类别标记为当前结点样本集合中样本数最多的类别。
2.2 后剪枝
后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上地对非叶子结点进行评估,若该结点对应地子树被替换为叶结点能带来泛化性能地提升,则将该子树替换为叶结点。
最后
以上就是清脆雪糕为你收集整理的机器学习(三)——决策树(Decision Tree)1 决策树原理2 剪枝处理的全部内容,希望文章能够帮你解决机器学习(三)——决策树(Decision Tree)1 决策树原理2 剪枝处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复