CART分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
**基尼指数:**分类问题中,假设有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) =\displaystyle\sum_{k=1}^{K}p_k(1-p_k)=1-\displaystyle\sum_{k=1}^{K}p_{k}^{2}
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于给定的样本集合D,其基尼指数为:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
Gini(D)=1-\displaystyle\sum_{k=1}^{K}(\frac{|C_k|}{|D|})
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)
其中,
C
k
C_k
Ck是D中属于第k类的样本子集,K是类的个数。
如果集合D根据特征A是否取某一可能值a被分割成
D
1
和
D
2
D_1和D_2
D1和D2两部分,即
D
1
=
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
D
2
=
D
−
D
1
D_1={(x,y)∈D|A(x)=a} D_2 = D - D_1
D1=(x,y)∈D∣A(x)=aD2=D−D1
则在特征A的条件下,集合D的基尼指数定义为:
G
i
n
i
(
D
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D)=\frac{|D_1|}{|D|}Gini(D_1) +\frac{|D_2|}{|D|}Gini(D_2)
Gini(D)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A =a分割后集合D的不确定性。
基尼指数值越大,样本集合的不确定性也越大,这一点和熵类似。
CART分类树生成算法:
输入:训练数据集D,停止划分条件
输出:CART分类树
根据训练数据集D,从根节点开始,递归的对每个结点进行以下操作,构建二叉树
1)设结点的训练数据集为D,计算现有的特征对该数据集的基尼指数。此时对每一个特征A,对其每一个可能的取值a,根据样本点对A=a的测试为“是”或“否”将D分割成
D
1
和
D
2
D_1和D_2
D1和D2利用上面的公式计算A=a的基尼指数
2)在所有可能的特征A以及所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依据最优特征和最优切分点,从现有结点生成2个子结点,将训练数据集依特征分配到两个子节点中去。
3)对两个子节点递归调用1)2),直至满足停止条件。
4)生成CART分类树。
连续值与缺失值处理:
**连续值处理:**由于连续属性的可取数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。连续属性离散化技术就派上用场了,最简单的策略是采用二分法
给定样本集D和连续属性a,假设a在集合D上出现了n个不同的取值,将这些值从小到大排序,记为
a
1
,
a
2
…
…
a
n
{a^1,a^2……a^n}
a1,a2……an
基于划分点t可将D分为子集
D
t
+
和
D
t
−
D_t^+和D_t^-
Dt+和Dt−,其中
D
t
+
包
含
哪
些
在
属
性
a
上
取
值
大
于
t
的
样
本
。
D
t
−
包
含
哪
些
在
属
性
a
上
的
取
值
不
大
于
t
的
样
本
。
D_t^+包含哪些在属性a上取值大于t的样本。D_t^-包含哪些在属性a上的取值不大于t的样本。
Dt+包含哪些在属性a上取值大于t的样本。Dt−包含哪些在属性a上的取值不大于t的样本。
显然对于相邻的属性取值
a
i
和
a
i
+
1
a^i和a^{i+1}
ai和ai+1来说,t在区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)中取任意值产生的划分结果相同。因此对连续属性a我们可考察包含 n-1 个元素的候选划分点集合
T
a
=
a
i
+
a
i
+
1
2
∣
1
<
=
i
<
=
n
−
1
T_a={\frac{a^i+a^{i+1}}{2}|1<= i<= n-1}
Ta=2ai+ai+1∣1<=i<=n−1
即把区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)的中位点
a
i
+
a
i
+
1
2
\frac{a^i+a^{i+1}}{2}
2ai+ai+1作为候选划分点。
缺失值处理:
现实任务中常会遇到不完整样本,即样本的某些属性值缺失。
决策树中针对缺失值,需要解决以下2个问题:
1)如何在属性值缺失的情况下进行划分属性选择?
2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?