1.CART算法
分类回归树(classification and regression tree,CART)模型是应用广泛的决策树学习方法。CART同样由特征选择、树的生成以及剪枝组成,既可以用于分类也可以用于回归。同样属于决策树的一种。
CART算法由以下两步组成:
- 决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大;
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
1.1 CART生成
决策树的生成就是递归地构建二叉树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
1.1.1 回归树的生成
假设X和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)}
一棵回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。问题是怎样对输入空间进行划分。
选择第j个变量 x ( j ) x^{(j)} x(j)和它的取值s,作为划分变量(splitting variable)和切分点(splitting point),并定义两个区域:
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\}和R_2(j,s)=\{x|x^{(j)}>s\}
R1(j,s)={x∣x(j)≤s}和R2(j,s)={x∣x(j)>s}
然后寻找最优切分变量j和最优切分点s,具体的,求解
m
i
n
j
,
s
[
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
]
\displaystyle min_{j,s} [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]
minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]
对固定输入变量j可以找到最优切分点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
)
)
\hat c_1 = ave(y_i|x_i\in R_1(j,s))和\hat c_2 = ave(y_i|x_i\in R_2(j,s))
c^1=ave(yi∣xi∈R1(j,s))和c^2=ave(yi∣xi∈R2(j,s))
遍历所有输入变量,找到最优切分变量j,构成一个对(j,s)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足条件为止。这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树(least squares regression tree)。
算法:
输入:训练数据集D;
输出:回归树
f
(
x
)
f(x)
f(x)。
在训练集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉树:
1.选择最优切分变量j和最优切分点s,求解:
m
i
n
j
,
s
[
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
]
\displaystyle min_{j,s} [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]
minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]
遍历所有输入变量j,对固定的切分变量j扫描切分点s,选择使上式达到最小值的对(j,s)。
2.用选定的对(j,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\},R_2(j,s)=\{x|x^{(j)}>s\}
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}
c
^
m
=
1
N
m
∑
x
i
∈
R
m
(
j
,
s
)
y
i
,
x
∈
R
m
,
m
=
1
,
2
\hat c_m = \frac{1}{N_m} \sum_{x_i \in R_m(j,s)} y_i,x \in R_m,m=1,2
c^m=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2
3.继续对两个子区域调用步骤1,2,直至满足停止条件。
4.将输入空间划分为M个区域
R
1
,
R
2
,
⋅
⋅
⋅
,
R
M
R_1,R_2,···,R_M
R1,R2,⋅⋅⋅,RM,生成决策树:
f
(
x
)
=
∑
m
=
1
M
c
^
m
I
(
x
∈
R
m
)
f(x) = \sum_{m=1}^M \hat c_mI(x \in R_m)
f(x)=m=1∑Mc^mI(x∈Rm)
1.1.2 分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
基尼指数 ,分类问题中,假设有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=1}^K p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为:
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p)= 2p(1-p)
Gini(p)=2p(1−p)
对于给定样本集合D,其基尼指数为:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D)= 1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
如果样本集合D根据特征A是否取某一可能值a被分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
1
}
,
D
2
=
D
−
D
1
D_1= \{(x,y)\in D|A(x)=1\},D_2 = D -D_1
D1={(x,y)∈D∣A(x)=1},D2=D−D1
则在特征A的条件下,集合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)+DD2Gini(D2)
基尼指数
G
i
n
i
(
D
)
Gini(D)
Gini(D)表示集合D的不确定性,基尼指数
G
i
n
i
(
D
,
A
)
Gini(D,A)
Gini(D,A)表示经
A
=
a
A=a
A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性也就越大,这与熵类似。
下图显示二分类问题中基尼指数Gini§,熵之半和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似地表示分类误差率。
CART分类树生成算法
- 输入:训练数据集D,停止计算的条件;
- 输出:CART决策树。
根据训练数据集,从根节点开始,递归地对每个节点进行以下操作,构建二叉决策树: - 1.设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为是或否将D分割成 D 1 D_1 D1和 D 2 D_2 D2两部分,利用上式计算A=a时的基尼指数。
- 2.在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 3.对两个子节点递归地调用步骤1,2,直至满足停止条件;
- 4.生成CART决策树
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基于属于同一类),或者没有更多特征。
1.2 CART剪枝
- 输入:CART算法生成的决策树 T 0 T_0 T0
- 输出:最优决策树 T α T_\alpha Tα
算法流程:
- 1.设 k = 0 , T = T 0 k=0,T=T_0 k=0,T=T0;
- 2.设 α = + ∞ \alpha = +\infin α=+∞;
- 3.自下而上地对各内部节点t计算
C
(
T
t
)
C(T_t)
C(Tt)
,
∣ T t ∣ |T_t| ∣Tt∣以及
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = m i n ( α , g ( t ) ) g(t)= \frac{C(t)-C(T_t)}{|T_t|-1} \\ \alpha = min(\alpha,g(t)) g(t)=∣Tt∣−1C(t)−C(Tt)α=min(α,g(t))
- 4.对 g ( t ) = α g(t)=\alpha g(t)=α的内部节点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T;
- 5.设 k = k + 1 , α k = α , T k = T k=k+1,\alpha_k=\alpha,T_k=T k=k+1,αk=α,Tk=T;
- 6.如果 T k T_k Tk不是由根结点及两个叶结点构成的树,则回到步骤2;否则令 T k = T n T_k=T_n Tk=Tn;
- 7.采用交叉验证法在子树序列 T 0 , T 1 , ⋅ ⋅ ⋅ , T n T_0,T_1,···,T_n T0,T1,⋅⋅⋅,Tn中选择最优子树 T α T_\alpha Tα。
参考:《统计学习方法,第二版》李航