分类与回归树(classification and regression tree, CART),既可以用于分类也可以用于回归。它是在给定输入随机变量
X
X
X条件下输出随机变量
Y
Y
Y的条件概率分布的学习方法。CART 假设决策树时二叉树,内部结点特征的取值为“是”和“否,左分支是取值为“是”的分支,右分支为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间(特征空间)划分为有限个单元,并在这些单元上确定预测的概率分布,也就是给定条件下输出的条件概率分布。
CART算法由以下两步组成:
- 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
CART生成
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。
1. 回归树的生成
假设
X
X
X与
Y
Y
Y分别为输入和输出变量,并且
Y
Y
Y是连续变量,给定训练数据集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
D={(x_1, y_1),(x_2, y_2),...,(x_N, y_N)}
D=(x1,y1),(x2,y2),...,(xN,yN)
考虑如何生成回归树。
当输入空间的划分确定时,可以用平方误差
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\underset{x_i\in R_m}{\sum}(y_i-f(x_i))^2
xi∈Rm∑(yi−f(xi))2表示训练数据的预测误差,用平方误差最小的准则求解每个单元山最优输出值。易知,单元
R
m
R_m
Rm上输出值
c
m
c_m
cm中的最优输出值
c
‾
m
\overline c_m
cm是
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
)
\overline c_m = ave(y_i|x_i\in R_m)
cm=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) }<= s\} 和 R_2(j, s)=\{x|x^{(j)}>s\}
R1(j,s)={x∣x(j)<=s}和R2(j,s)={x∣x(j)>s}
然后寻找最优切分变量
j
j
j和最有切分点
s
s
s,具体地,求解
m
j
,
s
i
n
[
m
i
n
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
m
i
n
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\underset{j, s}min \Big [ \underset {c_1}{min}\sum_{x_i\in R_1(j, s)}(y_i-c_1)^2+ \underset {c_2}{min}\sum_{x_i\in R_2(j, s)}(y_i-c_2)^2 \Big]
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
对固定输入变量
j
j
j可以找到最优切分点
s
s
s.
c
1
‾
=
a
v
e
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
和
c
2
‾
=
a
v
e
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\overline{c_1}=ave(y_i|x_i\in R_1(j, s))和\overline{c_2}=ave(y_i|x_i\in R_2(j, s))
c1=ave(yi∣xi∈R1(j,s))和c2=ave(yi∣xi∈R2(j,s))
遍历所有输入变量,找到最优的切分变量
j
j
j, 构成一个对
(
j
,
s
)
(j, s)
(j,s). 依次将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足条件为止。这样就生成一棵回归树,这样的回归树称为最小二乘回归树。
2.分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
分类问题中,假设有
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
Gini(p) = \sum_{k=1}^K p_k(1-p_k)=1-\sum^K_{k=1} p^2_k
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
Gini(D)=1-\sum^K_{k=1}\Big(\frac{|C_k|}{|D|}\Big)^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
这里,
C
k
C_k
Ck是
D
D
D中属于第
k
k
k类的样本子集,
∣
C
k
∣
|C_k|
∣Ck∣表示集合
C
k
C_k
Ck的样本数量,同理
∣
D
∣
|D|
∣D∣。
K
K
K是类的个数。
如果集合
D
D
D根据特征
A
A
A是否取某一可能值
a
a
a被分割成
D
1
D_1
D1和
D
2
D_2
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
)
Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数
G
i
n
i
(
D
)
Gini(D)
Gini(D)表示集合
D
D
D的不确定性,基尼指数
G
i
n
i
(
D
,
A
)
Gini(D, A)
Gini(D,A)表示经
A
=
a
A=a
A=a分割后集合
D
D
D的不确定性。基尼指数越大,样本集合的不确定性也就越大。
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作:
(1)设结点的训练数据集为
D
D
D,计算现有特征对该数据集的基尼指数,此时,对每一个特征
A
A
A,对其可能取得每个值
a
a
a,根据样本点对
A
=
a
A=a
A=a的测试为“是”或“否”将
D
D
D分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,计算
A
=
a
A=a
A=a时的基尼指数。
(2)在所有可能的特征
A
A
A以及它们所有可能的切分点
a
a
a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1),(2), 直到满足停止条件
算法停止条件是结点的样本个数小于预定阈值或样本集的基尼指数小于预定阈值(基本属于同一类),或者没有更多特征。
剪枝
CART剪枝算法由两步组成:
- 从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根结点,形成一个子树序列 T 0 , T 1 , T 2 , . . . , T n {T_0, T_1, T_2,...,T_n} T0,T1,T2,...,Tn;
- 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
剪枝,形成子树序列
在剪枝过程中,计算子树的损失函数:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_{\alpha}(T)=C(T)+\alpha |T|
Cα(T)=C(T)+α∣T∣
其中,
T
T
T为任意子树,
C
(
T
)
C(T)
C(T)为对训练数据的预测误差(如基尼指数),|T|为子结点个数,
α
>
=
0
\alpha>=0
α>=0为用于权衡训练数据的拟合程度与模型的复杂度。
C
a
l
p
h
a
(
T
)
C_{alpha}(T)
Calpha(T)是参数为
α
\alpha
α时的子树
T
T
T的整体损失。
对固定的
α
\alpha
α,一定存在使损失函数
C
α
(
T
)
C_{\alpha}(T)
Cα(T)最小的子树,将其表示为
T
α
T_{\alpha}
Tα.从整体树
T
0
T_0
T0开始剪枝,对
T
0
T_0
T0的任意内部结点
t
t
t,以
t
t
t为单结点树的损失函数是
C
α
(
t
)
=
C
(
t
)
+
α
C_{\alpha}(t)=C(t)+\alpha
Cα(t)=C(t)+α
以
t
t
t为根结点的子树
T
t
T_t
Tt的损失函数是
C
α
(
T
t
)
=
C
(
T
t
)
+
α
∣
T
t
∣
C_{\alpha}(T_t)=C(T_t)+\alpha|T_t|
Cα(Tt)=C(Tt)+α∣Tt∣
当
α
=
0
\alpha=0
α=0及
α
\alpha
α充分小时,有不等式
C
α
(
T
t
)
<
C
α
(
t
)
C_{\alpha}(T_t)<C_{\alpha}(t)
Cα(Tt)<Cα(t)
当
α
\alpha
α增大时,在某一
α
\alpha
α有
C
α
(
T
t
)
=
C
α
(
t
)
C_{\alpha}(T_{t}) = C_{\alpha}(t)
Cα(Tt)=Cα(t)
只要
α
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
\alpha=\frac{C(t)-C(T_t)}{|T_t|-1}
α=∣Tt∣−1C(t)−C(Tt),
T
t
T_t
Tt与
t
t
t有相同的损失函数值,而
t
t
t比
T
t
T_t
Tt更可取,对
T
t
T_t
Tt进行剪枝。
**对
T
0
T_0
T0中的每一内部结点
t
t
t,计算
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}
g(t)=∣Tt∣−1C(t)−C(Tt)
它表示剪枝后整体损失函数减少的程度。在
T
0
T_0
T0中剪去
g
(
t
)
g(t)
g(t)最小的
T
t
T_t
Tt,将得到的子树作为
T
1
T_1
T1,同时将最小的
g
(
t
)
g(t)
g(t)设为
α
1
{\alpha}_1
α1。
T
1
T_1
T1为区间
[
α
1
,
α
2
)
[{\alpha}_1, {\alpha}_2)
[α1,α2)的最优子树。如此剪枝下去,直到根结点。
**
在剪枝得到的子树序列中通过交叉验证选取最优子树
利用独立的验证数据集,测试子树序列 T 0 , T 1 , . . . , T n T_0, T_1,...,T_n T0,T1,...,Tn中各颗子树的平方误差或基尼指数,平方误差或基尼指数最小的决策树被认为是最优的决策树。
参考:
《统计学习方法》李航