机器学习——分类算法之决策树
前言
主要涉及ID3决策树、C4.5决策树、CART决策树、决策树的剪枝、连续值和缺失值的处理。
决策树是基于树结构来进行决策的,一般的一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点则对应于一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集。
决策树的工作原理和我们平时做决定时所采用的的机制是很相似的,也就是根据一堆if、else规则来进行判断,不同的判断条件也就构成了不同的模型。
决策树的学习目的是为了产生一颗泛化能力强的决策树,为了达到此目的,最重要的环节包括属性的划分、决策树的剪枝。
属性划分的要求、目标:希望决策树的分支结点点所包含的样本尽可能属于同一类别,即结点的纯度越来越高。
那么基于上面的学习目标,产生了三种划分属性的度量指标:信息增益、增益率、基尼指数。
1、信息熵
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标,代表一个系统中蕴含多少信息量,信息量越大表明一个系统的不确定性就越大,就存在越多的可能性,即信息熵大。
下面开始推导ID3算法。
假定当前样本集合D中第k类样本所占的比例为
P
k
(
k
=
1
,
2
,
.
.
.
,
∣
y
∣
)
P_{k}(k=1,2,...,|y|)
Pk(k=1,2,...,∣y∣),则D的信息熵为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
y
∣
P
k
l
o
g
2
P
k
(1)
Ent(D)= -\sum_{k=1}^{|y|}P_{k}log_{2}P_{k}\tag{1}
Ent(D)=−k=1∑∣y∣Pklog2Pk(1)
其中,|y|表示样本类别总数,
P
k
P_{k}
Pk表示第k类样本所占的比例,且
0
≤
P
k
≤
1
,
∑
k
=
1
n
P
k
=
1
0\leq P_{k}\leq 1,\sum_{k=1}^{n}P_{k}=1
0≤Pk≤1,∑k=1nPk=1,Ent(D)值越小,纯度越高。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
举例说明式(1):
假设当前数据集有5个样本
D
=
{
x
1
,
x
2
,
x
3
,
x
4
,
x
5
}
D = \{x_{1},x_{2},x_{3},x_{4},x_{5}\}
D={x1,x2,x3,x4,x5},其标签为分别为{0,0,1,2,2}(三类,k=1,2,3),那么每一类所占比为
P
1
=
2
/
5
,
P
2
=
1
/
5
,
P
3
=
2
/
5
P_{1} = 2 / 5 ,P_{2} = 1 / 5,P_{3} = 2 / 5
P1=2/5,P2=1/5,P3=2/5,则此时的信息熵为:
E
n
t
(
D
)
=
−
∑
k
=
1
3
P
k
l
o
g
2
P
k
=
−
P
1
l
o
g
2
P
1
−
P
2
l
o
g
2
P
2
−
P
3
l
o
g
2
P
3
=
−
2
5
l
o
g
2
2
5
+
−
1
5
l
o
g
2
1
5
+
−
2
5
l
o
g
2
2
5
Ent(D)=-\sum_{k =1}^{3}P_{k}log_{2}P_{k}=-P_{1}log_{2}P_{1}-P_{2}log_{2}P_{2}-P_{3}log_{2}P_{3}\\=-\frac{2}{5}log_{2}\frac{2}{5}+-\frac{1}{5}log_{2}\frac{1}{5}+-\frac{2}{5}log_{2}\frac{2}{5}
Ent(D)=−k=1∑3Pklog2Pk=−P1log2P1−P2log2P2−P3log2P3=−52log252+−51log251+−52log252
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上面说了“Ent(D)值越小,纯度越高”,那么这个程度该怎样量化呢?就是说什么样的样本可以说是程度高?什么样的样本可以说是纯度低?下面通过求解信息熵的最大值和最小值来说明这个问题。
+++++++++++++++++++++++++++++++++++++证明信息熵的取值范围+++++++++++++++++++++++++
证明式:
0
≤
E
n
t
(
D
)
≤
l
o
g
2
∣
y
∣
(2)
0\leq Ent(D)\leq log_{2}|y|\tag{2}
0≤Ent(D)≤log2∣y∣(2)
1、首先求Ent(D)的最大值:
若令
∣
y
∣
=
n
,
P
k
=
x
k
|y|=n,P_{k}=x_{k}
∣y∣=n,Pk=xk,那么信息熵Ent(D)就可以看做一个n元实值函数,也即:
E
n
t
(
D
)
=
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
−
∑
k
=
1
n
x
k
l
o
g
2
x
k
(3)
Ent(D)=f(x_{1},x_{2},...,x_{n})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{3}
Ent(D)=f(x1,x2,...,xn)=−k=1∑nxklog2xk(3)
其中,
0
≤
x
k
≤
1
,
∑
k
=
1
n
x
k
=
1
0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1
0≤xk≤1,∑k=1nxk=1
所以,此时若想求信息熵的最大值,等价于求n元实值函数 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)的最大值,也就是将原求信息熵的最大值转成了求多元实值函数求最值的问题,并且对于每一个 x k x_{k} xk都要满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0≤xk≤1,∑k=1nxk=1,即求有约束的最大值问题。
如果不考虑约束
0
≤
x
k
≤
1
0\leq x_{k}\leq1
0≤xk≤1,仅考虑
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1的话,对
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_{1},x_{2},...,x_{n})
f(x1,x2,...,xn)求最大值等价于如下最小化问题:
m
i
n
∑
k
=
1
n
x
k
l
o
g
2
x
k
(4)
min\ \sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{4}
min k=1∑nxklog2xk(4)
s
.
t
.
∑
k
=
1
n
x
k
=
1
(5)
s.t.\ \sum_{k=1}^{n}x_{k}=1\tag{5}
s.t. k=1∑nxk=1(5)
很明显上面的目标函数(4)是凸函数(结合x的取值范围和目标函数的二阶导数恒大于0),并且其约束条件(5)明显是线性函数,所以该问题就是凸优化问题。
显然,对于
0
≤
x
k
≤
1
0\leq x_{k}\leq1
0≤xk≤1时,该问题为凸优化问题,而对于凸优化问题来说,满足KKT条件的点即为最优解。由于此最小化问题仅含等式约束,那么能另其拉格朗日函数的一阶偏导数等于0的点即为满足KKT条件的点。
由上面红色字体的分析,根据拉格朗日乘子法,该优化问题的拉格朗日函数为:
L
(
x
1
,
x
2
,
.
.
.
,
x
n
,
λ
)
=
∑
k
=
1
n
x
k
l
o
g
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
(6)
L(x_{1},x_{2},...,x_{n},\lambda) =\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)\tag{6}
L(x1,x2,...,xn,λ)=k=1∑nxklog2xk+λ(k=1∑nxk−1)(6)
对上面拉格朗日函数分别关于
x
1
,
.
.
.
,
x
n
,
λ
x_{1},...,x_{n},\lambda
x1,...,xn,λ求一阶偏导数,并令偏导数等于0
首先对
x
1
x_{1}
x1求偏导,并令其等于0:
∂
L
(
x
1
,
x
2
,
.
.
.
,
x
n
)
∂
x
1
=
∂
∂
x
1
[
∑
k
=
1
n
x
k
l
o
g
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
]
=
l
o
g
2
x
1
+
x
1
⋅
1
x
1
l
n
2
+
λ
=
l
o
g
2
x
1
+
⋅
1
l
n
2
+
λ
=
0
(7)
\frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial x_{1}}=\frac{\partial }{\partial x_{1}}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=log_{2}x_{1}+x_{1\cdot \frac{1}{x_{1}ln2}}+\lambda \\=log_{2}x_{1}+\cdot \frac{1}{ln2}+\lambda =0\tag{7}
∂x1∂L(x1,x2,...,xn)=∂x1∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=log2x1+x1⋅x1ln21+λ=log2x1+⋅ln21+λ=0(7)
所以可得
λ
\lambda
λ:
λ
=
−
l
o
g
2
x
1
−
1
l
n
2
(8)
\lambda = -log_{2}x_{1}-\frac{1}{ln2}\tag{8}
λ=−log2x1−ln21(8)
同理,当令剩下的
x
2
,
.
.
x
n
x_{2},..x_{n}
x2,..xn的导数为0时,求出的
l
a
m
b
d
a
lambda
lambda都类似于式(8),这里就不一一求了,即:
λ
=
−
l
o
g
2
x
1
−
1
l
n
2
=
−
l
o
g
2
x
2
−
1
l
n
2
=
.
.
.
=
−
l
o
g
2
x
n
−
1
l
n
2
(9)
\lambda = -log_{2}x_{1}-\frac{1}{ln2}=-log_{2}x_{2}-\frac{1}{ln2}=...=-log_{2}x_{n}-\frac{1}{ln2}\tag{9}
λ=−log2x1−ln21=−log2x2−ln21=...=−log2xn−ln21(9)
然后对式(6)中的
λ
\lambda
λ求偏导:
∂
L
(
x
1
,
x
2
,
.
.
.
,
x
n
)
∂
λ
=
∂
∂
λ
[
∑
k
=
1
n
x
k
l
o
g
2
x
k
+
λ
(
∑
k
=
1
n
x
k
−
1
)
]
=
0
(10)
\frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial \lambda}=\frac{\partial }{\partial \lambda}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=0\tag{10}
∂λ∂L(x1,x2,...,xn)=∂λ∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=0(10)
由式(10)可得:
∑
k
=
1
n
x
k
=
1
(11)
\sum_{k=1}^{n}x_{k}=1\tag{11}
k=1∑nxk=1(11)
所以根据式(9)和(11)可得该最小化问题的最优解:
x
1
=
x
2
=
.
.
.
=
x
n
=
1
n
(12)
x_{1}=x_{2}=...=x_{n}=\frac{1}{n}\tag{12}
x1=x2=...=xn=n1(12)
又因为
x
k
x_{k}
xk还需要满足约束
0
≤
x
k
≤
1
0\leq x_{k}\leq 1
0≤xk≤1,显然
0
≤
1
n
≤
1
0\leq \frac{1}{n}\leq 1
0≤n1≤1,所以
x
1
=
x
2
=
.
.
.
=
x
n
x_{1}=x_{2}=...=x_{n}
x1=x2=...=xn是满足所有约束的最优解,也即为当前最小化问题的最小值点,同时也是
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
的
最
大
值
点
。
f(x_{1},x_{2},...,x_{n})的最大值点。
f(x1,x2,...,xn)的最大值点。
将
x
1
,
x
2
,
.
.
.
,
x
n
=
1
n
x_{1},x_{2},...,x_{n}=\frac{1}{n}
x1,x2,...,xn=n1带入
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_{1},x_{2},...,x_{n})
f(x1,x2,...,xn)中可得:
f
(
1
n
,
.
.
.
,
1
n
)
=
=
∑
k
=
1
n
1
n
l
o
g
2
1
n
=
−
n
⋅
1
n
l
o
g
2
1
n
=
l
o
g
2
n
(13)
f(\frac{1}{n},...,\frac{1}{n})==\sum_{k=1}^{n}\frac{1}{n}log_{2}\frac{1}{n}=-n\cdot \frac{1}{n}log_{2}\frac{1}{n}=log_{2}n\tag{13}
f(n1,...,n1)==k=1∑nn1log2n1=−n⋅n1log2n1=log2n(13)
证明完了信息熵的最大值,现在给出一个总结:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_{1},x_{2},...,x_{n})
f(x1,x2,...,xn)在满足约束
0
≤
x
k
≤
1
,
∑
k
=
1
n
x
k
=
1
0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1
0≤xk≤1,∑k=1nxk=1时的最大值为
l
o
g
2
n
log_{2}n
log2n
关于信息熵的取值范围已经给出证明,当信息熵取值最大时,表明信息是最不纯的,那么最不纯的时候有什么表现呢,即当信息熵取值最大时,样本有什么样的表现呢?
我们知道
x
k
x_{k}
xk表示的就是第k类样本在集合中所占比例,观察式(12),当信息熵值最大时,
x
k
x_{k}
xk均相等,也即
P
k
P_{k}
Pk均相等。也就是说,此时样本集合中的各类样本式均匀分布的,那么这时候样本集合的纯度就是最低的时候。
2、现在开始证明信息熵Ent(D)的最小值
如果不考虑约束
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n}x_{k}=1
∑k=1nxk=1,仅考虑
0
≤
x
k
≤
1
0\leq x_{k}\leq 1
0≤xk≤1的话,由式(3),可知
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_{1},x_{2},...,x_{n})
f(x1,x2,...,xn)可以看做是n个互不相关的一元函数的加和,也即:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
∑
k
=
1
n
g
(
x
k
)
(14)
f(x_{1},x_{2},...,x_{n})=\sum_{k=1}^{n}g(x_{k})\tag{14}
f(x1,x2,...,xn)=k=1∑ng(xk)(14)
其中,
g
(
x
k
)
=
−
∑
k
=
1
n
x
k
l
o
g
2
x
k
,
0
≤
x
k
≤
1
g(x_{k})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k},0\leq x_{k}\leq 1
g(xk)=−∑k=1nxklog2xk,0≤xk≤1。
那么当 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) g(x1),g(x2),,...,g(xn)分别取到其最小值时, f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)也就取到了最小值。
由于 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) g(x1),g(x2),,...,g(xn)的定义域和函数表达式均相同,所以只需求出 g ( x 1 ) g(x_{1}) g(x1)的最小值也就求出了 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) g(x1),g(x2),,...,g(xn)的最小值。
下面考虑求
g
(
x
1
)
g(x_{1})
g(x1)的最小值:
首先,对
g
(
x
1
)
g(x_{1})
g(x1)关于
x
1
x_{1}
x1求一阶和二阶导数:
g
,
(
x
1
)
=
d
(
−
x
1
l
o
g
2
x
1
)
d
x
1
=
−
l
o
g
2
x
1
−
x
1
⋅
1
x
2
l
n
2
=
−
l
o
g
2
x
1
−
1
l
n
2
14
)
(()
g^{,}(x_{1})=\frac{d(-x_{1}log_{2}x_{1})}{dx_{1}}=-log_{2}x_{1}-x_{1 }\cdot\frac{1}{x_{2}ln2}=-log_{2}x_{1}-\frac{1}{ln2}\tag(14)
g,(x1)=dx1d(−x1log2x1)=−log2x1−x1⋅x2ln21=−log2x1−ln2114)(()
g
,
,
(
x
1
)
=
d
(
g
,
(
x
1
)
)
d
x
1
=
d
(
−
l
o
g
2
x
1
−
1
l
n
2
)
d
x
1
=
−
1
x
1
l
n
2
(15)
g^{,,}(x_{1})=\frac{d(g^{,}(x_{1}))}{dx_{1}}=\frac{d(-log_2x_1-\frac{1}{ln2})}{dx_{1}}=-\frac{1}{x_{1}ln2}\tag{15}
g,,(x1)=dx1d(g,(x1))=dx1d(−log2x1−ln21)=−x1ln21(15)
显然,当
0
≤
x
k
≤
1
0\leq x_{k}\leq 1
0≤xk≤1时,所以
g
(
x
1
)
g(x_{1})
g(x1)的二阶导小于0,所以
g
(
x
1
)
g(x_{1})
g(x1)是一个在其定义域范围内开口向下的凹函数,那么其最小值必然在边界取,于是分别取
x
1
=
0
和
x
1
=
1
x_{1}=0和x_{1}=1
x1=0和x1=1带入到
g
(
x
1
)
g(x_{1})
g(x1)可得:
g
(
0
)
=
−
0
l
o
g
2
0
=
0
g
(
1
)
=
−
1
l
o
g
2
1
=
0
(16)
g(0)=-0log_{2}0=0 \\ g(1)=-1log_{2}1=0\tag{16}
g(0)=−0log20=0g(1)=−1log21=0(16)
所以 g ( x 1 ) g(x_1) g(x1)的最小值为0,同理可得 g ( x 2 ) , g ( x 3 ) , . . . , g ( x n ) g(x_{2}),g(x_{3}),...,g(x_{n}) g(x2),g(x3),...,g(xn)的最小值也为0,那么 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)的最小值此时也为0。
但是此时仅考虑
0
≤
x
k
≤
1
0\leq x_{k}\leq1
0≤xk≤1时取到的最小值,若考虑约束
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1的话,那么
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_{1},x_{2},...,x_{n})
(x1,x2,...,xn)的最小值一定大于等于0。(此时两个约束都考虑) 如果令某个
x
k
=
1
x_{k}=1
xk=1,那么根据约束
∑
k
=
1
n
x
k
=
1
\sum_{k=1}^{n} x_{k}=1
∑k=1nxk=1可知
x
1
=
x
2
=
.
.
.
=
x
k
−
1
=
x
k
+
1
=
.
.
.
=
x
n
=
0
x_{1}=x_{2}=...=x_{k-1}=x_{k+1}=...=x_{n}=0
x1=x2=...=xk−1=xk+1=...=xn=0将其带入式(3)中可得:
f
(
0
,
0
,
.
.
.
,
0
,
1
,
0
,
.
.
.
,
0
)
=
−
0
l
o
g
2
0
−
0
l
o
g
2
0
−
.
.
.
−
0
l
o
g
2
0
−
1
l
o
g
2
1
−
0
l
o
g
2
0
−
,
.
.
.
,
−
0
l
o
g
2
0
=
0
(17)
f(0,0,...,0,1,0,...,0)=-0log_{2}0-0log_{2}0-...-0log_{2}0-1log_{2}1-0log_{2}0-,...,-0log_{2}0=0\tag{17}
f(0,0,...,0,1,0,...,0)=−0log20−0log20−...−0log20−1log21−0log20−,...,−0log20=0(17)
所以 x k = 1 , x 1 = x 2 = . . . = x k − 1 = x k + 1 = . . . = x n = 0 x_{k}=1,x_{1}=x_{2}=...=x_{k-1}=x_{k+1}=...=x_{n}=0 xk=1,x1=x2=...=xk−1=xk+1=...=xn=0一定是 f ( x 1 , x 2 , . . . , f n ) f(x_{1},x_{2},...,f_{n}) f(x1,x2,...,fn)在满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0≤xk≤1,∑k=1nxk=1的条件下的最小值点,其最小值为0。
证明完了信息熵的最大值,现在给出一个总结: 当样本的信息熵等于0的时候,样本的纯度是最高的,那么纯度最高时样本有什么样的特性呢? 由信息熵最小值的推导过程可知,当信息熵最小时,某个样本$x_{k}=1$,其他的等于0,而$x_{k}$表示得到就是$P_{k}$,这就说明该样本集合中仅仅只包含一类样本(k类),那么很显然,这时候的纯度就是最高的+++++++++++++++++信息熵的最大值、最小值证明完毕,以及最取最大值和最小值时样本的特征也已说明+++++++++
2、条件熵
什么是条件熵?
答:通俗地说,可以理解为 在知道一些已知条件下,计算出来的信息熵。
条件熵的定义:在已知样本属性a的取值情况下,度量样本集合纯度的一种指标
H ( D ∣ a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) (17) H(D|a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\tag{17} H(D∣a)=v=1∑V∣D∣∣Dv∣Ent(Dv)(17)
上式中关于各个变量一定要搞懂!其中,a表示样本的某个属性,假定属性a由V个可能的取值 { a 1 , a 2 , . . . , a V } \{a^{1},a^{2},...,a^{V}\} {a1,a2,...,aV},样本集合D中在属性a上取值为 a v a^{v} av的样本记为 D v D^{v} Dv, E n t ( D v ) Ent(D^{v}) Ent(Dv)表示样本集合 D v D^{v} Dv的信息熵。 H ( D ∣ a ) H(D|a) H(D∣a)值越小,纯度越高。
ID3算法
现在知道了信息熵和条件熵了,那么就可以定义ID3算法了。
ID3决策树是以信息增益为准则来划分属性的决策树。
信息增益:
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
=
E
n
t
(
D
)
−
H
(
D
∣
a
)
(18)
Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})=Ent(D)-H(D|a)\tag{18}
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−H(D∣a)(18)
观察上式(18),信息增益就等于信息熵减去条件熵,得出来的差值就表示样本集合纯度的提升度。为什么这么说?因为信息熵表示的是没有任何已知条件下,计算出来的样本的纯度;而条件熵是在知道一些一直条件下算出来的集合的纯度,那么他们的差值就表示:在知道一些已知条件情况下,纯度得到的提升。
选择信息增益值最大的属性作为划分属性,因为信息增益越大,则意味着使用该属性来进行划分所获得的“纯度提升”越大。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面举个具体例子来实现ID3算法(来自西瓜书)。
以下面的西瓜数据集来学习一棵没剥开的是不是好瓜的决策树,显然|y|=2。
观察上面数据集,其中“是好瓜”的视为正例,“不是好瓜”视为负例,其中正例占
p
1
=
8
17
p_{1}=\frac{8}{17}
p1=178,反例占
p
2
=
9
17
p_{2}=\frac{9}{17}
p2=179
于是根据式(1)可计算出根节点的信息熵:
E
n
t
(
D
)
=
−
∑
k
=
1
2
p
k
l
o
g
2
p
k
=
−
(
8
17
l
o
g
2
8
17
+
9
17
l
o
g
2
9
17
)
=
0.998
Ent(D)=-\sum_{k=1}^{2}p_{k}log_{2}p_{k}=-(\frac{8}{17}log_{2}\frac{8}{17}+\frac{9}{17}log_{2}\frac{9}{17})=0.998
Ent(D)=−k=1∑2pklog2pk=−(178log2178+179log2179)=0.998
然后分别计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。
以"色泽"为例,它有3个可能的取值:{青绿,乌黑,浅白},若使用该属性对D进行划分,则可得到3个子集,分别记为:
D
1
(
色
泽
=
青
绿
)
D^{1}(色泽=青绿)
D1(色泽=青绿),
D
2
(
色
泽
=
乌
黑
)
D^{2}(色泽= 乌黑)
D2(色泽=乌黑),
D
3
(
色
泽
=
浅
白
)
D^{3}(色泽= 浅白)
D3(色泽=浅白)。
那么按照这三个子集,可将原数据集分成如下三个部分:子集
D
1
D^{1}
D1包含编号为{1,4,6,10,1317}的6个样例,其中正例占
p
1
=
3
6
p_{1}=\frac{3}{6}
p1=63,反例占
p
2
=
3
6
p_{2}=\frac{3}{6}
p2=63;
D
2
D^{2}
D2包含编号为{2,3,7,8,9,15}的6个样例,其中正、反例分别占
p
1
=
4
6
,
p
2
=
2
6
p_{1}=\frac{4}{6},p_{2}=\frac{2}{6}
p1=64,p2=62;
D
3
D^{3}
D3包含编号为{5,11,12,14,16}的五个样例,其中正、反例分别占
p
1
=
1
5
,
p
2
=
4
5
p_{1}=\frac{1}{5},p_{2}=\frac{4}{5}
p1=51,p2=54。
计算用“色泽”划分之后所获得的3个分支节点的信息熵为:
E
n
t
(
D
1
)
=
−
(
3
6
l
o
g
2
3
6
+
3
6
l
o
g
2
3
6
)
=
1.00
Ent(D^{1})=-(\frac{3}{6}log_{2}\frac{3}{6}+\frac{3}{6}log_{2}\frac{3}{6})=1.00
Ent(D1)=−(63log263+63log263)=1.00
E
n
t
(
D
2
)
=
−
(
4
6
l
o
g
2
4
6
+
2
6
l
o
g
2
2
6
)
=
0.918
Ent(D^{2})=-(\frac{4}{6}log_{2}\frac{4}{6}+\frac{2}{6}log_{2}\frac{2}{6})=0.918
Ent(D2)=−(64log264+62log262)=0.918
E
n
t
(
D
3
)
=
−
(
1
5
l
o
g
2
1
5
+
4
5
l
o
g
2
4
5
)
=
0.722
Ent(D^{3})=-(\frac{1}{5}log_{2}\frac{1}{5}+\frac{4}{5}log_{2}\frac{4}{5})=0.722
Ent(D3)=−(51log251+54log254)=0.722
然后,根据式(18)可计算出属性“色泽”的信息增益为:
G
a
i
n
(
D
,
色
泽
)
=
E
n
t
(
D
)
−
∑
v
=
1
3
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
=
0.998
−
(
6
17
×
E
n
t
(
D
1
)
+
6
17
×
E
n
t
(
D
2
)
+
5
17
×
E
n
t
(
D
3
)
)
=
0.998
−
(
6
17
×
1.000
+
6
17
×
0.918
+
5
17
×
0.722
)
=
0.109
Gain(D,色泽)=Ent(D)-\sum_{v=1}^{3}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=0.998-(\frac{6}{17}\times Ent(D^{1}) +\frac{6}{17} \times Ent(D^{2})+\frac{5}{17}\times Ent(D^{3}) )\\=0.998-(\frac{6}{17}\times1.000+\frac{6}{17} \times 0.918+\frac{5}{17}\times 0.722 )=0.109
Gain(D,色泽)=Ent(D)−v=1∑3∣D∣∣Dv∣Ent(Dv)=0.998−(176×Ent(D1)+176×Ent(D2)+175×Ent(D3))=0.998−(176×1.000+176×0.918+175×0.722)=0.109
类似的,可计算出其他属性的信息增益:
G
a
i
n
(
D
,
根
蒂
)
=
0.143
;
G
a
i
n
(
D
,
敲
声
)
=
0.141
;
G
a
i
n
(
D
,
纹
理
)
=
0.381
;
G
a
i
n
(
D
,
脐
部
)
=
0.289
;
G
a
i
n
(
D
,
触
感
)
=
0.006
Gain(D,根蒂)=0.143;\ Gain(D,敲声)=0.141;\ Gain(D,纹理)=0.381;\ Gain(D,脐部)=0.289;\ Gain(D,触感)=0.006
Gain(D,根蒂)=0.143; Gain(D,敲声)=0.141; Gain(D,纹理)=0.381; Gain(D,脐部)=0.289; Gain(D,触感)=0.006
对比上面求出的所有属性的信息增益,属性“纹理”的信息增益最大,所以它被选为划分属性,下图是基于“纹理”对根节点进行划分的结果:
然后,决策树学习算法将对每个分支节点做进一步划分,以上图中第一个分直节点(“纹理=清晰”)为例,该节点包含的样例集合
D
1
D^{1}
D1中有编号{1,2,3,4,5,6,8,10,15}的9个样例,可用属性集合为{色泽,根蒂,敲声,脐部,触感}。基于
D
1
D^{1}
D1计算出各属性的信息增益:
G
a
i
n
(
D
1
,
色
泽
)
=
0.043
;
G
a
i
n
(
D
1
,
根
蒂
)
=
0.458
;
G
a
i
n
(
D
1
,
敲
声
)
=
0.331
;
G
a
i
n
(
D
1
,
脐
部
)
=
0.458
;
G
a
i
n
(
D
1
,
触
感
)
=
0.458
Gain(D^{1},色泽)=0.043;\ Gain(D^{1},根蒂)=0.458;\ Gain(D^{1},敲声)=0.331;\ Gain(D^{1},脐部)=0.458;\ Gain(D^{1},触感)=0.458
Gain(D1,色泽)=0.043; Gain(D1,根蒂)=0.458; Gain(D1,敲声)=0.331; Gain(D1,脐部)=0.458; Gain(D1,触感)=0.458
“根蒂”、“脐部”、“触感”3个属性均取得了最大的信息增益,可选其中之一作为划分属性(注意:叶节点就是当前属性的特征全部属于一类,即全部属于正例或全部属于负例,例如下图中的属性根蒂的两个特征:蜷缩和硬挺)。类似的,对每个分支节点进行上述操作,最终得到的决策树如下:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C4.5决策树
ID3算法没有考虑连续特征,也没有考虑缺失值的问题。
使用信息增益来进行属性的划分会存在一个缺陷:以信息增益为准则的ID3决策树对可取值数目较多的属性有所偏好
下面就用数学来说明上述问题:
信息熵增益:
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
(
−
∑
k
1
∣
y
∣
p
k
l
o
g
2
p
k
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
(
−
∑
k
=
1
∣
y
∣
∣
D
k
v
∣
∣
D
v
∣
l
o
g
2
∣
D
k
v
∣
∣
D
v
∣
)
(19)
Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k1}^{|y|}p_{k}log_{2}p_{k})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k=1}^{|y|}\frac{|D_{k}^{v}|}{|D^{v}|}log_{2}\frac{|D_{k}^{v}|}{|D^{v}|})\tag{19}
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−v=1∑V∣D∣∣Dv∣(−k1∑∣y∣pklog2pk)=Ent(D)−v=1∑V∣D∣∣Dv∣(−k=1∑∣y∣∣Dv∣∣Dkv∣log2∣Dv∣∣Dkv∣)(19)
其中, D k v D^{v}_{k} Dkv表示在样本集合D中在属性a上取值为 a v a^{v} av且类别为k的样本。
为了说明问题,假设一种极端的情况,即假设取 a v a^{v} av的样本个数只有1个,说明属性a可取值个数和样本个数是一样多,即: V = ∣ D ∣ , D k v = D v = 1 V=|D|,D^{v}_{k}=D^{v}=1 V=∣D∣,Dkv=Dv=1,显然此时属性a可以视为取值数目较多的属性。将该情况下的 D k v = D v = 1 D^{v}_{k}=D^{v}=1 Dkv=Dv=1带入到式(19)中,发现H(D|a)=0,当被减数条件熵取0的时候信息增益取最大,所以此时以信息增益最大的那个属性作为划分属性的话,那么肯定选属性a作为划分属性,但是这样选择出来的决策树泛化能力特别差,严重过拟合
要修复ID3算法的这个缺陷,就提出了C4.5决策树,下面开始说明C4.5决策树。
C4.5决策树是以信息增益率为准则来选择划分属性的决策树。
定义信息增益率:
G
a
i
n
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
(20)
Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}\tag{20}
Gainratio(D,a)=IV(a)Gain(D,a)(20)
其中,
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
(21)
IV(a)=-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|}\tag{21}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣(21)
观察信息增益率(20)可知,它在信息增益的基础上再除以一个惩罚项
I
V
(
a
)
IV(a)
IV(a),那么再观察惩罚项
I
V
(
a
)
IV(a)
IV(a),发现其类似于前面说的信息熵的表达式。在说信息熵的时候已经交代过:当各类样本分布均匀的时候,它们的信息熵就越大。那么将这个思想应用到信息增益率(20)上,即属性a的可取值数目越多的话,那么惩罚项
I
V
(
a
)
IV(a)
IV(a)就会越来越大,从而导致信息增益率越来越小。这样一来,对于那些可取值数目较多的属性获得更大的惩罚,使得其信息增益率小。
C4.5决策树解决了“可取值较多数目的偏好”问题,那么又带来了另一个问题:相反的,信息增益率偏好于那些取值数目较少的属性。
为了解决这个问题,C4.5决策树提出了这个方法:算法首先找出信息增益高出平均水平的属性,再在这些属性里面选择信息增益率最高的属性作为最优划分属性
C4.5算法的不足:
a. C4.5算法生成的是多叉树,生成决策树对的效率比较慢
b.C4.5只能用于分类
c.C4.5由于使用了熵模型,里面有大量的耗时的对数运算
CART决策树
CART决策树是以基尼指数为准则来选择划分属性的决策树
基尼值:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
k
p
k
p
k
′
=
∑
k
=
1
∣
y
∣
p
k
∑
k
′
≠
k
p
k
′
=
∑
k
=
1
∣
y
∣
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
(22)
Gini(D)=\sum_{k=1}^{|y|}\sum_{k^{'}\neq k}p_{k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}\sum_{k^{'}\neq k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}(1-p_{k})=1-\sum_{k=1}^{|y|}p^{2}_{k}\tag{22}
Gini(D)=k=1∑∣y∣k′=k∑pkpk′=k=1∑∣y∣pkk′=k∑pk′=k=1∑∣y∣pk(1−pk)=1−k=1∑∣y∣pk2(22)
直观地来看,基尼值就是表示集合D中,随机抽出两个样本,不是同一类别的概率。
基尼指数:
G
i
n
i
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
(23)
Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v})\tag{23}
Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)(23)
基尼指数就是在基尼值得前面加上了权重,基尼值和基尼指数越小,样本集合纯度越高。
CART决策树既能做分类任务,又能做回归任务。
1、CART决策树的分类算法
算法流程:
- 根据基尼指数公式 G i n i i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v}) Giniindex(D,a)=∑v=1V∣D∣∣Dv∣Gini(Dv)找出基尼指数最小的属性 a ∗ a_{*} a∗;
- 计算属性 a ∗ a_{*} a∗的所有可能取值的基尼值 G a i n ( D v ) , v = 1 , 2 , . . . , V Gain(D^{v}),v=1,2,...,V Gain(Dv),v=1,2,...,V,选择基尼值最小的取值 a ∗ v a^{v}_{*} a∗v作为划分点,将集合D划分为D1和D2两个集合(节点),其中D1集合的样本为 a ∗ = a ∗ v a_{*}=a_{*}^{v} a∗=a∗v的样本,D2集合为 a ∗ ≠ a ∗ v a_{*}\neq a_{*}^{v} a∗=a∗v的样本;
- 对集合D1和D2重复步骤1和步骤2,直至满足停止条件。
2、CART决策树的回归算法
CART决策树的回归算法几乎和CART决策树的分类算法几乎是一样的,只是换了一个公式来寻找最优划分属性。
CART决策树的回归算法:
-
根据以下公式找出最优化分属性 a ∗ a_{*} a∗和最优划分点 a ∗ v a_{*}^{v} a∗v:
a ∗ , a ∗ v = a r g m i n a , a v [ m i n c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 1 ) 2 + m i n c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 2 ) 2 ] (24) a_{*},a^{v}_{*}=\underset {a,a^{v}}{argmin}[\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c1)^{2}+\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c2)^{2}]\tag{24} a∗,a∗v=a,avargmin[c1minxi∈D1(a,av)∑(yi−c1)2+c1minxi∈D1(a,av)∑(yi−c2)2](24)
其中, D 1 ( a , a v ) D_{1}(a,a^{v}) D1(a,av)表示属性a上取值小于等于 a v a^{v} av的样本集合, D 2 ( a , a v ) D_{2}(a,a^{v}) D2(a,av)表示属性a上取值大于 a v a^{v} av的样本集合,c1表示 D 1 D_{1} D1的样本输出均值,c2表示 D 2 D_{2} D2的样本输出均值(式(24)是该算法的损失函数); -
根据 a ∗ v a_{*}^{v} a∗v将集合D划分为 D 1 D_{1} D1和 D 2 D_{2} D2两个集合(节点);
-
对集合D_{1}和 D 2 D_{2} D2重复步骤1和步骤2,直至满足停止条件。
剪枝
由于决策树算法非常容易过拟合,对于生成的决策树必须要进行剪枝。
1、预剪枝
预剪枝就是在构造决策树的过程中,先对每个节点在划分前进行估计,如果当前结点的划分不能带来决策树模型的泛华性增加,则不对当前结点进行划分并且将当前结点标记为叶结点。
举例(使用西瓜书数据集4.2):
观察上面的数据集,是好瓜和不是好瓜各有5个,那么根节点的信息熵为:
E
n
t
(
D
)
=
−
∑
k
=
1
2
p
k
l
o
g
2
p
k
=
−
(
1
2
l
o
g
2
1
2
+
1
2
l
o
g
2
1
2
)
=
1
Ent(D)= -\sum_{k=1}^{2}p_{k}log{2}p_{k}=-(\frac{1}{2}log_{2}\frac{1}{2}+\frac{1}{2}log_{2}\frac{1}{2})=1
Ent(D)=−k=1∑2pklog2pk=−(21log221+21log221)=1
基于根节点,计算出每个属性的信息增益(直接给结果了):
色
泽
:
G
a
i
n
(
D
,
a
1
)
=
1
−
(
4
10
×
1
+
4
10
×
0.811
+
0
)
=
0.276
根
蒂
:
G
a
i
n
(
D
,
a
2
)
=
1
−
(
1
2
×
0.971
+
2
5
×
1
+
0
)
=
0.115
敲
声
:
G
a
i
n
(
D
,
a
3
)
=
1
−
(
6
10
×
1
+
3
10
×
0.918
+
0
)
=
0.174
纹
理
:
G
a
i
n
(
D
,
a
4
)
=
1
−
(
6
10
×
1
+
3
10
×
0.918
+
0
)
=
0.174
脐
部
:
G
a
i
n
(
D
,
a
5
)
=
1
−
(
4
10
×
0.811
+
4
10
×
01
+
0
)
=
0.276
触
感
:
G
a
i
n
(
D
,
a
6
)
=
1
−
(
6
10
×
1
+
4
10
×
1
)
=
0
色泽:Gain(D,a_{1})=1-(\frac{4}{10}\times 1 + \frac{4}{10} \times 0.811 + 0)=0.276\\ 根蒂:Gain(D,a_{2})=1-(\frac{1}{2}\times 0.971 + \frac{2}{5} \times 1 + 0)=0.115\\ 敲声:Gain(D,a_{3})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 纹理:Gain(D,a_{4})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 脐部:Gain(D,a_{5})=1-(\frac{4}{10}\times 0.811 + \frac{4}{10} \times 01 + 0)=0.276\\ 触感:Gain(D,a_{6})=1-(\frac{6}{10}\times 1 + \frac{4}{10} \times 1 )=0
色泽:Gain(D,a1)=1−(104×1+104×0.811+0)=0.276根蒂:Gain(D,a2)=1−(21×0.971+52×1+0)=0.115敲声:Gain(D,a3)=1−(106×1+103×0.918+0)=0.174纹理:Gain(D,a4)=1−(106×1+103×0.918+0)=0.174脐部:Gain(D,a5)=1−(104×0.811+104×01+0)=0.276触感:Gain(D,a6)=1−(106×1+104×1)=0
通过比较,“脐部”和“色泽”的信息增益最大,均为0.276,所以可以从这两个属性中随机挑选一个作为划分属性。这里选择脐部作为划分属性,那么会产生3个分支:
下面就需要用预剪枝来判断是不是应该进行这个划分,判断的标准就是比较划分前后其泛华能力是否有提升。
划分之前,所有的样本都在根结点,把该节点记为叶节点,其类别标记为训练集中样本数量最多的类
别,因此该节点可以标记为好瓜(正负例一样多,所以坏瓜也行)。然后用验证集对其性能进行评估,
可以看出上面图中的验证集中,样本{4,5,8}为好瓜,被决策树分类正确;其他的样本{9,11,12,13}被
误分类为好瓜,所以此时的正确率为 3 7 ≈ 43 % \frac{3}{7}\approx 43\% 73≈43%。(记住这是没划分之前的正确率)
根据信息增益最大选择划分属性后的决策时如上图,那么此时再次用验证集来来评估这个决策树,此
时的正确率是: 5 7 ≈ 71 % \frac{5}{7}\approx71\% 75≈71%,很明显这个准确率大于没划分前的准确率,因此可以用
属性“脐部”进行划分。
决策树算法对结点2继续进行划分,再次使用信息增益挑选出值最大的那个特征,信息增益最大的那个特征是“色泽”(具体计算不写了),则使用“色泽”划分后的决策树为:
再使用预剪枝方法对此次划分进行判断,应不应该进行这个划分:首先“脐部”为“凹陷”的属性集合中
有3个好瓜,1个不是好瓜,那么在使用属性“色泽”划分之前的决策树的划分应该为好瓜;使用“色泽”
属性划分后,使用验证集进行计算,划分后的有4个被正确分类,3个被误分类,那么此时的正确率
为 4 7 ≈ 57.1 % \frac{4}{7}\approx 57.1\% 74≈57.1% ,明显小于使用“色泽”划分之前的准确率,所以禁止划分该分支。
后面也是按照这个方法来,这里就不一一赘述了。
那么最后的得到如下的决策树:
**总结:**对比剪枝决策树和未剪枝决策树,可以看出,预剪枝决策树的很多分支都没有展开,这虽然降低了过拟合的风险,但有可能带来欠拟合的风险
2、后剪枝
后剪枝就是先把决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该节点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。
举例:
假设使用上面的数据集,利用信息增益最大的算法得到的决策树如下,下面开始对该树进行后剪枝。
后剪枝算法首先考察图中的结点(6),若将以其为根节点的子树删除,即相当于把结点(6)替换为
子节点,替换后的叶结点的样本(脐部=稍凹,根蒂=稍蜷,色泽=乌黑)包括编号为{7,15}的训练样
本,把该叶结点标记为“好瓜”(因为这里正负样本数量相等,所以随便寄一个类别),因此此时的决
策树在验证集上分类正确的样本为{4,8,11,12},,准确率为 4 7 = 57.1 % \frac{4}{7}=57.1\% 74=57.1%(未剪枝的决策
树分类正确的样本为{4,11,13},精度为 42.9 % 42.9\% 42.9%),所以后剪枝策略决定剪枝。接着考察结点(5),
同样的操作,把其为根节点的子树替换为叶结点,替换后的叶结点包含编号为{6,7,15}的训练样本,
根据“多数原则”把该叶结点标记为“好瓜”,测试的决策树准确率认为57.1%,所以不进行剪枝。结点
(2)和(3)仍然进行上述操作(不具体说了),最后得到的决策树如下,其准确率为71.4%:
总结:对比预剪枝和后剪枝策略,能够发现后剪枝决策树通常比预剪枝保留了更多的分支,一般情况
下,后剪枝决策树的欠拟合风险小,泛化性能往往也要优于预剪枝。但后剪枝过程是在构建完全
决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其**训练时间开
销要比未剪枝决策树和预剪枝决策树都要大得多**。
连续值和缺失值的处理
上面也有提到,ID3算法不能处有缺实值的数据集,而C4.5和CART弥补了这个缺陷。
1、连续值的处理
对于大多数数据,因为连续性数据的取值数目不再有限,所以不能像前面一样处理离散属性使用枚举法对属性进行划分,因此需要将连续属性离散化,常用的离散化方法是二分法。(C4.5采用的策略)
样本集D中的连续属性a,假设属性a有n个不同的取值,对其进行大小排序,记为
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a^{1},a^{2},...,a^{n}\}
{a1,a2,...,an},根据属性可得到n-1个划分点,划分点的集合为:
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
}
(24)
T_{a}=\{\frac{a^{i}+a^{i+1}}{2}\ |1\leq i \leq n-1\}\tag{24}
Ta={2ai+ai+1 ∣1≤i≤n−1}(24)
对于取值集合
T
a
T_{a}
Ta中的每t值会将属性a离散为一个属性值只有两个值,分别是{a>t}和{a<=t}的属性,计算新属性的信息增益,找到信息增益最大的t值即为该属性的最优划分点:
G
a
i
n
(
D
,
a
)
=
m
a
x
t
∈
T
a
G
a
i
n
(
D
,
a
,
t
)
=
m
a
x
∈
T
a
E
n
t
(
D
)
−
∑
λ
∈
−
,
+
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
(25)
Gain(D,a)=\underset{t\in T_{a}}{max}\ Gain(D,a,t)=\underset{\in T_{a}}{max}\ Ent(D)-\sum_{\lambda \in{-,+}}\frac{|D_{t}^{\lambda }|}{|D|}Ent(D_{t}^{\lambda})\tag{25}
Gain(D,a)=t∈Tamax Gain(D,a,t)=∈Tamax Ent(D)−λ∈−,+∑∣D∣∣Dtλ∣Ent(Dtλ)(25)
2、缺失值的处理
现实数据集中的样本通常因为某种原因是缺失的,如果有缺失值的属性的个数比较小,那么可以粗暴地将有缺失值的属性剔除掉;如果有缺失值的属性较多,就不能简单地删除。
在决策树中处理含有缺失值的样本的时候,需要解决两个问题:
- 1、如何在属性缺失值缺失的情况下进行划分属性的选择?
- 2、给定划分属性,若该样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?
举例说明解决方法:
对于问题1
含有缺失值的数据集合如下:
给定训练集D和属性a,令表示
D
−
\overset{-}{D}
D−中在属性a上没有缺失值得样本集(比如,假设a=色泽,则
D
−
=
2
,
3
,
4
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
14
,
15
,
16
,
17
\overset{-}{D}={2,3,4,6,7,8,9,10,11,12,14,15,16,17}
D−=2,3,4,6,7,8,9,10,11,12,14,15,16,17)
那么对于第一个问题:我们可以根据 D − \overset{-}{D} D−(即在该属性上没有缺失值的样本集)来计算属性a的信息增益或者其他指标。我们只要再给根据计算出来的值一个权重,皆可以表示该训练集D中属性a的优劣。
假定属性a有V个可取值
{
a
1
,
a
2
,
.
.
.
,
a
V
}
\{a^{1},a^{2},...,a^{V}\}
{a1,a2,...,aV},令
D
v
−
\overset {-}{D^{v}}
Dv−表示D中在属性a上取值为
a
v
a^{v}
av的样本集,
D
k
−
\overset{-}{D_{k}}
Dk−表示
D
−
\overset {-}{D}
D−中属于第k个类(k=1,2,…,|y|)的样本子集,则显然
D
−
=
∪
k
=
1
V
1
D
k
−
,
D
−
∪
V
=
1
v
1
D
v
−
\overset {-}{D}=\cup ^{V_{1}}_{k=1}\overset{-}{D_{k}},\overset {-}{D}\cup ^{v_{1}}_{V=1}\overset{-}{D^{v}}
D−=∪k=1V1Dk−,D−∪V=1v1Dv−,假定为每个样本X赋予一个权重
W
x
W_{x}
Wx(在决策树的初始阶段,根节点中样本的权重初始化为1),并定义:
ρ
=
∑
x
∈
D
v
−
W
x
∑
x
∈
D
W
x
,
表
示
无
缺
失
值
样
本
所
占
的
比
例
(25)
\rho = \frac {\sum_{x\in \overset {-}{D^{v}}}W_{x}}{{\sum_{x\in D}}W_{x}}\tag{25},\ 表示无缺失值样本所占的比例
ρ=∑x∈DWx∑x∈Dv−Wx, 表示无缺失值样本所占的比例(25)
p
k
−
=
∑
x
∈
D
k
−
W
x
∑
x
∈
D
−
W
x
(
1
≤
k
≤
∣
y
∣
)
,
表
示
无
缺
失
值
样
本
中
第
k
类
所
占
的
比
例
(26)
\overset{-}{p_{k}}=\frac{\sum_{x\in \overset{-}{D_{k}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq k\leq |y|)\tag{26},\ 表示无缺失值样本中第k类所占的比例
pk−=∑x∈D−Wx∑x∈Dk−Wx (1≤k≤∣y∣), 表示无缺失值样本中第k类所占的比例(26)
r
v
−
=
∑
x
∈
D
v
−
W
x
∑
x
∈
D
−
W
x
(
1
≤
v
≤
V
)
,
表
示
无
缺
失
值
样
本
中
在
属
性
a
上
取
值
a
v
的
样
本
所
占
比
例
(27)
\overset{-}{r_{v}}=\frac{\sum_{x\in \overset{-}{D_{v}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq v\leq V)\tag{27},\ 表示无缺失值样本中在属性a上取值a^{v}的样本所占比例
rv−=∑x∈D−Wx∑x∈Dv−Wx (1≤v≤V), 表示无缺失值样本中在属性a上取值av的样本所占比例(27)
根据上面的三个公式,此时可以将信息增益推广为:
G
a
i
n
(
D
,
a
)
=
ρ
×
G
a
i
n
(
D
−
,
a
)
=
ρ
×
(
E
n
t
(
D
−
)
−
∑
v
=
1
V
r
v
−
E
n
t
(
D
v
−
)
)
(28)
Gain(D,a)=\rho \times Gain(\overset{-}{D},a)=\rho \times (Ent(\overset{-}{D})-\sum_{v=1}^{V}\overset{-}{r_{v}}Ent(\overset {-}{D^{v}}))\tag{28}
Gain(D,a)=ρ×Gain(D−,a)=ρ×(Ent(D−)−v=1∑Vrv−Ent(Dv−))(28)
那么上面给出的第一个问题,用式(28)就可以估算出来。
对于问题2:
若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子节点,且样本权值在子节点中保持为
w
x
w_{x}
wx。若样本x在划分属性a上的取值未知,则将x同时划入所有子节点,且样本权值在与属性值
a
v
a^{v}
av对应的子节点中调整为
r
v
−
⋅
w
x
\overset{-}{r_{v}}\cdot w_{x}
rv−⋅wx;直观的看,这就是让同一个样本以不同的概率划入到不同的子节点中去。
用一个实例说明C4.5是怎样利用上述思想来解决缺失值的(直接截图了!!!!)
生成的决策树如下: