基本流程
决策树的功能和结构 :一颗决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其它每一个结点则对应于一个属性测试;每一个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样片全集。 决策树学习的目的 :为了产生一棵泛化能力强,即处理未见示例能力强的决策树。 决策树的生成是一个递归过程,但有递归就一定有致使递归返回的状况,要否则递归就会一直无限下去。 (1)当前结点包含的样本全属于同一类别,无需划分; (2)当前属性集为空,或是全部样本在全部属性上取值相同,没法划分; (3)当前结点包含的样本集合为空,不能划分。 在第(2)种情形下,咱们把当前结点标记为叶结点,并将该类别设定为该结点所含样本最多的类别。 在第(3)种情形下,一样把当前结点标记为叶结点,但将其类别设定为与其父节点所包含样本最多的类别。web
划分选择
由图4.2可看出,决策树学习的关键是第8行,即如何选择最优划分属性。随着划分过程的不断进行,咱们但愿决策树的分支节点所包含的样本尽量属于同一类别,即结点的“纯度”(purity)愈来愈高。算法
信息增益
“信息熵”(information entropy)是度量样本集合纯度最经常使用的一种指标。假定当前样本集合
D
D
中第
k
k
类样本所占的比例为
p k ( k = 1 , 2 , . . . , | y | )
p
k
(
k
=
1
,
2
,
.
.
.
,
|
y
|
)
,则
D
D
的信息熵定义为:svg
E n t ( D ) = − ∑ k = 1 | y | p k log 2 p k
E
n
t
(
D
)
=
−
∑
k
=
1
|
y
|
p
k
log
2
p
k
E n t ( D )
E
n
t
(
D
)
的值越小,则
D
D
的纯度越高。
假定离散属性
a
a
有
V
V
个可能的取值
{ a 1 , a 2 , . . . , a V }
{
a
1
,
a
2
,
.
.
.
,
a
V
}
,则使用
a
a
来对样本集
D
D
进行划分,就会产生
V
V
个分支结点,其中第
v
v
个分支结点包含了
D
D
中全部在属性
a
a
上取值为
a v
a
v
的样本,记为
D v
D
v
。咱们能够计算出
D v
D
v
的信息熵为
E n t ( D v )
E
n
t
(
D
v
)
,考虑到不一样的分支结点所包含的样本数不一样,给各个分支结点赋予权重
D v D
D
v
D
,因而算出用属性
a
a
对样本
D
D
进行划分所得到的“信息增益”(information gain):
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V | D v | | D | E n t ( D v )
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
|
D
v
|
|
D
|
E
n
t
(
D
v
)
信息增益越大,则意味着使用属性
a
a
来进行划分所得到的“纯度提高”越大。所以,咱们用信息增益来进行决策树的划分属性选择,即图4.2算法第8行选择属性
a ∗ = a r g m a x G a i n ( D , a ) , a ∈ A
a
∗
=
a
r
g
m
a
x
G
a
i
n
(
D
,
a
)
,
a
∈
A
。
增益率
信息增益准则对可取值数目较多的属性有所偏好,为了减小这种偏好可能带来的不利影响,使用“增益率”(gain ratio)来选择最优划分属性。其定义为:post
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a )
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
其中
I V ( a ) = − ∑ v = 1 V | D v | | D | log 2 | D v | | D |
I
V
(
a
)
=
−
∑
v
=
1
V
|
D
v
|
|
D
|
log
2
|
D
v
|
|
D
|
称为属性
a
a
的“固有值”(intrinsic value)。一般属性
a
a
的可能取值数目越多(即
V
V
越大),则
I V ( a )
I
V
(
a
)
的值一般越大。
增益率准则对可取值数目较少的属性有所偏好,故在使用增益率准则时,想从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
尼基指数
CART决策树,Classification and Regression Tree,是一种著名的决策树学习算法,分类和回归任务均可用。它就使用“尼基指数”(Gini index)来选择划分属性。数据集
D
D
的纯度用尼基值来度量:性能
G i n i ( D ) = ∑ k = 1 | y | ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 | y | p 2 k
G
i
n
i
(
D
)
=
∑
k
=
1
|
y
|
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
|
y
|
p
k
2
G i n i ( D )
G
i
n
i
(
D
)
反映了数据集
D
D
中随机抽取两个样本,其类别标记不一致的几率。所以,
G i n i ( D )
G
i
n
i
(
D
)
越小,则数据集
D
D
的纯度越高。
属性
a
a
的尼基指数定义为
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V | D v | | D | G i n i ( D v )
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
|
D
v
|
|
D
|
G
i
n
i
(
D
v
)
咱们在候选属性
A
A
中,选择尼基指数最小的属性做为最优划分属性,即
a ∗ = a r g m i n G i n i _ i n d e x ( D , a ) , a ∈ A
a
∗
=
a
r
g
m
i
n
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
,
a
∈
A
。
剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。决策树剪枝的基本策略有“预剪枝”(prepruning)和”后剪枝”(post-pruning)。预剪枝 是指在决策树生成过程当中,对每一个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提高,则中止划分并将当前结点标记为叶结点;后剪枝 是先从训练集生成一颗完整的决策树,而后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提高,则将该子树替换为叶结点。 判断决策树泛化性能提高的方法有不少(留出法、自助法等),这里使用留出法讨论。对西瓜数据集随即划分红下图的两个部分: 学习
预剪枝
基于信息增益准则,若是对表4.2的数据集生成决策树,以下图所示: 预剪枝处理的决策树以下图: 测试
后剪枝
基于表4.2的数据咱们获得图4.5的决策树,用验证集验证可知该决策树的进度为
42.9 %
42.9
%
。后剪枝须要从低往上,一个结点一个结点验证。获得的决策树以下 其验证精度为
71.4 %
71.4
%
。atom
预剪枝与后剪枝比较 :后剪枝决策树一般比预剪枝决策树保留了更多的分支,因此后剪枝决策树的欠拟合风险很小,泛化性能每每优于预剪枝决策树。 但后剪枝决策树须要对每一个非叶结点逐一进行考察,所以其训练时间开销比未剪枝和预剪枝决策树都要大得多。spa
连续与缺失值
连续值处理
在现实学习任务中常会遇到连续属性(例如,形容一种特性的程度),因此有必要讨论如何在决策树学习中使用连续属性。二分法(bi-partition)是对连续属性进行处理的最简单策略,是一种连续属性离散化技术。 给定样本集
D
D
和连续属性
a
a
,假定
a
a
在
D
D
上出现了
n
n
个不一样的取值,将这些值从小到大进行排序,记为
{ a 1 , a 2 , . . . , a n }
{
a
1
,
a
2
,
.
.
.
,
a
n
}
。而后基于划分点
t
t
能够将
D
D
分为子集
D − t
D
t
−
(属性
a
a
上取值不大于
t
t
的样本),和
D + t
D
t
+
(属性
a
a
上取值大于
t
t
的样本)。 因为对于任意相邻的属性取值
a i
a
i
和
a i + 1
a
i
+
1
来讲,
t
t
在区间
[ a i , a i + 1 )
[
a
i
,
a
i
+
1
)
中取任意值所产生的划分结果相同。所以,对于连续属性
a
a
,包含
n − 1
n
−
1
个元素的候选划分点集合 3d
T a = { a i + a i + 1 2 | 1 ≤ i ≤ n − 1 } ,
T
a
=
{
a
i
+
a
i
+
1
2
|
1
≤
i
≤
n
−
1
}
,
而后,就能够想离散属性值同样来考察这些划分点,选择最优的划分点进行样本集合的划分。有:
G a i n ( D , a ) = m a x G a i n ( D , a , t ) , t ∈ T a
G
a
i
n
(
D
,
a
)
=
m
a
x
G
a
i
n
(
D
,
a
,
t
)
,
t
∈
T
a
= m a x E n t ( D ) − ∑ λ ∈ { − , + } | D λ t | | D | E n t ( | D λ t ) ,
=
m
a
x
E
n
t
(
D
)
−
∑
λ
∈
{
−
,
+
}
|
D
t
λ
|
|
D
|
E
n
t
(
|
D
t
λ
)
,
其中
G a i n ( D , a , t )
G
a
i
n
(
D
,
a
,
t
)
是样本集
D
D
基于划分点
t
t
二分后的信息增益。因而选择使
G a i n ( D , a , t )
G
a
i
n
(
D
,
a
,
t
)
最大化的划分点。
缺失处理
现实任务中经常会遇到不完整的样本,即样本的某些属性值缺失。若是咱们放弃这些不完整的样本,无疑是对数据信息的极大的浪费。下表是含有不完整样本的西瓜数据集 对此,咱们须要解决两个问题:(1)如何在属性值缺失的状况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分? 给定训练集
D
D
和属性
a
a
,令
D ˇ
D
ˇ
表示
D
D
中在属性
a
a
上没有缺失值的样本子集。 对于问题(1) ,咱们仅可根据
D ˇ
D
ˇ
来判断属性
a
a
的优劣。假定属性
a
a
有
V
V
个可取值
{ a 1 , a 2 , . . . , a V }
{
a
1
,
a
2
,
.
.
.
,
a
V
}
,令
D v ˇ
D
v
ˇ
表示
D ˇ
D
ˇ
在属性
a
a
上取值为
a v
a
v
的样本子集;
D k ˇ
D
k
ˇ
表示
D ˇ
D
ˇ
中属于第
k
k
类
( k = 1 , 2 , . . . | y | )
(
k
=
1
,
2
,
.
.
.
|
y
|
)
的样本子集。因而有,
D ˇ = ∪ | y | k = 1 D ˇ k
D
ˇ
=
∪
k
=
1
|
y
|
D
ˇ
k
,它表示
c h e c k D k , ( k = 1 , 2 , . . . , | y | )
c
h
e
c
k
D
k
,
(
k
=
1
,
2
,
.
.
.
,
|
y
|
)
的全部并集;和
D ˇ = ∪ V v = 1 D ˇ v
D
ˇ
=
∪
v
=
1
V
D
ˇ
v
,它表示
c h e c k D v , ( v = 1 , 2 , . . . , V )
c
h
e
c
k
D
v
,
(
v
=
1
,
2
,
.
.
.
,
V
)
的全部并集。 假定咱们为每一个样本
x
x
赋予一个权重
w x
w
x
,并定义
ρ = ∑ x ∈ D ˇ w x ∑ x ∈ D w x
ρ
=
∑
x
∈
D
ˇ
w
x
∑
x
∈
D
w
x
p ˇ k = ∑ x ∈ D k ˇ w x ∑ x ∈ D ˇ w x ( 1 ≤ k ≤ | y | )
p
ˇ
k
=
∑
x
∈
D
k
ˇ
w
x
∑
x
∈
D
ˇ
w
x
(
1
≤
k
≤
|
y
|
)
r ˇ k = ∑ x ∈ D v ˇ w x ∑ x ∈ D ˇ w x ( 1 ≤ v ≤ V )
r
ˇ
k
=
∑
x
∈
D
v
ˇ
w
x
∑
x
∈
D
ˇ
w
x
(
1
≤
v
≤
V
)
对属性
a
a
来讲,
ρ
ρ
表示完好失值样本所占的比例;
p k ˇ
p
k
ˇ
表示完好失值样本中第
k
k
类所占的比例;
r v ˇ
r
v
ˇ
表示完好失值样本中在属性
a
a
上取值
a v
a
v
的样本所占的比例。而且有,
∑ | y | k = 1 p k ˇ = 1
∑
k
=
1
|
y
|
p
k
ˇ
=
1
,
∑ V v = 1 r v ˇ = 1
∑
v
=
1
V
r
v
ˇ
=
1
。
根据上述定义,可将信息增益的计算式(4.2)推广为
G a i n ( D , a ) = ρ × G a i n ( D ˇ , a ) = ρ × ( E n t ( D ˇ ) − ∑ v = 1 V E n t ( D v ˇ ) )
G
a
i
n
(
D
,
a
)
=
ρ
×
G
a
i
n
(
D
ˇ
,
a
)
=
ρ
×
(
E
n
t
(
D
ˇ
)
−
∑
v
=
1
V
E
n
t
(
D
v
ˇ
)
)
其中
E n t ( D ˇ ) = − ∑ | y | k = 1 p k ˇ log 2 p k ˇ
E
n
t
(
D
ˇ
)
=
−
∑
k
=
1
|
y
|
p
k
ˇ
log
2
p
k
ˇ
对于问题(2) ,若样本
x
x
在划分属性
a
a
上的取值已知,则将
x
x
划入与其取值对应的子结点,且样本权值在子结点中保持为
w x
w
x
;若样本
x
x
在划分属性
a
a
上的取值未知,则将
x
x
同时划入全部子结点,且样本权值在与属性值
a v
a
v
对应的子结点中调整为
r v ˇ ⋅ w x
r
v
ˇ
⋅
w
x
,这至关于让同一个样本以不一样的几率划入到不一样的子结点中去。
多变量决策树
若把每一个属性是为坐标空间中的一个坐标轴,则d个属性对应d维空间中的一个数据点。决策树所造成的的分类边界有一个明显的特色:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。 如果在多变量状况下,决策树会至关复杂,因为要进行大量的属性测试,预测时间开销会很大。但若能使用斜的划分边界,则决策树模型将大为简化。 “多变量决策树”(multivariate decision tree)就是能实现这样的“斜划分”甚至更复杂划分的决策树。 以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点再也不是仅对某个属性,而是对属性的线性组合进行测试;使得每一个非叶结点是一个形如
∑ d i = 1 w i a i = t
∑
i
=
1
d
w
i
a
i
=
t
的线性分类器,其中
w i
w
i
是属性
a i
a
i
的权重,
w i
w
i
和
t
t
可在该结点所含的样本集和属性集上学得。