文章目录
Decision Tree
决策树模型是一种基本的回归和分类方法。顾名思义是一种树形结构,在分类问题中,决策树中的非叶节点代表了数据集的特征,叶节点代表了最终的分类。它的有点主要是可解释性很强,分类速度较快。
通常决策树学习分为3个步骤:
- 特征选择
- 生成决策树
- 决策树剪枝
主要包括ID3,C4.5和CART三个算法。
一、几个概念
1. 信息熵
熵简单来说就是系统的复杂程度,复杂程度越高熵就高,也可以理解为系统所包含的信息量。很直观地来看,如果复杂程度低,那么说明系统比较简单,包含的信息量自然也就少了。例如一个包含了1个齿轮的系统和一个包含了十个齿轮组合的系统,显而易见地前者信息量较低。
在概率论中,两个互相独立的随机事件同时发生时,假设事件1和事件2所包含的信息量分别为
h
(
x
1
)
,
h
(
x
2
)
h(x_1),h(x_2)
h(x1),h(x2),那么他们同时发生时的熵为:
h
(
x
1
,
x
2
)
=
h
(
x
1
)
+
h
(
x
2
)
h(x_1,x_2)=h(x_1)+h(x_2)
h(x1,x2)=h(x1)+h(x2)
同时,如果这两个事件是独立的话,那两件事同时发生的概率就是:
p
(
x
1
,
x
2
)
=
p
(
x
1
)
p
(
x
2
)
p(x_1,x_2)=p(x_1)p(x_2)
p(x1,x2)=p(x1)p(x2)
从这里可以看出,熵和概率的关系是对数的关系,由此我们可以得到信息量公式:
h
(
x
)
=
−
log
p
(
x
)
h(x)=-\log p(x)
h(x)=−logp(x)
它代表了随机事件包含的信息量。假设
X
X
X是一个取有限个值的离散随机变量,服从以下分布:
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
.
.
.
,
n
P(X=x_i)=p_i,\quad i=1,2,...,n
P(X=xi)=pi,i=1,2,...,n
那么信息熵则代表了我们对事件可能产生的信息量的期望:
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X) = -\sum_{i=1}^{n}p_i\log p_i
H(X)=−i=1∑npilogpi
这就是信息熵。从这里可以看出信息熵和随机变量
X
X
X本身没有关系,只和它的概率分布有关,所以也可以写成:
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(p) = -\sum_{i=1}^{n}p_i\log p_i
H(p)=−i=1∑npilogpi
对数底不同,熵的单位也不同(以2为底和以
e
e
e为底信息熵的单位分别为比特(bit)和纳特(nat))。熵越大则说明随机变量的不确定性就越大。从另一个方面也可以理解成
X
X
X的多样性,极端情况下如果
X
X
X仅有一个取值,也就是
X
X
X是确定事件,概率为1,那么它的熵就为0,也就不存在不确定性。
2. 条件熵
设有随机变量
(
X
,
Y
)
(X,Y)
(X,Y),联合概率分布为:
P
(
X
=
x
i
,
Y
=
y
j
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
P(X=x_i,Y=y_j)=p_{ij},\quad i=1,2,...,n;\quad j=1,2,...,m
P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,m
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)则表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性,也就是在
X
X
X给定条件下
Y
Y
Y的条件概率分布的熵对
X
X
X的数学期望:
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^{n}p_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)
如果熵和条件熵中的概率是从数据集中使用估计的方法得到,那么对应的熵就是经验熵和经验条件熵。
3. 信息增益
信息增益表示得知特征 X X X的信息而使 Y Y Y的不确定性减少的程度,也就是 Y Y Y熵减的程度。
特征
A
A
A对训练数据集
D
D
D的信息增益
g
(
D
,
A
)
g(D,A)
g(D,A),定义为集合
D
D
D的经验熵
H
(
D
)
H(D)
H(D)与在
A
A
A确定的情况下
D
D
D的条件经验熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)只差:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
(1.1)
g(D,A)=H(D)-H(D|A) \tag{1.1}
g(D,A)=H(D)−H(D∣A)(1.1)
信息增益可以在决策树中用来进行特征选择。在决策树算法中,我们每次选择的特征就是使信息不确定性减少最大的那个,也就是信息增益最大的那个特征,根据我们在1中的分析,即选择能够取较多值的特征。
信息增益的计算:
-
计算数据集 D D D的经验熵 H ( D ) H(D) H(D):
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K \frac{|C_k|}{|D|}\log \frac{|C_k|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣log∣D∣∣Ck∣ -
计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(D∣A):
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log ∣ D i k ∣ ∣ D i ∣ H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i) = -\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}\log \frac{|D_{ik}|}{|D_i|} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log∣Di∣∣Dik∣ -
计算信息增益:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
4. 信息增益比
特征
A
A
A对于数据集
D
D
D的信息增益比
g
R
(
D
,
A
)
{\large g} _R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与数据集
D
D
D关于特征
A
A
A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
(1.2)
{\large g}_R(D,A)=\frac{g(D,A)}{H_A(D)} \tag{1.2}
gR(D,A)=HA(D)g(D,A)(1.2)
其中:
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
log
∣
D
i
∣
∣
D
∣
(1.3)
H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log \frac{|D_i|}{|D|} \tag{1.3}
HA(D)=−i=1∑n∣D∣∣Di∣log∣D∣∣Di∣(1.3)
n
n
n是特征
A
A
A的取值个数,
∣
D
i
∣
/
∣
D
∣
|D_i|/|D|
∣Di∣/∣D∣是特征
A
A
A的一个取值的样本数目在数据集中的比例。
二、决策树算法
决策树顾名思义是一个树形结构,它的生成可以按照以下步骤:
- 选择一个特征,特征有多个取值,把属于同一个取值的特征划分到一个类别,作为下一层的节点
- 在新的一层上,再选取特征,按照同样规则划分节点
- 最后通过特征划分得到不同路径,根据样本标签确定类别。类别在最下面的叶子节点上。
这只是一个大致的过程,可以看出,我们关键要解决的问题就是如何进行特征选择。在引论中我们给出了两个概念,信息增益和信息增益比。他们都可以作为特征选择的标准。
1. ID3算法
ID3算法使用信息增益作为特征选择的标准。在选择的过程中,分别对每个特征计算信息增益,选择信息增益最大的作为当前节点特征,并由它的不同取值建立叶节点。然后再对叶节点递归使用这个方法,直到所有的特征信息增益很小或者没有可选特征为止。
给定数据集 D D D,特征集 A A A,阈值 ε \varepsilon ε,生成决策树 T T T。具体过程如下,:
- 如果 D D D中所有样本属于同一类别 C k C_k Ck,那么决策树 T T T是一棵单节点树,将 C k C_k Ck作为节点标记,并返回 T T T.
- 如果 A = ∅ A=\emptyset A=∅,则 T T T是单节点树,并将 D D D中数目最多的那一类 C k C_k Ck作为节点标记,返回 T T T.
- 否则,计算各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag.
- 如果 A g A_g Ag的信息增益小于 ε \varepsilon ε,那么 T T T是单节点树,并将 D D D中数目最多的那一类 C k C_k Ck作为节点标记,返回 T T T.
- 否则,对 A g A_g Ag的每一个可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将 D D D划分成若干非空子集 D i D_i Di,将 D i D_i Di中样本数最大的类作为标记,建立子节点。由节点以及其父节点构成树 T T T,返回 T T T.
- 对第 i i i个子节点,以 D i D_i Di为训练集,以 A − A g A-{A_g} A−Ag为特征集,重复上面步骤,得到子树 T i T_i Ti,并返回。
关于“并将 D D D中数目最多的那一类 C k C_k Ck作为节点标记”:如果特征 A A A只有两类,0和1,那么我们根据0和1将数据集划分后,得到 D 0 D_0 D0和 D 1 D_1 D1,很自然的 D 0 D_0 D0中包含的是特征为0的样本, D 1 D_1 D1中是包含特征为1的样本。
2. 作业演示
我们以如下数据集为例,使用ID3算法构建决策树
数据集 D = { ( x ( 1 ) , y ( 1 ) ) , . . . ( x ( 14 ) , y ( 14 ) ) } D=\{(x^{(1)},y^{(1)}),...(x^{(14)},y^{(14)})\} D={(x(1),y(1)),...(x(14),y(14))}
特征集 A = { A p p e a r a n c e ( A 1 ) , I n c o m e ( A 2 ) , A g e ( A 3 ) , P r o f e s s i o n ( A 4 ) } A=\{Appearance(A_1), Income(A_2), Age(A_3), Profession(A_4)\} A={Appearance(A1),Income(A2),Age(A3),Profession(A4)}
类别集合 Y = { − 1 , 1 } Y=\{-1,1\} Y={−1,1},假设受欢迎为正样本,共9个,负样本为5个
Step1. 计算数据集 D D D的经验熵 H ( D ) H(D) H(D):
H ( D ) = − 9 14 log 2 9 14 − 5 14 log 2 5 14 = 0.940 H(D) = -\frac9{14} \log_2 \frac9{14}-\frac5{14}\log_2 \frac5{14} = 0.940 H(D)=−149log2149−145log2145=0.940
Step2. 计算各个特征对 D D D的信息增益
首先是
A
1
A_1
A1,它有3个可能的取值,分别是
D
A
1
(
1
)
(
A
1
=
G
r
e
a
t
)
=
4
,
D
A
1
(
2
)
(
A
1
=
G
o
o
d
)
=
5
,
D
A
1
(
3
)
(
A
1
=
A
h
)
=
5
D^{(1)}_{A_1}(A_1=Great)=4,D^{(2)}_{A_1}(A_1=Good)=5,D^{(3)}_{A_1}(A_1=Ah)=5
DA1(1)(A1=Great)=4,DA1(2)(A1=Good)=5,DA1(3)(A1=Ah)=5,分别计算这三个取值的信息熵:
g
(
D
,
A
1
)
=
H
(
D
)
−
[
4
14
H
(
D
A
1
(
1
)
)
+
5
14
H
(
D
A
1
(
2
)
)
+
5
14
H
(
D
A
1
(
3
)
)
]
g(D,A_1) = H(D) - \left[\frac4{14}H(D^{(1)}_{A_1})+\frac5{14}H(D^{(2)}_{A_1})+\frac5{14}H(D^{(3)}_{A_1})\right]
g(D,A1)=H(D)−[144H(DA1(1))+145H(DA1(2))+145H(DA1(3))]
D
A
1
(
1
)
D^{(1)}_{A_1}
DA1(1)中包含4个样本,正样本为4,负样本为0;
D
A
1
(
2
)
D^{(2)}_{A_1}
DA1(2)包含5个样本,正样本为2,负样本为3;
D
A
1
(
3
)
D^{(3)}_{A_1}
DA1(3)包含5个样本,正样本为3,负样本为2:
H
(
D
A
1
(
1
)
)
=
−
4
4
log
2
4
4
=
0
H
(
D
A
1
(
2
)
)
=
−
2
5
log
2
2
5
−
3
5
log
2
3
5
=
0.971
H
(
D
A
1
(
3
)
)
=
−
3
5
log
2
3
5
−
2
5
log
2
2
5
=
0.971
H(D^{(1)}_{A_1}) = -\frac44 \log_2 \frac44=0 \\ H(D^{(2)}_{A_1}) = -\frac25 \log_2 \frac25-\frac35 \log_2 \frac35 =0.971\\ H(D^{(3)}_{A_1}) = -\frac35 \log_2 \frac35 - \frac25 \log_2 \frac25=0.971
H(DA1(1))=−44log244=0H(DA1(2))=−52log252−53log253=0.971H(DA1(3))=−53log253−52log252=0.971
则:
g
(
D
,
A
1
)
=
H
(
D
)
−
H
(
D
∣
A
1
)
=
0.940
−
0.693
=
0.246
g(D,A_1) = H(D) - H(D|A_1) = 0.940-0.693=0.246
g(D,A1)=H(D)−H(D∣A1)=0.940−0.693=0.246
同理,得到:
g
(
D
,
A
2
)
=
H
(
D
)
−
H
(
D
∣
A
2
)
=
H
(
D
)
−
[
4
14
H
(
D
A
2
(
1
)
)
+
6
14
H
(
D
A
2
(
2
)
)
+
4
14
H
(
D
A
2
(
3
)
)
]
=
0.029
g
(
D
,
A
3
)
=
H
(
D
)
−
H
(
D
∣
A
3
)
=
H
(
D
)
−
[
7
14
H
(
D
A
3
(
1
)
)
+
7
14
H
(
D
A
3
(
2
)
)
]
=
0.151
g
(
D
,
A
4
)
=
H
(
D
)
−
H
(
D
∣
A
4
)
=
H
(
D
)
−
[
6
14
H
(
D
A
4
(
1
)
)
+
8
14
H
(
D
A
4
(
2
)
)
]
=
0.048
g(D,A_2) = H(D) - H(D|A_2) = H(D) - \left[\frac4{14}H(D^{(1)}_{A_2})+\frac6{14}H(D^{(2)}_{A_2})+\frac4{14}H(D^{(3)}_{A_2})\right]=0.029\\ g(D,A_3) = H(D) - H(D|A_3) = H(D) - \left[\frac7{14}H(D^{(1)}_{A_3})+\frac7{14}H(D^{(2)}_{A_3})\right] = 0.151\\ g(D,A_4) = H(D) - H(D|A_4) = H(D) - \left[\frac6{14}H(D^{(1)}_{A_4})+\frac8{14}H(D^{(2)}_{A_4})\right] = 0.048
g(D,A2)=H(D)−H(D∣A2)=H(D)−[144H(DA2(1))+146H(DA2(2))+144H(DA2(3))]=0.029g(D,A3)=H(D)−H(D∣A3)=H(D)−[147H(DA3(1))+147H(DA3(2))]=0.151g(D,A4)=H(D)−H(D∣A4)=H(D)−[146H(DA4(1))+148H(DA4(2))]=0.048
比较4者,信息增益最大的是
g
(
D
,
A
1
)
g(D,A_1)
g(D,A1),即把
A
1
A_1
A1特征选择的标准对数据集进行划分。有三个取值,按照Ah,Good,Great将数据集划分成3个子集为
D
1
′
,
D
2
′
,
D
3
′
D'_1,D'_2,D'_3
D1′,D2′,D3′。他们分别包含的样本是:
D
1
′
=
{
4
,
5
,
6
,
10
,
14
}
D
2
′
=
{
1
,
2
,
8
,
9
,
11
}
D
3
′
=
{
3
,
7
,
12
,
13
}
D'_1=\{4,5,6,10,14\} \\ D'_2=\{1,2,8,9,11\} \\ D'_3=\{3,7,12,13\}
D1′={4,5,6,10,14}D2′={1,2,8,9,11}D3′={3,7,12,13}
对这3个子集分别重复上述方法。对
D
1
′
D'_1
D1′有:
H
(
D
1
′
)
=
−
3
5
log
2
3
5
−
2
5
log
2
2
5
=
0.971
g
(
D
1
′
,
A
2
)
=
0.971
−
0.951
=
0.020
g
(
D
1
′
,
A
3
)
=
0.971
−
0.951
=
0.020
g
(
D
1
′
,
A
4
)
=
0.971
−
0
=
0.971
H(D'_1) = -\frac35\log_2 \frac35 - \frac25\log_2 \frac25=0.971\\ g(D'_1,A_2) = 0.971-0.951=0.020 \\ g(D'_1,A_3) = 0.971-0.951=0.020 \\ g(D'_1,A_4) = 0.971-0=0.971
H(D1′)=−53log253−52log252=0.971g(D1′,A2)=0.971−0.951=0.020g(D1′,A3)=0.971−0.951=0.020g(D1′,A4)=0.971−0=0.971
所以对Ah这个叶子节点,我们选择Profession,
A
4
A_4
A4这个特征划分。
同理对于Good这个节点的数据集
D
2
′
D'_2
D2′:
H
(
D
2
′
)
=
−
2
5
log
2
2
5
−
3
5
log
2
3
5
=
0.971
g
(
D
2
′
,
A
2
)
=
0.971
−
0.4
=
0.571
g
(
D
2
′
,
A
3
)
=
0.971
−
0
=
0.971
g
(
D
2
′
,
A
4
)
=
0.971
−
0.951
=
0.020
H(D'_2) = -\frac25\log_2 \frac25 - \frac35\log_2 \frac35=0.971\\ g(D'_2,A_2) = 0.971-0.4=0.571 \\ g(D'_2,A_3) = 0.971-0=0.971 \\ g(D'_2,A_4) = 0.971-0.951=0.020
H(D2′)=−52log252−53log253=0.971g(D2′,A2)=0.971−0.4=0.571g(D2′,A3)=0.971−0=0.971g(D2′,A4)=0.971−0.951=0.020
对于Good这个叶子节点选择Age,
A
3
A_3
A3作为特征划分。
同理对于Great这个叶子节点的数据集 D 3 ′ D'_3 D3′,可以看到样本全部都是正样本(长得好看才是王道啊!),所以直接作为叶子节点。
Step3. 建立决策树
D 1 ′ D'_1 D1′使用 A 4 A_4 A4划分完成后,正负样本全被分开,都可以直接做为叶子节点了。 D 2 ′ , D 3 ′ D'_2,D'_3 D2′,D3′同理。由此可以建立如下决策树:
至此就完成了ID3算法建立决策树的过程。
3. C4.5算法
从ID3算法的过程可以看到,我们选择特征划分的时候,比较倾向于选择数据集中取值较多的特征,特征取值数相同的情况下就选择样本标签较多的特征,这样就会使划分后的数据比较“纯”,分的类别多,那么子节点的纯度也就会更高。
那如果我们选择ID作为特征划分,那么就会把每个样本都分作一类,那么它的增益是多少呢?
g
(
D
,
I
D
)
=
H
(
D
)
−
H
(
D
∣
I
D
)
=
H
(
D
)
−
[
1
14
∗
0
+
.
.
.
+
1
14
∗
0
]
=
0.940
g(D,ID)=H(D) - H(D|ID) =H(D)-[\frac1{14}*0+...+\frac1{14}*0]=0.940
g(D,ID)=H(D)−H(D∣ID)=H(D)−[141∗0+...+141∗0]=0.940
可见它的增益很大,因为每个样本的编号都不一样,划分后每个叶子节点都只有一个样本,纯度就很高。但是这样的决策树显然没有泛化能力。所以我们又引入了一个新的划分方法,那就是信息增益比,C4.5算法就是使用它来对特征进行划分。
前面我们介绍了信息增益比的计算方法,分母就是特征的固有值(Intrinsic value),这里我们计算一下编号的固有值:
H
I
D
(
D
)
=
14
∗
1
14
log
2
1
14
=
3.807
H_{ID}(D) = 14 * \frac1{14} \log_2 \frac1{14} = 3.807
HID(D)=14∗141log2141=3.807
同样,可以得到第一次分裂其他4个特征的固有值:
H
A
1
(
D
)
=
1.577
H
A
2
(
D
)
=
1.557
H
A
3
(
D
)
=
1.000
H
A
4
(
D
)
=
0.985
H_{A_1}(D) = 1.577 \\ H_{A_2}(D) = 1.557 \\ H_{A_3}(D) = 1.000 \\ H_{A_4}(D) = 0.985 \\
HA1(D)=1.577HA2(D)=1.557HA3(D)=1.000HA4(D)=0.985
可以看出,信息增益比这个值当特征的取值数目多的时候就会变大,所以它对取值少的特征有所偏好。
C4.5算法并不是直接选择增益率大的特征,而是先从候选特征中找到信息增益高于平均水平的特征,然后从里面选择增益率最高的。
4. CART(Classification And Regression Tree)算法
CART算法建立的决策树能够应用在回归和分类问题上。和使用ID3和C4.5建立的多叉决策树不同,CART算法建立的是二叉树。它不使用特征不同取值对节点进行分裂,而是判断是否满足当前特征,然后划分节点。
4.1 CART分类树
CART分类树使用基尼(Gini)指数来选择最优特征。假设有
K
K
K个类别,样本点属于
K
K
K的概率为
p
k
p_k
pk,则基尼指数定义如下:
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
{\rm Gini}(p) = \sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于给定的数据集
D
D
D,其基尼指数为:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
(2.1)
{\rm Gini} (D) = 1-\sum_{k=1}^K\left(\frac{|C_k|}{|D|} \right)^2 \tag{2.1}
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2(2.1)
C
k
C_k
Ck是属于第
k
k
k类样本点的个数。
如果把
D
D
D按照是否满足特征
A
A
A的某个取值
a
a
a划分成两个子集
D
1
,
D
2
D_1,D_2
D1,D2,那么在特征
A
A
A的条件下,集合
D
D
D的基尼指数就是:
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
(2.2)
{\rm Gini}(D,A)=\frac{|D_1|}{|D|}{\rm Gini}(D_1)+\frac{|D_2|}{|D|}{\rm Gini}(D_2) \tag{2.2}
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)(2.2)
基尼指数也表示了集合的不确定性,基尼指数越大,集合的不确定性就越大。
算法过程:
- 使用公式(2.1)和(2.2)计算现有特征的基尼指数。对某个特征 A A A,计算它的一个取值 a a a划分训练集后的基尼指数
- 对所有可能的特征 A A A以及所有可能的切分点 a a a,选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点。根据最优特征和最优切分点划分数据仅
- 递归调用上述步骤,直到满足停止条件。
示例:
以女婿受欢迎与否数据集来演示。对
A
1
(
A
p
p
e
a
r
a
n
c
e
)
A_1(Appearance)
A1(Appearance),有:
G
i
n
i
(
D
,
A
1
=
A
h
)
=
5
14
G
i
n
i
(
D
1
)
+
9
14
G
i
n
i
(
D
2
)
=
5
14
(
2
×
3
5
×
(
1
−
3
5
)
)
+
9
14
(
2
×
6
9
×
(
1
−
6
9
)
)
=
0.457
{\rm Gini}(D,A_1=Ah) = \frac5{14}{\rm Gini}(D_1)+\frac9{14}{\rm Gini}(D_2) \\ = \frac5{14}(2\times \frac35\times (1-\frac35)) + \frac9{14}(2\times \frac69 \times (1-\frac69)) = 0.457
Gini(D,A1=Ah)=145Gini(D1)+149Gini(D2)=145(2×53×(1−53))+149(2×96×(1−96))=0.457
同理,计算
A
1
A_1
A1另外两个取值的基尼指数:
G
i
n
i
(
D
,
A
1
=
G
o
o
d
)
=
5
14
(
2
×
2
5
×
(
1
−
2
5
)
)
+
9
14
(
2
×
7
9
×
(
1
−
7
9
)
)
=
0.394
G
i
n
i
(
D
,
A
1
=
G
r
e
a
t
)
=
0.357
{\rm Gini}(D,A_1=Good) = \frac5{14}(2\times \frac25\times (1-\frac25))+\frac9{14}(2\times \frac79\times (1-\frac79))=0.394 \\ {\rm Gini}(D,A_1=Great) = 0.357
Gini(D,A1=Good)=145(2×52×(1−52))+149(2×97×(1−97))=0.394Gini(D,A1=Great)=0.357
所以可以选择
A
1
=
0.357
A_1=0.357
A1=0.357作为
A
1
A_1
A1的最优切分点。对其他几个特征,进行同样过程:
G
i
n
i
(
D
,
A
2
=
L
o
w
)
=
0.443
G
i
n
i
(
D
,
A
2
=
G
o
o
d
)
=
0.458
G
i
n
i
(
D
,
A
2
=
G
r
e
a
t
)
=
0.45
G
i
n
i
(
D
,
A
3
=
Y
o
u
n
g
e
r
)
=
0.367
G
i
n
i
(
D
,
A
3
=
O
l
d
e
r
)
=
0.367
G
i
n
i
(
D
,
A
4
=
U
n
s
t
a
b
l
e
)
=
0.429
G
i
n
i
(
D
,
A
4
=
S
t
e
a
d
y
)
=
0.429
{\rm Gini}(D,A_2=Low) = 0.443\\ {\rm Gini}(D,A_2=Good) = 0.458\\ {\rm Gini}(D,A_2=Great) = 0.45\\ \\ {\rm Gini}(D,A_3=Younger) = 0.367\\ {\rm Gini}(D,A_3=Older) = 0.367\\ \\ {\rm Gini}(D,A_4=Unstable) = 0.429\\ {\rm Gini}(D,A_4=Steady) = 0.429 \\
Gini(D,A2=Low)=0.443Gini(D,A2=Good)=0.458Gini(D,A2=Great)=0.45Gini(D,A3=Younger)=0.367Gini(D,A3=Older)=0.367Gini(D,A4=Unstable)=0.429Gini(D,A4=Steady)=0.429
综合上面所有的基尼指数,我们选择最小的。即
A
1
A_1
A1的
G
r
e
a
t
Great
Great取值作为最优切分点。将样本划分后,再次计算最终得到决策树。
4.2 CART回归树
CART回归树使用平方误差最小化来作为节点分裂的标准生成二叉树。假设 X X X和 Y Y Y分别为输入和输出变量,其中 Y Y Y是连续变量。我们的目标就是对于 X X X中的任意输入特征 A A A,使用任意划分点划分数据集得到子集 D 1 , D 2 D_1,D_2 D1,D2,然后在两个数据集上分别求平方误差,同时使 D 1 , D 2 D_1,D_2 D1,D2两个集合平方误差最小的划分点作为叶子的最优特征和最优特征划分点。
具体来说,如果假设已经将特征空间划分成了
M
M
M个单元
R
1
,
R
2
,
.
.
.
,
R
M
R_1,R_2,...,R_M
R1,R2,...,RM,并且在每个单元
R
m
R_m
Rm上都有一个固定的输出值
c
m
c_m
cm(可以通过求平均值或者中位数来的得到),于是回归树的模型就是:
f
(
x
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(x) = \sum_{m=1}^Mc_mI(x\in R_m)
f(x)=m=1∑McmI(x∈Rm)
当某个样本属于
R
m
R_m
Rm的时候,就输出
c
m
c_m
cm,而不是分类树时输出类别。当特征空间的划分确定时,可以使用平方误差
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\sum_{x_i\in R_m}(y_i-f(x_i))^2
∑xi∈Rm(yi−f(xi))2来表示回归树的预测误差。所以就可以使用平方误差最小的准则求解每个单元的最优输出。
输出的最优值可以采用
R
m
R_m
Rm中所有样本
x
i
x_i
xi对应的输出
y
i
y_i
yi的均值来表示:
c
^
m
=
a
v
e
(
y
i
∣
x
i
∈
R
m
)
\hat c_m = {\rm ave}(y_i|x_i\in R_m)
c^m=ave(yi∣xi∈Rm)
下面说明如何对特征空间进行划分。选择第
j
j
j个特征取值
x
(
j
)
x^{(j)}
x(j)和它的取值
s
s
s,作为切分变量和切分点,并定义两个区域:
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
≤
s
}
,
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1(j,s)=\{x|x^{(j)}\leq s\},\quad R_2(j,s) = \{x|x^{(j)}\gt s\}
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}
这里需要说明的是,
x
(
j
)
x^{(j)}
x(j)是特征空间某一特征的取值。然后我们就可以根据上式寻找最优的切分特征和切分点。只需要求解:
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\min_{j,s}\left[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+ \min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2\right]
j,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
然后就可以得到最优切分点
s
s
s,得到了切分后两个节点的输出。
算法过程:
在特征空间中将每个区域递归地划分两个两个子区域并确定子区域上的输出值,构建二叉决策树。
-
选择最优切分变量和最优切分点,求解:
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}\left[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2+ \min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2\right] j,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
选择使上式达到最小的切分变量和切分点,也就是 ( j , s ) (j,s) (j,s). -
对上述得到的 ( j , s ) (j,s) (j,s)进行划分得到两个区域和输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m R_1(j,s)=\{x|x^{(j)}\leq s\},\quad R_2(j,s) = \{x|x^{(j)}\gt s\} \\ \hat c_m=\frac1{N_m}\sum_{x_i\in R_m(j,s)}y_i,\quad x\in R_m R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}c^m=Nm1xi∈Rm(j,s)∑yi,x∈Rm -
继续对子区域调用上面两个步骤,直到满足停止条件。
算法示例:
以《统计学习方法》习题5.2为例,构建CART决策树:
首先根据给定的输入变量,初始化切分点
s
=
1.5
,
2.5
,
3.5
,
4.5
,
6.5
,
7.5
,
8.5
,
9.5
s=1.5,2.5,3.5,4.5,6.5,7.5,8.5,9.5
s=1.5,2.5,3.5,4.5,6.5,7.5,8.5,9.5.对各个切分点,求出
R
1
,
R
2
,
c
1
,
c
2
R_1,R_2,c_1,c_2
R1,R2,c1,c2以及切分后的MSE,例如当切分点为
s
=
2.5
s=2.5
s=2.5时,
R
1
=
{
1
,
2
}
,
R
2
=
{
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
}
R_1=\{1,2\},R_2=\{3,4,5,6,7,8,9,10\}
R1={1,2},R2={3,4,5,6,7,8,9,10},那么求得
c
1
,
c
2
c_1,c_2
c1,c2为:
c
1
=
1
N
m
∑
x
i
∈
R
m
(
j
,
s
)
y
i
=
1
2
∑
x
i
∈
R
1
(
1
,
2.5
)
(
4.50
+
4.75
)
=
4.63
c
2
=
1
8
×
(
4.91
+
5.34
+
5.80
+
7.05
+
7.90
+
8.23
+
8.70
+
9.00
)
=
7.12
m
s
e
(
s
)
=
(
4.50
−
4.63
)
2
+
(
4.75
−
4.63
)
2
+
(
7.12
−
4.91
)
2
+
.
.
.
+
(
7.12
−
9.00
)
2
=
17.70
c_1=\frac1{N_m}\sum_{x_i\in R_m(j,s)}y_i = \frac12\sum_{x_i\in R_1(1,2.5)}(4.50+4.75)=4.63 \\ c_2=\frac1{8}\times(4.91+5.34+5.80+7.05+7.90+8.23+8.70+9.00)=7.12 \\ mse(s)=(4.50-4.63)^2+(4.75-4.63)^2+(7.12-4.91)^2+...+(7.12-9.00)^2=17.70
c1=Nm1xi∈Rm(j,s)∑yi=21xi∈R1(1,2.5)∑(4.50+4.75)=4.63c2=81×(4.91+5.34+5.80+7.05+7.90+8.23+8.70+9.00)=7.12mse(s)=(4.50−4.63)2+(4.75−4.63)2+(7.12−4.91)2+...+(7.12−9.00)2=17.70
依次进行下去,得到
s
s
s和
m
s
e
(
s
)
mse(s)
mse(s)的计算结果:
当
s
=
5.5
s=5.5
s=5.5时,
R
1
=
{
1
,
2
,
3
,
4
,
5
}
,
R
2
=
{
6
,
7
,
8
,
9
,
10
}
R_1=\{1,2,3,4,5\},R_2=\{6,7,8,9,10\}
R1={1,2,3,4,5},R2={6,7,8,9,10},回归树为:
f
1
(
x
)
=
T
1
(
x
)
=
{
5.06
,
x
<
5.5
8.18
,
x
≥
5.5
f_1(x) = T_1(x) = \begin{cases} 5.06,x \lt 5.5 \\ 8.18,x \geq 5.5 \\ \end{cases} \\
f1(x)=T1(x)={5.06,x<5.58.18,x≥5.5
然后我们可以用
f
1
(
x
)
f_1(x)
f1(x)来计算残差:
然后得到均方误差MSE:
L
(
y
,
f
1
(
x
)
)
=
∑
i
=
1
10
(
y
i
−
f
1
(
x
i
)
)
2
=
3.36
L(y,f_1(x))=\sum_{i=1}^{10}(y_i-f_1(x_i))^2=3.36
L(y,f1(x))=i=1∑10(yi−f1(xi))2=3.36
后面的步骤和上面相同,只不过采用的是残差来计算。直到均方误差满足要求。
三、决策树剪枝
决策树通过判断特征来递归生成,直到不能继续下去为止。这样产生的决策树对训练集预测通常很准确,但是对测试集没那么准确,容易出现过拟合的现象。在学习中决策树过多考虑到如果将训练样本正确分类,却忽视了模型的复杂度,使学到的模型过于复杂,所以就需要剪枝算法。
决策树的剪枝算法通过最小化决策树的整体损失函数来实现。
1. 剪枝算法
设树
T
T
T的叶节点个数为
∣
T
∣
|T|
∣T∣,
t
t
t是其中一个叶节点,包含
N
t
N_t
Nt个样本点,其中属于
k
k
k类的样本点有
N
t
k
N_{tk}
Ntk个。
H
t
(
T
)
H_t(T)
Ht(T)为叶节点
t
t
t的经验熵,
α
≥
0
\alpha \geq 0
α≥0为参数,那么决策树的整体损失函数可以写成:
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
=
∑
t
=
1
∣
T
∣
N
t
(
−
∑
k
N
t
k
N
t
log
N
t
k
N
t
)
+
α
∣
T
∣
=
C
(
T
)
+
α
∣
T
∣
C_{\alpha}(T)=\sum_{t=1}^{|T|}N_tH_t(T) + \alpha|T| \\ =\sum_{t=1}^{|T|}N_t(-\sum_k\frac{N_{tk}}{N_t}\log \frac{N_{tk}}{N_t}) + \alpha|T| \\ =C(T)+\alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣=t=1∑∣T∣Nt(−k∑NtNtklogNtNtk)+α∣T∣=C(T)+α∣T∣
上式中,
C
(
T
)
C(T)
C(T)表示模型的预测误差,
∣
T
∣
|T|
∣T∣表示模型的复杂程度,
α
\alpha
α是超参数,控制两者之间的平衡。
剪枝就是通过控制 α \alpha α的取值来对模型进行简化。通常剪枝算法是在决策树建立完成后进行,通过计算每个叶节点的损失函数和回缩到父节点的损失函数,两者比较,如果回缩后损失函数较小,那么就进行剪枝。
2. CART剪枝
CART剪枝的大致过程是:首先使用CART算法建立决策树,然后从决策树的底部叶子节点开始不断剪枝,生成一个子树序列。然后使用交叉验证的方法选择最有子树。
参考:
李航《统计学习方法》,定理以及算法流程来自本书
周志华《机器学习》