决策是一种基本的用于分类与回归的方法。在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then规则的集合,也可认为是定义在特征空间与类空间上的条件概率分布,主要优点有:模型具有可读性,分类速度快。学习时利用训练数据,根据损失函数最小化的原则建立决策树模型。决策树学习通常包括3个步骤:特征选择,决策树的生成,决策树的修建
ID3 和 C4.5是多叉树,但CART是二叉树
一、决策树模型基本知识
(1)决策树模型
决策树:分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点(node)和有向边(directed edge)组成,结点有两类:内部结点(internal node)和叶结点(left node)。内部节点表示一个属性或特征,叶结点表示一个类。
用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子节点对应着该特征的一个取值,如此递归地对实例进行测试并分配,直至达到叶结点,最后将实例分到叶结点的类中。
(2)决策树学习
决策树学习,假设给定训练数据集
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
=
(
x
i
(
1
)
,
x
i
(
2
)
,
.
.
.
,
x
i
(
n
)
)
T
x_i = (x_i^{(1)}, x_i^{(2)}, ..., x_i^{(n)})^T
xi=(xi(1),xi(2),...,xi(n))T为输入实例(特征向量),n为特征个数,
y
I
∈
{
1
,
2
,
.
.
.
,
K
}
y_I \in \{ 1, 2, ..., K\}
yI∈{1,2,...,K}为类标记,
i
=
1
,
2
,
.
.
,
N
,
N
i = 1, 2, .., N, N
i=1,2,..,N,N为样本容量,学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。
决策树学习本质上是从训练集数据中归纳出一组分类规则,与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个都没有,我们需要的是一个能与训练数据矛盾较小的决策树,同时具有很好的泛化能力,从另一个角度看,决策树学习是由训练数据集估计条件概率模型,基于特征空间划分的类的条件概率模型有无穷个,我们选择的条件概率模型不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树学习用损失函数表示这一目标,决策树学习的损失函数通常是正则化的极大似然函数,决策树学习的策略是以损失函数为目标函数的最小化。
损失函数确定后,学习问题就变为在损失函数意义下选择最优的决策树的问题。因为从所有可能的决策树中选取最优决策树是一个NP完全问题,所以现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题。
决策树学习流程大概如下:
- 开始构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类,如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;
- 如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点,
- 如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止,
- 最后,每个子集都被分到叶结点上,即都有了明确的类,这就生成了一个决策树。
以上方法可能对未知数据没有很好的能力能力(过拟合),就需要对决策树进行剪枝,从而有更好的泛化能力。
二、决策树学习–No.1 特征选择
1、特征选择–为什么要进行特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率,如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征没有分类能力的,经验上扔掉这些的特征对决策树学习的精度影响不大。我们用信息增益或者信息增益比来表示这一效果。
2、信息增益
-
熵
首先说说熵:
(entropy)表示随机变量不确定性的度量,设 X X X是一个取有限个值得离散随机变量,其概率分布为
P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X = x_i) = p_i, i = 1, 2, ..., n P(X=xi)=pi,i=1,2,...,n
则随机变量 X X X的熵定义为:
H ( X ) = − ∑ i = 1 n p i l o g p i (1) H(X) = -\sum_{i = 1}^np_ilog^{p_i}\tag{1} H(X)=−i=1∑npilogpi(1)
定义 0 l o g 0 = 0 0log^{0} = 0 0log0=0,由于式(1)中 H ( X ) H(X) H(X)的大小于X的取值无关,所有可记为:
H ( p ) = − ∑ i = 1 n p i l o g p i H(p) = -\sum_{i = 1}^np_ilog^{p_i} H(p)=−i=1∑npilogpi
熵越大,随机变量的不确定性也就越大,从定义可得
0 ≤ H ( p ) ≤ l o g n 0 \leq H(p) \leq log^n 0≤H(p)≤logn
当随机变量只取两个值时,则 X X X得熵为:
H ( p ) = − p l o g 2 p − ( 1 − p ) l o g 2 ( 1 − p ) H(p)= -plog_2p - (1 - p)log_2(1-p) H(p)=−plog2p−(1−p)log2(1−p) -
条件熵
设随机变量 ( 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}, i = 1, 2, ..., n; 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的条件熵 H ( Y ∣ X ) H(Y|X) H(Y∣X)定义为 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}^np_iH(Y| X = x_i) H(Y∣X)=i=1∑npiH(Y∣X=xi)
这里, p i = P ( X = x i ) , i = 1 , 2 , . . . , n p_i = P(X = x_i), i = 1, 2, ..., n pi=P(X=xi),i=1,2,...,n
当熵和条件熵的概率有数据估计得到的,所对应的熵和条件熵分别称为经验熵和经验条件熵。 -
信息增益
特征 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 ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)−H(D∣A)
一般的,熵 H ( Y ) H(Y) H(Y)与条件熵 H ( Y ∣ X ) H(Y|X) H(Y∣X)之差称为互信息。信息增益大的特征具有更强的分类能力。【理解:首先,对于每个特征 X X X,去计算 g ( D , A ) g(D, A) g(D,A)时,都要利用共同的 H ( D ) H(D) H(D),所以我们再去观测 H ( D ∣ A ) H(D|A) H(D∣A),这个表示在条件 A A A下,随机变量 Y Y Y的不确定性,如果不确定性越大,则则这个特征对分类没有起到很好的作用,不确定小,则对分类作用越明显,然后用同样的 H ( D ) H(D) H(D)去减去这一个不确定的量,就得到信息增益,则信息增益的变化刚好与 H ( D ∣ A ) H(D|A) H(D∣A)变化相反,即信息增益越大,分类作用越明显,所有我们要选择信息增益大的对应的特征】
信息增益算法:
设训练数据集为 D D D, ∣ D ∣ |D| ∣D∣表示其样本容量,即样本个数,设有 K K K个类 C k C_k Ck, k = 1 , 2 , . . . , K k = 1, 2, ..., K k=1,2,...,K, ∣ C k ∣ |C_k| ∣Ck∣为属于类 C k C_k Ck的样本个数, ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k = 1}^K|C_k| = |D| ∑k=1K∣Ck∣=∣D∣.设特征 A A A有 n n n个不同的取值 { a 1 , a 2 , . . . , a n } \{a_1, a_2, ..., a_n\} {a1,a2,...,an}根据特征 A A A的取值将 ∣ D ∣ |D| ∣D∣划分为n个子集 D 1 , D 2 , . . . , D n D_1, D_2, ..., D_n D1,D2,...,Dn, ∣ D i ∣ |D_i| ∣Di∣为 D i D_i Di的样本个数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i = 1}^n|D_i| = |D| ∑i=1n∣Di∣=∣D∣, 记子集 D i D_i Di中属于 C k C_k Ck的样本的集合为 D i k D_{ik} Dik.
输入:训练数据集
D
D
D和特征
A
A
A
输出:特征
A
A
A对训练数据集
D
D
D的信息增益
g
(
A
D
A
)
g(AD A)
g(ADA)
(1)计算数据集
D
D
D的经验熵
H
(
D
)
H(D)
H(D)
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
l
o
g
2
∣
C
k
∣
∣
D
∣
H(D) = -\sum_{k = 1}^K\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
(2)计算特征
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
∣
l
o
g
2
∣
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_2\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∣log2∣Di∣∣Dik∣
(3)计算信息增益
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A) = H(D) - H(D|A)
g(D,A)=H(D)−H(D∣A)
3、信息增益比
- 为什么引入信息增益比?
信息增益的大小时相对于训练数据集而言的,并没有绝对的意义,在分类问题困难时,也就是说在训练数据集的经验熵大的情况下,信息增益值会偏大,反之,信息增益值会偏小,使用信息增益比可以对这一问题进行校正 - 信息增益比
特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D, A) g(D,A)与训练数据集 D D D的经验熵 H ( D ) H(D) H(D)之比
g R ( D , A ) = g ( D , A ) H ( D ) g_R(D, A) = \frac{g(D, A)}{H(D)} gR(D,A)=H(D)g(D,A)
三、决策树生成
1、ID3算法(使用信息增益选择特征)
输入: 训练数据集
D
D
D, 特征集
A
A
A,阈值
ε
\varepsilon
ε;
输出:决策树
T
T
T;
(1)若
D
D
D中所有实例属于同一类
C
k
C_k
Ck,则
T
T
T为单结点数,并将类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T,
(2)若
A
=
∅
A = \varnothing
A=∅,则
T
T
T为单结点数,并将
D
D
D中实例树最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T,
(3)否则,计算
A
A
A中各个特征对
D
D
D的信息增益,选择信息增益最大的特征
A
g
A_g
Ag;
(4)如果
A
g
A_g
Ag的信息增益小于阈值
ε
\varepsilon
ε,则置
T
T
T为单结点数,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(5)否则,对
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;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
{
A
g
}
A-\{A_g\}
A−{Ag}为特征集,递归地调用步(1)~步(5),得到子树,返回
T
T
T
1、C4.5算法与ID3的唯一差别是(使用信息增益比选择特征)
输入: 训练数据集
D
D
D, 特征集
A
A
A,阈值
ε
\varepsilon
ε;
输出:决策树
T
T
T;
(1)若
D
D
D中所有实例属于同一类
C
k
C_k
Ck,则
T
T
T为单结点数,并将类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T,
(2)若
A
=
∅
A = \varnothing
A=∅,则
T
T
T为单结点数,并将
D
D
D中实例树最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T,
(3)否则,计算
A
A
A中各个特征对
D
D
D的信息增益比,选择信息增益比最大的特征
A
g
A_g
Ag;
(4)如果
A
g
A_g
Ag的信息增益小于阈值
ε
\varepsilon
ε,则置
T
T
T为单结点数,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(5)否则,对
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;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
{
A
g
}
A-\{A_g\}
A−{Ag}为特征集,递归地调用步(1)~步(5),得到子树,返回
T
T
T
四、决策树的剪枝
决策树生成算法递归地产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象,过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建过于复杂的决策树。
决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现,设树
T
T
T的叶结点个数为
∣
T
∣
|T|
∣T∣,
t
t
t是树
T
T
T的叶结点,该叶结点有
N
t
N_t
Nt个样本点,其中
k
k
k类的样本点有
N
t
k
N_{tk}
Ntk个,
k
=
1
,
2
,
.
.
.
,
K
k=1, 2, ..., K
k=1,2,...,K,
H
t
(
T
)
H_t(T)
Ht(T)为叶结点
t
t
t上的经验熵,
a
≥
0
a \geq 0
a≥0为参数,则决策树学习的损失函数可以定义为
C
a
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
a
∣
T
∣
(2)
C_a(T) = \sum_{t = 1}^{|T|}N_tH_t(T) + a|T| \tag{2}
Ca(T)=t=1∑∣T∣NtHt(T)+a∣T∣(2)
其中经验熵为
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
l
o
g
N
t
k
N
t
H_t(T) = -\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{Nt}
Ht(T)=−k∑NtNtklogNtNtk
在损失函数中,式(2)的右端第1项记作:
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
l
o
g
N
t
k
N
t
C(T) = \sum_{t= 1}^{|T|}N_tH_t(T) = \sum_{t = 1}^{|T|}\sum_{k = 1}^{K}N_{tk}log\frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=t=1∑∣T∣k=1∑KNtklogNtNtk
这时有
C
a
(
T
)
=
C
(
T
)
+
a
∣
T
∣
(3)
C_a(T) = C(T) + a |T|\tag{3}
Ca(T)=C(T)+a∣T∣(3)
式(3)中,
C
(
T
)
C(T)
C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,
∣
T
∣
|T|
∣T∣表示模型的复杂度,参数
a
≥
0
a \geq 0
a≥0控制两者之间的影响。较大的
a
a
a初始选择较简单的模型,较小的
a
a
a初始选择较复杂的模型。
树的剪枝算法——动态规划
输入:生成算法产生的整个树
T
T
T,参数
a
a
a;
输出:修建后的子树
T
a
T_a
Ta
(1)计算每个结点的经验熵
(2)递归地从树的叶结点向上回缩
设一组叶结点回缩到其父结点之前与之后的整体树分别为
T
B
T_B
TB,
T
A
T_A
TA,其对应的损失函数分别为
C
a
(
T
B
)
C_a(T_B)
Ca(TB),
C
a
(
T
A
)
C_a(T_A)
Ca(TA),如果
C
a
(
T
A
)
≤
C
a
(
T
B
)
C_a(T_A) \leq C_a(T_B)
Ca(TA)≤Ca(TB)
则进行剪枝,即将父结点变成新的叶结点。
(3)返回(2),直至不能继续未知,得到损失函数最小的子树
T
a
T_a
Ta.
五、CART算法(classification and regression tree)
CATR是在给定输入随机变量 X X X条件下输出随机变量 Y Y Y的条件概率分布的学习方法。
CART算法由以下两步组成:
(1)决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
(1)CART生成
C
A
R
T
生
成
=
{
回
归
树
用
平
方
误
差
最
小
化
分
类
树
基
尼
指
数
CART生成 = \left\{ \begin{aligned} 回归树&&用平方误差最小化\\ 分类树&&基尼指数\\ \end{aligned} \right.
CART生成={回归树分类树用平方误差最小化基尼指数
回归树
对输入空间的划分,采用启发式,选择第
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\} 和 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
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
]
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
j可以找到最优切分点。
c
1
^
=
a
v
g
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
和
c
2
^
=
a
v
g
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat{c_1} = avg(y_i| x_i \in R_1(j, s)) 和 \hat{c_2} = avg(y_i| x_i \in R_2(j, s))
c1^=avg(yi∣xi∈R1(j,s))和c2^=avg(yi∣xi∈R2(j,s))
- 最小二乘回归树生成算法
输入:训练数据集 D D D;
输出:回归树 f ( X ) f(X) f(X);
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉树;
(1)选择最优切分变量 j j j和切分点 s s 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 ] (4) 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]\tag{4} minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2](4)
遍历遍历 j j j,对固定的切分变量 j j j扫描切分点 s s s,选择使式(4)达到最小值的对(j, s)
(2)用选定的对 ( j , s ) (j, s) (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 cm^=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2
(3)继续对两个子区域调用步骤(1), (2)直至满足停止条件。
(4)将输入空间划分为
M
M
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_m}I(x \in R_m)
f(X)=m=1∑Mcm^I(x∈Rm)
分类树
基尼指数:分类问题中,假设有
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}^Kp_k(1 - p_k) = 1 - \sum_{k = 1}^Kp_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,若样本点属于第1个类的概率是
p
p
p,则概率分布的基尼指数为
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p) = 2p(1 - p)
Gini(p)=2p(1−p)
如果样本集合
D
D
D根据特征
A
A
A是否取一个可能值
a
a
a被分割为
D
1
D_1
D1和
D
2
D_2
D2两个部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
}
,
D
2
=
D
−
D
1
D_1 = \{(x, y) \in D | A(x) = a\}, D_2 = D - D_1
D1={(x,y)∈D∣A(x)=a},D2=D−D1
则在特征
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
)
(5)
Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2) \tag{5}
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)(5)
基尼指数
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的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
- CART生成分类算法
输入:训练数据集 D D D,停止计算的条件;
输出: CART决策树
根据训练数据集,从根节点开始,递归地对每一个结点进行以下操作,构建二叉决策树:
(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两部分,利用公式(5)计算基尼指数。
(2)在所有可能的特征 A A A以及它们所有的切分点 a a a中,选择基尼指数最小的特征以及对象切分点作为最优·特征与最优切分点,依最优特征与最优切分点,从现结点生成两个子结点,将训练集以特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1), (2)直至满足停止条件
(4)生成CART决策树。
参考资料:
【1】统计学习方法——李航