决策树模型和学习
决策树模型
- 定义:分类决策树模型是一种描述对实例分类的树型结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶节点表示一个类
决策树于if-then规则
- 可以将决策树看成一个if-then规则的集合。将决策树转换成if-then规则的过程是这样,每个内部结点代表一种规则,然后根据规则进行划分,最后到叶节点后,根据决策规则进行类别判别。
决策树与条件概率分布
- 决策树也可以表示给定特征条件下类别的条件概率分布。这一条件概率分布对应空间上的一个划分,最终叶子结点是个条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X)
决策树学习
- 给定
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
,
y
i
∈
{
1
,
2
,
.
.
.
,
K
}
x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T,y_i \in\{1,2,...,K\}
xi=(xi(1),xi(2),...,xi(n))T,yi∈{1,2,...,K}表示其类别
决策树学习本质上是对训练数据中归纳出一种规则。与训练数据不相矛盾且具有很好的泛化能力,其学习也是定义一个损失函数,然后优化最小损失函数,但其是个NP完全问题,通常用启发式算法进行解决,递归的选择最优特征再生成决策树,最后再进行全局剪枝。
特征选择
特征选择问题
- 选取比较好的特征具有很好的分类能力,通常特征选择的准则是信息增益或信息增益比
信息增益
- 熵表示随机变量的不确定性的度量
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
H ( X ) = − ∑ i = 1 n p i log p i , H(X)=-\sum\limits_{i=1}^np_i\log\limits{p_i}, H(X)=−i=1∑npilogpi,定义: 0 log 0 = 0 0\log\limits{0}=0 0log0=0
满足不等式 0 ≤ H ( p ) ≤ log n 0\le H(p)\le\log\limits{n} 0≤H(p)≤logn
( X , Y ) 联 合 分 布 概 率 , P ( X = x i , Y = y j ) = p i j , i = 1 , 2 , . . . , , n ; j = 1 , 2 , . . . , m (X,Y)联合分布概率,P(X=x_i,Y=y_j)=p_{ij},i=1,2,...,,n;j=1,2,...,m (X,Y)联合分布概率,P(X=xi,Y=yj)=pij,i=1,2,...,,n;j=1,2,...,m
条件熵 H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) , p i = P ( X = x i ) , i = 1 , 2 , . . . , n H(Y|X)=\sum\limits_{i=1}^np_iH(Y|X=x_i),p_i=P(X=x_i),i=1,2,...,n H(Y∣X)=i=1∑npiH(Y∣X=xi),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)也叫作互信息,越大表示特征A对数据区分度越好 - 算法:
输入:训练数据 D 4 和 特 征 D4和特征 D4和特征A$
输出:特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A)
( 1 ) . (1). (1).计算数据集D的经验熵 H ( D ) H(D) H(D)
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum\limits_{k=1}^K\frac{|C_k|}{|D|}\log\limits_2\frac{|C_k|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣2log∣D∣∣Ck∣
( 2 ) . (2). (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 ∣ log 2 ∣ D i k ∣ ∣ D ∣ H(D|A)=\sum\limits_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\log\limits_2\frac{|D_{ik}|}{|D|} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣2log∣D∣∣Dik∣
( 2 ) . (2). (2).计算信息增益
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
信息增益比
信息增益划分数据存在一个问题,偏向于取值多的特征,因此引入信息增益比进行矫正。
定义:特征
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关于A值的熵
H
A
(
D
)
H_A(D)
HA(D)之比
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A)=\frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
其中
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
log
2
∣
D
i
∣
∣
D
∣
H_A(D)=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\log\limits_2\frac{|D_i|}{|D|}
HA(D)=−i=1∑n∣D∣∣Di∣2log∣D∣∣Di∣
决策树的生成
ID3算法
- 算法:
输入:训练数据集 D D D,特征集 A A A阈值 ε \varepsilon ε
输出:决策树 T T T
( 1 ) . (1). (1).若 D D D中所有实例属于同一类 C K , C_K, CK,则 T T T为单节点树,并将类 C k C_k Ck作为该节点的类标记,返回 T T T
( 2 ) . (2). (2).若 A = ∅ A=\empty A=∅,则 T T T为单节点树,并将 D D D中实例最大的类别 C k C_k Ck作为该节点的类标记,返回 T T T
( 3 ) . (3). (3).否则,计算 A A A中各种特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag
( 4 ) . (4). (4).如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单叶子节点,并将 D D D中实例数最大的类别 C k C_k Ck作为该节点的类标记,返回 T T T
( 5 ) . (5). (5).否则,对 A g A_g Ag中每个可能值 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
( 6 ) (6) (6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A−{Ag}为特征集,递归调用 ( 1 ) − ( 5 ) (1)-(5) (1)−(5)得到子树 T i T_i Ti,返回 T i T_i Ti
C4.5的生成算法
- 算法:
输入:训练数据集 D D D,特征集 A A A阈值 ε \varepsilon ε
输出:决策树 T T T
( 1 ) . (1). (1).若 D D D中所有实例属于同一类 C K , C_K, CK,则 T T T为单节点树,并将类 C k C_k Ck作为该节点的类标记,返回 T T T
( 2 ) . (2). (2).若 A = ∅ A=\empty A=∅,则 T T T为单节点树,并将 D D D中实例最大的类别 C k C_k Ck作为该节点的类标记,返回 T T T
( 3 ) . (3). (3).否则,计算 A A A中各种特征对 D D D的信息增益比,选择信息增益比最大的特征 A g A_g Ag
( 4 ) . (4). (4).如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单叶子节点,并将 D D D中实例数最大的类别 C k C_k Ck作为该节点的类标记,返回 T T T
( 5 ) . (5). (5).否则,对 A g A_g Ag中每个可能值 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
( 6 ) (6) (6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A−{Ag}为特征集,递归调用 ( 1 ) − ( 5 ) (1)-(5) (1)−(5)得到子树 T i T_i Ti,返回 T i T_i Ti
决策树剪枝
决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现,设数
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
,
H
(
T
)
k=1,2,...,K,H(T)
k=1,2,...,K,H(T)为叶节点
t
t
t上的经验熵,
α
≥
0
\alpha\ge0
α≥0为参数,则决策树学习的损失函数可以定义为:
C
a
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_a(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)+\alpha|T|
Ca(T)=t=1∑∣T∣NtHt(T)+α∣T∣
其经验熵为
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
log
N
t
k
N
t
H_t(T)=-\sum\limits_k\frac{N_{tk}}{N_t}\log\limits\frac{N_{tk}}{N_t}
Ht(T)=−k∑NtNtklogNtNtk
在损失函数中,将上上式右边第一项记作
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
log
N
t
k
N
t
C(T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)=-\sum\limits_{t=1}^{|T|}\sum\limits_{k=1}^KN_{tk}\log\limits\frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
这时有
C
a
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_a(T)=C(T)+\alpha|T|
Ca(T)=C(T)+α∣T∣
- 算法:
输入:生成算法产生整个树 T T T,参数 α \alpha α
输出:修减后的子树 T a T_a Ta
( 1 ) . (1). (1).计算每个节点的经验熵
( 2 ) . (2). (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)\le C_a(T_B) Ca(TA)≤Ca(TB)则进行剪枝,即将父亲节点变为新的叶节点
( 3 ) . (3). (3).返回 ( 2 ) (2) (2)直到不能执行为止
CART算法
CART生成
- 回归树
回归树是用来输出连续变量的
假设 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)}
回归树就是把输入划分为 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\limits_{m=1}^M\hat{c}_mI(x\in R_m) f(x)=m=1∑Mc^mI(x∈Rm),由平方误差知 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum\limits_{x_i\in R_m}(y_i-f(x_i))^2 xi∈Rm∑(yi−f(xi))2
c ^ m = a v e ( y i ∣ x i ∈ R m ) \hat{c}_m=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_1(j,s)=\{x|x^{(j)}\le s\} R1(j,s)={x∣x(j)≤s} R 2 ( j , s ) = { x ∣ x ( j ) > s } R_2(j,s)=\{x|x^{(j)}> s\} R2(j,s)={x∣x(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 ] min_{j,s}[min_{c_1}\sum\limits_{x_i \in R_1(j,s)}(y_i-c_1)^2+min_{c_2}\sum\limits_{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]
c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) \hat{c}_1=ave(y_i|x_i \in R_1(j,s)) c^1=ave(yi∣xi∈R1(j,s)) c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c}_2=ave(y_i|x_i \in R_2(j,s)) c^2=ave(yi∣xi∈R2(j,s)) - 算法:
输入:训练数据集 D : D: D:
输出:回归树 f ( x ) f(x) f(x)
( 1 ) . 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 ] (1).min_{j,s}[min_{c_1}\sum\limits_{x_i \in R_1(j,s)}(y_i-c_1)^2+min_{c_2}\sum\limits_{x_i \in R_2(j,s)}(y_i-c_2)^2] (1).minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]求之
( 2 ) . c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) (2).\hat{c}_1=ave(y_i|x_i \in R_1(j,s)) (2).c^1=ave(yi∣xi∈R1(j,s)) c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c}_2=ave(y_i|x_i \in R_2(j,s)) c^2=ave(yi∣xi∈R2(j,s))
( 3 ) (3) (3)继续 ( 1 ) , ( 2 ) (1),(2) (1),(2)直到满足条件
( 4 ) (4) (4) f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x)=\sum\limits_{m=1}^M\hat{c}_mI(x\in R_m) f(x)=m=1∑Mc^mI(x∈Rm) - 分类树
- 基尼指数
定义:分类问题中假设有 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\limits_{k=1}^Kp_k(1-p_k)=1-\sum\limits_{k=1}^Kp_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ D ) 2 Gini(D)=1-\sum\limits_{k=1}^K(\frac{|C_k|}{D})^2 Gini(D)=1−k=1∑K(D∣Ck∣)2
如果样本 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_1=\{(x,y) \in D|A(x)=a)\} D1={(x,y)∈D∣A(x)=a)} D 2 = D − D 1 D_2=D-D_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)+∣D∣∣D2∣Gini(D2)其越大,不确定性越大,选小的
- 基尼指数
- 算法:
输入:训练数据集 D : D: D:
输出: C A R T CART CART决策树
( 1 ) (1) (1)设节点的训练集为 D D D计算其基尼指数
( 2 ) (2) (2)选择基尼指数最小的点进行划分
( 3 ) (3) (3)继续 ( 1 ) , ( 2 ) (1),(2) (1),(2)直到满足条件
( 4 ) (4) (4)生成 C A R T CART CART决策树
CART剪枝
(
1
)
(1)
(1)剪枝整树,定义
C
a
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_a(T)=C(T)+\alpha|T|
Ca(T)=C(T)+α∣T∣为损失函数,把
α
从
小
到
大
生
成
序
列
,
0
=
α
0
<
α
1
<
.
.
.
<
α
n
<
+
∞
\alpha从小到大生成序列,0=\alpha_0<\alpha_1<...<\alpha_n<+\infin
α从小到大生成序列,0=α0<α1<...<αn<+∞产生一系列区间
[
α
i
,
α
i
+
1
)
,
i
=
0
,
1
,
.
.
.
,
n
[\alpha_i,\alpha_{i+1}),i=0,1,...,n
[αi,αi+1),i=0,1,...,n对应生成
{
T
0
,
T
1
,
.
.
.
,
T
n
}
\{T_0,T_1,...,T_n\}
{T0,T1,...,Tn}最后我们交叉验证一下选择最优就OK
C
a
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_a(T)=C(T)+\alpha|T|
Ca(T)=C(T)+α∣T∣
C
a
(
T
t
)
=
C
(
T
t
)
+
α
∣
T
t
∣
C_a(T_t)=C(T_t)+\alpha|T_t|
Ca(Tt)=C(Tt)+α∣Tt∣
当
α
=
0
\alpha=0
α=0或足够小有
C
a
(
T
t
)
<
C
(
T
t
)
C_a(T_t)<C(T_t)
Ca(Tt)<C(Tt)
当
α
\alpha
α增大有
C
a
(
T
t
)
=
C
(
T
t
)
C_a(T_t)=C(T_t)
Ca(Tt)=C(Tt),再大就不等式反号
α
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
\alpha=\frac{C(t)-C(T_t)}{|T_t|-1}
α=∣Tt∣−1C(t)−C(Tt)选择一个节点最优,所以进行剪枝。取
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)为对应区间最优子树
(
2
)
.
(2).
(2).对子树序列
T
0
,
T
1
,
T
2
,
.
.
.
,
T
n
T_0,T_1,T_2,...,T_n
T0,T1,T2,...,Tn进行交叉验证等选择最优子树,同时也确定了
α
\alpha
α大小
- 算法:
输入: C A R T CART CART决策树
输出:最优子树 T α T_{\alpha} Tα
( 1 ) (1) (1) k = 0 , T = T 0 k=0,T=T_0 k=0,T=T0
( 2 ) (2) (2)设 α = + ∞ \alpha=+\infin α=+∞
( 3 ) (3) (3)自下向上地对 t t t计算 C ( T t ) , ∣ T ∣ C(T_t),|T| C(Tt),∣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)
α = m i n ( α , g ( t ) ) \alpha=min(\alpha,g(t)) α=min(α,g(t))
( 4 ) (4) (4)对 g ( t ) = a g(t)=a g(t)=a内部剪枝得到子树 T T T
( 5 ) (5) (5)设 k = k + 1 , α k = α , T k = T k=k+1,\alpha_k=\alpha,T_k=T k=k+1,αk=α,Tk=T
( 6 ) (6) (6)如果 T k T_k Tk不是由跟节点和两个叶节点组成的树,则返回 ( 2 ) (2) (2)否则令 T k = T n T_k=T_n Tk=Tn
( 7 ) (7) (7)交叉验证子树序列 T 0 , T 1 , . . . . , T n T_0,T_1,....,T_n T0,T1,....,Tn中得到最优子树 T α T_\alpha Tα