文章目录
决策树
已知:训练集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
⋅
⋅
⋅
⋅
,
(
x
N
,
y
N
)
}
T=\{(x_{1},y_{1}),(x_{2},y_{2})\cdot\cdot\cdot\cdot,(x_{N},y_{N})\}
T={(x1,y1),(x2,y2)⋅⋅⋅⋅,(xN,yN)}
其中
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
⋯
,
x
i
(
n
)
)
T
,
y
i
∈
{
1
,
2
,
⋯
,
K
}
,
i
=
1
,
2
,
⋯
,
N
;
x_{i}=(x_{i}^{(1)},x_{i}^{(2)},\cdots,x_{i}^{(n)})^{T},\;y_{i}\in\{1,2,\cdots,K\},\;i=1,2,\cdots,N;
xi=(xi(1),xi(2),⋯,xi(n))T,yi∈{1,2,⋯,K},i=1,2,⋯,N;
目的:构造决策树,并对实例正确分类
分类决策树模型是一种描述对实例进行分类的树形结构。
If-then:决策树是通过一系列规则对数据进行分类的过程。
步骤:
- 构建根结点;
- 选择最优特征,以此分割训练数据集;
- 若子集被基本正确分类,构建叶结点,否则,继续选择新的最优特征;
- 重复以上两步,直到所有训练数据子集被正确分类。
条件概率分布
- 决策时:给定特征条件下类的 P ( Y ∣ X ) P(Y|X) P(Y∣X) ;
- 条件概率分布:特征空间的一个划分(Partition);
- 划分:单元(Cell)或区域(Region)互不相交。
所有区域合在一起,就是整个特征空间,一个单元对应一条路径。
决策树的条件概率分布由各个单元给定条件下类的条件概率分布组成。
决策树学习
本质:从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾
假设空间:由无穷多个条件概率模型组成
一棵好的决策树:与训练数据矛盾较小,同时具有很好的泛化能力
策略:最小化损失函数
特征选择:递归选择最优特征生成:对应特征空间的划分,直到所有训练子集被基本正确分类
剪枝:避免过拟合,具有更好的泛化能力
特征选择
信息增益
熵表示随机变量的不确实性:
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^{n}p_{i}\log p_{i}
H(X)=−i=1∑npilogpi
或:
H
(
p
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(p)=-\sum_{i=1}^{n}p_{i}\log p_{i}
H(p)=−i=1∑npilogpi
随机变量的取值等概率分布的时候,相应的熵最大。
0
≤
H
(
p
)
≤
log
n
0\leq H(p)\leq\log n
0≤H(p)≤logn
条件熵:
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^{n}p_{i}H(Y|X=x_{i})
H(Y∣X)=i=1∑npiH(Y∣X=xi)
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,则为经验熵(empirical entropy)和经验条件熵(empirical condition entropy)。
信息增益:得知特征
A
A
A 而使类
Y
Y
Y 的信息的不确定性减少的程度。
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
信息增益的算法
设训练数据集为 D D D , ∣ D ∣ |D| ∣D∣ 表示其样本容量,即样本个数。设有 K K K 个类 C k C_k Ck , k = 1 , 2 , ⋯ , K k = 1, 2, \cdots, 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, \cdots, a_n\} {a1,a2,⋯,an} ,根据特征 A A A 的取值将 D D D 划分为 n n n 个子集 D 1 , D 2 , ⋯ , D n D_1, D_2, \cdots, 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 i k = D i ∩ C k D_{ik} = D_i \cap C_k Dik=Di∩Ck , ∣ D i k ∣ |D_{ik}| ∣Dik∣ 为 D i k D_{ik} Dik 的样本个数。
输入:训练数据集 D D D 和特征 A A A
输出:特征 A A A 对 D D D 的信息增益 g ( D , A ) g(D, A) g(D,A)
-
计算经验熵 H ( D ) H(D) H(D) :
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 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∣ -
计算经验条件熵 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 ∣ log 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_{i k}|}{|D_i|}}\log_{2}{\frac{|D_{i k}|}{|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∣
- 计算信息增益:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比(information gain ratio)可以对这一问题进行校正。
特征
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
A
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_{i = 1}^n \frac{|D_i|}{|D|} \log_{2}{\frac{|D_i|}{|D|}}
HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣ ,
n
n
n 是特征
A
A
A 取值的个数。
决策树的生成
ID3算法
输入:训练数据集 D D D 、特征集 A A A 、阈值 $\epsilon $
输出:决策树 T T T
- 判断
T
T
T 是否需要选择特征生成决策树;
- 若 D D D 中所有实例属于同一类,则 T T T 为单结点树,记录实例类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 若 D D D 中所有实例无任何特征( A = ∅ A = \emptyset A=∅),则 T T T 为单结点树,记录 D D D 中实例个数最多类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 否则,计算
A
A
A 中各特征的信息增益,并选择信息增益最大的特征
A
g
A_g
Ag ;
- 若 A g A_g Ag 的信息增益小于 ϵ \epsilon ϵ ,则 T T T 为单结点树,记录 D D D 中实例个数最多类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 否则,按照 A g A_g Ag 的每个可能值 a i a_i ai ,将 D D D 分为若干非空子集 D i D_i Di ,将 D i D_i Di 中实例个数最多的类别作为标记,构建子结点,以结点和其子结点构成 T T T ,并返回 T T T ;
- 第 i i i 个子结点,以 D i D_i Di 为训练集, A − A i A - A_i A−Ai 为特征集合,递归地调用以上步骤,得到子树 T i T_i Ti 并返回。
C4.5算法
输入:训练数据集 D D D 、特征集 A A A 、阈值 $\epsilon $
输出:决策树 T T T
- 判断
T
T
T 是否需要选择特征生成决策树;
- 若 D D D 中所有实例属于同一类,则 T T T 为单结点树,记录实例类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 若 D D D 中所有实例无任何特征( A = ∅ A = \emptyset A=∅),则 T T T 为单结点树,记录 D D D 中实例个数最多类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 否则,计算
A
A
A 中各特征的信息增益比,并选择信息增益比最大的特征
A
g
A_g
Ag ;
- 若 A g A_g Ag 的信息增益比小于 ϵ \epsilon ϵ ,则 T T T 为单结点树,记录 D D D 中实例个数最多类别 C k C_k Ck ,以此作为该结点的类标记,并返回 T T T ;
- 否则,按照 A g A_g Ag 的每个可能值 a i a_i ai ,将 D D D 分为若干非空子集 D i D_i Di ,将 D i D_i Di 中实例个数最多的类别作为标记,构建子结点,以结点和其子结点构成 T T T ,并返回 T T T ;
- 第 i i i 个子结点,以 D i D_i Di 为训练集, A − A i A - A_i A−Ai 为特征集合,递归地调用以上步骤,得到子树 T i T_i Ti 并返回。
剪枝
优秀的决策树:
在具有好的拟合和泛化能力的同时,
- 深度小;
- 叶结点少;
- 深度小并且叶结点少。
误差:训练误差、测试误差
过拟合:训练误差低,测试误差高(模型结构过于复杂)
欠拟合:训练误差高,测试误差低(模型结构过于简单)
剪枝:处理决策树的过拟合问题
预剪枝:生成过程中,对每个结点划分前进行估计,若当前结点的划分不能提升泛化能力,则停止划分,记当前结点为叶结点;
后剪枝:生成一棵完整的决策树之后,自底而上地对内部结点考察,若此内部结点变为叶结点,可以提升泛化能力,则做此替换。
预剪枝
常用的预剪枝方法:
- 限定决策树的深度
- 设定一个阈值(阈值过大可能会导致决策树过于简单)
- 设置某个指标(常用基于测试集上的误差率),比较结点划分前后的泛化能力
后剪枝
降低错误剪枝(Reduce Error Pruning)
原理:自下而上,使用测试集来剪枝。对每个结点,计算剪枝前和剪枝后的误判个数,若是剪枝有利于减少误判(包括相等的情况),则减掉该结点所在分枝。
错误率在验证集上计算出来。
- 计算复杂性是线性的
- 操作简单,容易理解
- 受测试集影响大,如果测试集比训练集小很多,会限制分类的精度,容易欠拟合。
悲观错误剪枝(Pessimistic Error Pruning)
原理:根据剪枝前后的错误率来决定是否剪枝。和降低错误剪枝(REP)不同之处在于,悲观错误剪枝(PEP)只需要训练集即可,不需要验证集,并且PEP是自上而下剪枝的。
设 L L L 为叶子结点的个数, L e a f i Leaf_i Leafi 为第 i i i 个叶子结点, L e a f Leaf Leaf 剪枝后的叶子结点, N ( T ) N(T) N(T) 为目标子树所包含的样本总个数。
- 计算剪枝前目标子树每个叶子结点的误差,并进行连续修正:
E r r o r ( L e a f i ) = e r r o r ( L e a f i ) + 0.5 N ( T ) Error(Leaf_{i})= \frac{error(Leaf_{i})+0.5}{N(T)} Error(Leafi)=N(T)error(Leafi)+0.5
- 计算剪枝前目标子树的修正误差:
E r r o r ( T ) = ∑ i = 1 L E r r o r ( L e a f i ) = ∑ i = 1 L e r r o r ( L e a f i ) + 0.5 ∗ L N ( T ) {Error}(T)=\sum_{i=1}^L {Error}\left( { Leaf }_i\right)=\frac{\sum_{i=1}^L {error}\left( { Leaf }_i\right)+0.5 * L}{N(T)} Error(T)=i=1∑LError(Leafi)=N(T)∑i=1Lerror(Leafi)+0.5∗L
- 计算剪枝前目标子树误判个数的期望值:
E ( T ) = N ( T ) × E r r o r ( T ) = ∑ i = 1 L e r r o r ( L e a f i ) + 0.5 ∗ L E(T)=N(T) \times {Error}(T)=\sum_{i=1}^L {error}( { Leaf }_i)+0.5 * L E(T)=N(T)×Error(T)=i=1∑Lerror(Leafi)+0.5∗L
- 计算剪枝前目标子树误判个数的标准差:
s t d ( T ) = N ( T ) × E r r o r ( T ) × ( 1 − E r r o r ( T ) ) std(T)=\sqrt{N(T)\times Error(T) \times (1-Error(T))} std(T)=N(T)×Error(T)×(1−Error(T))
- 计算剪枝前误判上限(即悲观误差):
E ( T ) + s t d ( T ) E(T) + std(T) E(T)+std(T)
- 计算剪枝后该结点的修正误差:
E r r o r ( L e a f ) = e r r o r ( L e a f ) + 0.5 N ( T ) Error(Leaf)=\frac{error(Leaf)+0.5}{N(T)} Error(Leaf)=N(T)error(Leaf)+0.5
- 计算剪枝后该结点误判个数的期望值:
E ( L e a f ) = e r r o r ( L e a f ) + 0.5 E(Leaf)=err o r(L e a f)+0.5 E(Leaf)=error(Leaf)+0.5
- 比较剪枝前后的误判个数,如果满足以下不等式,则剪枝;否则,不剪枝。
E ( L e a f ) < E ( T ) + s t d ( T ) E(L e a f)\lt E(T)+s t d(T) E(Leaf)<E(T)+std(T)
最小误差剪枝(Minimum Error Pruning)
原理:根据剪枝前后的最小分类错误概率来决定是否剪枝。自下而上剪枝,只需要训练集即可。
设 P r k ( T ) Pr_k(T) Prk(T) 为 T T T 属于 k k k 类别的先验概率, m m m 表示先验概率对后验概率的影响, w i w_i wi 为叶子结点在 T T T 中的权重。
- 在结点 T T T 处,属于类别 k k k 的概率:
P k ( T ) = n k ( T ) + P r k ( T ) × m N ( T ) + m m → 0 , P k ( T ) → n k ( T ) N ( T ) m → ∞ , P k ( T ) → P r k ( T ) \begin{align} &P_{k}(T)={\frac{n_{k}(T)+P r_{k}(T)\times m}{N(T)+m}}\\ &m \rightarrow 0, P_k(T) \rightarrow \frac{n_k(T)}{N(T)}\\ &m \rightarrow \infty, P_k(T) \rightarrow Pr_k(T) \end{align} Pk(T)=N(T)+mnk(T)+Prk(T)×mm→0,Pk(T)→N(T)nk(T)m→∞,Pk(T)→Prk(T)
- 在结点 T T T 处,预测错误率:
E r r o r ( T ) = m i n { 1 − P k ( T ) } = m i n { N ( T ) − n k ( T ) + m ( 1 − P r k ( T ) ) N ( T ) + m } Error(T)=min\{1{-}P_{k}(T)\}=min\left\{{\frac{{N}(T)-n_{k}(T)+m(1-Pr_{k}(T))}{{N}(T)+m}}\right\} Error(T)=min{1−Pk(T)}=min{N(T)+mN(T)−nk(T)+m(1−Prk(T))}
- 若先验概率确定,就是以 m m m 作为变量,求取 E r r o r ( T ) Error(T) Error(T) 的最小值:
arg min m E r r o r ( T ) \arg\operatorname*{min}_{m}E rr o r(T) argmminError(T)
- 在无任何假设的情况下,通常假设各类别等概率出现,先验概率: P r k ( T ) = 1 K {\cal P}r_{k}(T)=\frac{1}{K} Prk(T)=K1 ,为便于演示,此处取 m = 1 m = 1 m=1 :
E r r o r ( T ) = N ( T ) − n k ( T ) + K − 1 N ( T ) + K {{E rr o r}}(T)=\frac{N(T)-n_{k}(T)+K-1}{N(T)+K} Error(T)=N(T)+KN(T)−nk(T)+K−1
-
步骤:
- 计算剪枝前目标子树每个叶子结点的预测错误率:
E r r o r ( L e a f i ) = N ( L e a f i ) − n k ( L e a f i ) + K − 1 N ( L e a f i ) + K E rr o r(L e af_{i})=\frac{N(L e af_{i})-n_{k}(L e af_{i})+K-1}{N(L e af_{i})+K} Error(Leafi)=N(Leafi)+KN(Leafi)−nk(Leafi)+K−1
- 计算剪枝前目标子树的预测错误率:
E r r o r ( L e a f ) = ∑ i = 1 L w i E r r o r ( L e a f i ) = ∑ i = 1 L N ( L e a f i ) N ( T ) E r r o r ( L e a f i ) E rr o r(L e a f)=\sum_{i=1}^{L}w_{i}E rr o r(L e a f_{i})=\sum_{i=1}^{L}\frac{N(L e a f_{i})}{N(T)}E rr o r(L e a f_{i}) Error(Leaf)=i=1∑LwiError(Leafi)=i=1∑LN(T)N(Leafi)Error(Leafi)
- 计算剪枝后目标子树的预测错误率:
E r r o r ( T ) = N ( T ) − n k ( T ) + K − 1 N ( T ) + K {{E rr o r}}(T)=\frac{N(T)-n_{k}(T)+K-1}{N(T)+K} Error(T)=N(T)+KN(T)−nk(T)+K−1
- 比较剪枝前后的预测错误率,如果满足以下不等式,则剪枝;否则,不剪枝。
E r r o r ( T ) < E r r o r ( L e a f ) Error(T) < Error(Leaf) Error(T)<Error(Leaf)
基于错误的剪枝(Error Based Pruning)
原理:根据剪枝前后的误判个数来决定是否剪枝。自下而上剪枝,只需要训练集即可。
设 e ( T ) e(T) e(T) 为午盘个数, N ( T ) N(T) N(T) 为样本个数, α \alpha α 为上分位数, q α q_\alpha qα 为置信水平,常取 25% 。
- 计算剪枝前目标子树每个叶子结点的误判率上界:
U C F ( e ( L e a f i ) , N ( L e a f i ) ) = e ( L e a f i ) + 0.5 + q α 2 2 + q α ( e ( L e a f i ) + 0.5 ) ( N ( L e a f i ) − e ( L e a f i ) − 0.5 ) N ( L e a f i ) + q α 2 4 N ( L e a f i ) + q α 2 U_{C F}\left(e\left( { Leaf }_i\right), N\left( { Leaf }_i\right)\right)=\frac{e\left( { Leaf }_i\right)+0.5+\frac{q_\alpha^2}{2}+q_\alpha \sqrt{\frac{\left(e\left( { Leaf }_i\right)+0.5\right)\left(N\left( { Leaf }_i\right)-e\left( { Leaf }_i\right)-0.5\right)}{N\left( { Leaf }_i\right)}+\frac{q_\alpha^2}{4}}}{N\left( { Leaf }_i\right)+q_\alpha^2} UCF(e(Leafi),N(Leafi))=N(Leafi)+qα2e(Leafi)+0.5+2qα2+qαN(Leafi)(e(Leafi)+0.5)(N(Leafi)−e(Leafi)−0.5)+4qα2
- 计算剪枝前目标子树的误判个数上界:
E ( L e a f ) = ∑ i = 1 L N ( L e a f i ) U C F ( e ( L e a f i ) , N ( L e a f i ) ) E( { Leaf })=\sum_{i=1}^L N\left( { Leaf }_i\right) U_{C F}\left(e\left( { Leaf }_i\right), N\left( { Leaf }_i\right)\right) E(Leaf)=i=1∑LN(Leafi)UCF(e(Leafi),N(Leafi))
- 计算剪枝后目标子树的误判率上界:
U C F ( e ( T ) , N ( T ) ) = e ( T ) + 0.5 + q α 2 2 + q α ( e ( T ) + 0.5 ) ( N ( T ) − e ( T ) − 0.5 ) N ( T ) + q α 2 4 N ( T ) + q α 2 U_{C F}\left(e\left( { T }\right), N\left( { T }\right)\right)=\frac{e\left( { T }\right)+0.5+\frac{q_\alpha^2}{2}+q_\alpha \sqrt{\frac{\left(e\left( { T }\right)+0.5\right)\left(N\left( { T }\right)-e\left( { T }\right)-0.5\right)}{N\left( { T }\right)}+\frac{q_\alpha^2}{4}}}{N\left( { T }\right)+q_\alpha^2} UCF(e(T),N(T))=N(T)+qα2e(T)+0.5+2qα2+qαN(T)(e(T)+0.5)(N(T)−e(T)−0.5)+4qα2
- 计算剪枝后目标子树的误判个数上界:
E ( T ) = N ( T ) U C F ( e ( T ) , N ( T ) ) E(T)=N(T)U_{C F}(e(T),\,\,N(T)) E(T)=N(T)UCF(e(T),N(T))
- 比较剪枝前后的误判个数上界,如果满足以下不等式,则剪枝;否则,不剪枝。
E ( T ) < E ( L e a f ) E(T) < E(Leaf) E(T)<E(Leaf)
代价-复杂度剪枝(Cost-Complexity Pruning)
原理:根据剪枝前后的损失函数来决定是否剪枝。
设 C ( T ) C(T) C(T) 为 T T T 在训练集中的预测误差, ∣ 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 个, H t ( T ) H_t(T) Ht(T) 为叶结点 t t t 上的经验熵 , α ≥ 0 \alpha \ge 0 α≥0 为惩罚参数。
- 损失函数:
C α = C ( T ) + α ∣ T ∣ C_\alpha = C(T) + \alpha|T| Cα=C(T)+α∣T∣
其中, 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_{t=1}^{|T|} N_t H_t(T)=-\sum_{t=1}^{|T|} \sum_{k=1}^K N_{t k} \log \frac{N_{t k}}{N_t} C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklogNtNtk
- 正则化:
min f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) \operatorname*{min}_{f\in\mathcal{F}}\frac{1}{N}\sum_{i=1}^{N}L(y_{i},\,f(x_{i}))+\lambda J(f) f∈FminN1i=1∑NL(yi,f(xi))+λJ(f)
- 剪枝前的决策树记做下 T A T_A TA ,计算每个叶子结点 t t t 的经验熵(若使用基尼系数,则为 CART 算法):
H t = − ∑ k = 1 K N t k N t log N t k N t H_t=-\sum_{k=1}^K \frac{N_{t k}}{N_t} \log \frac{N_{t k}}{N_t} Ht=−k=1∑KNtNtklogNtNtk
- 剪枝前决策树的损失函数为:
C α ( T A ) = C ( T A ) + α ∣ T A ∣ C_{\alpha}(\,T_{A})=\,C(\,T_{A})+\alpha |T_{A}| Cα(TA)=C(TA)+α∣TA∣
- 剪枝后的决策树记做 T B T_B TB ,损失函数为:
C α ( T B ) = C ( T B ) + α ∣ T B ∣ C_\alpha\left(T_B\right)=C\left(T_B\right)+\alpha\left|T_B\right| Cα(TB)=C(TB)+α∣TB∣
- 比较剪枝前后的损失函数,如果满足以下不等式,则剪枝;否则,不剪枝。
C α ( T B ) ≤ C α ( T A ) C_\alpha\left(T_B\right) \leq C_\alpha\left(T_A\right) Cα(TB)≤Cα(TA)
CART算法
假设现在有
K
K
K 个类,样本点属于第
k
k
k 个类的概率为
p
k
p_k
pk ,则概率分布的基尼指数为:
Gini
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
\operatorname{Gini}(p)=\sum_{k=1}^K p_k\left(1-p_k\right)=1-\sum_{k=1}^K p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
二分类:
Gini
(
p
)
=
2
p
(
1
−
p
)
\operatorname {Gini}(p) = 2p(1-p)
Gini(p)=2p(1−p)
样本集
D
D
D 的基尼系数:
Gini
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
\operatorname{Gini}(D)=1-\sum_{k=1}^K\left(\frac{\left|C_k\right|}{|D|}\right)^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特征
A
A
A 条件下,样本集
D
D
D 的基尼指数为:
Gini
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
Gini
(
D
1
)
+
∣
D
2
∣
∣
D
∣
Gini
(
D
2
)
\operatorname{Gini}(D, A)=\frac{\left|D_1\right|}{|D|} \operatorname{Gini}\left(D_1\right)+\frac{\left|D_2\right|}{|D|} \operatorname{Gini}\left(D_2\right)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART分类树
输入:训练数据集 D D D 、特征集 A A A 、阈值 ϵ \epsilon ϵ
输出:CART决策树 T T T
- 从根节点出发,进行操作,构建二叉树;
- 结点处的训练数据集为
D
D
D ,计算现有特征对该数据集的基尼指数,并选择最优特征。
- 在特征 A g A_g Ag 下,对其可能取的每个值 a g a_g ag ,根据样本点对 A g = a g A_g = a_g Ag=ag 的测试为“是”或“否”,将 D D D 分割成 D 1 D_1 D1 和 D 2 D_2 D2 两部分,计算 A g = a g A_g = a_g Ag=ag 时的基尼指数。
- 选择基尼指数最小的那个值作为该特征下的最优切分点。
- 计算每个特征下的最优切分点,并比较在最优切分下的每个特征的基尼指数,选择基尼指数最小的那个特征,即最优特征。
- 根据最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 分别对两个子结点递归地调用上述步骤,直至满足停止条件(比如结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征),即生成 CART 决策树。
CART回归树
假设将输入空间划分为
M
M
M 个单元
R
1
,
R
2
,
⋯
,
R
m
R_1, R_2, \cdots, 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_{m=1}^M c_m I\left(x \in R_m\right)
f(x)=m=1∑McmI(x∈Rm)
平方误差:
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\sum_{x_i \in R_m}\left(y_i-f\left(x_i\right)\right)^2
xi∈Rm∑(yi−f(xi))2
最优输出:
c
^
m
=
average
(
y
i
∣
x
i
∈
R
m
)
\hat{c}_m=\operatorname{average}\left(y_i \mid x_i \in R_m\right)
c^m=average(yi∣xi∈Rm)
选择第
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)=\left\{x \mid x^{(j)} \leqslant s\right\} \quad R_2(j, s)=\left\{x \mid x^{(j)}>s\right\}
R1(j,s)={x∣x(j)⩽s}R2(j,s)={x∣x(j)>s}
寻找最优切分变量
j
j
j 和最优切分点
s
s
s:
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\min _{j, s}\left[\min _{c_1} \sum_{x_i \in R_1(j, s)}\left(y_i-c_1\right)^2+\min _{c_2} \sum_{x_i \in R_2(j, s)}\left(y_i-c_2\right)^2\right]
j,smin
c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2
对固定输入变量
j
j
j 可以找到最优切分点
s
s
s :
c
^
1
=
ave
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
c
^
2
=
ave
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\begin{align} \hat{c}_1=\operatorname{ave}\left(y_i \mid x_i \in R_1(j, s)\right) \\ \hat{c}_2=\operatorname{ave}\left(y_i \mid x_i \in R_2(j, s)\right) \end{align}
c^1=ave(yi∣xi∈R1(j,s))c^2=ave(yi∣xi∈R2(j,s))
输入:训练数据集 D D D ,停止条件
输出:CART 决策树 T T T
-
从根节点出发,进行操作,构建二叉树;
-
结点处的训练数据集为 D D D ,计算变量的最优切分点,并选择最优变量。
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_1} \sum_{x_i \in R_1(j, s)}\left(y_i-c_1\right)^2+\min _{c_2} \sum_{x_i \in R_2(j, s)}\left(y_i-c_2\right)^2\right] j,smin c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2 -
在第 j j j 变量下,对其可能取的每个值 s s s ,根据样本点分割成 R 1 R_1 R1 和 R 2 R_2 R2 两部分,计算切分点为 s s s 时的平方误差。
-
选择平方误差最小的那个值作为该变量下的最优切分点。
-
计算每个变量下的最优切分点,并比较在最优切分下的每个变量的平方误差,选择平方误差最小的那个变量,即最优变量。
-
-
根据最优特征与最优切分点 ( 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)=\left\{x \mid x^{(j)} \leqslant s\right\}, \quad R_2(j, s)=\left\{x \mid x^{(j)}>s\right\} 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, \quad x \in R_m, \quad m=1,2 c^m=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2
- 继续对两个子区域调用上述步骤,直至满足停止条件,即生成 CART 决策树。
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^M c_m I\left(x \in R_m\right) f(x)=m=1∑McmI(x∈Rm)
总结归纳
-
决策树不一定是二叉树,可能是多叉树,即:决策树可以做多分类。
-
决策树的内部结点表示一个特征或属性,叶结点表示一个类。
-
决策树符合 if-then 规则,互斥且完备,即:每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。
-
决策树还可以看成是由给定条件下类的条件概率分布组成的,即在上一个特征发生的条件下求取下一个特征发生的概率。
-
任何一棵多叉树都可以表示成二叉树的形式,这也是为什么在悲观错误剪枝(Pessimistic Error Pruning)和基于错误的剪枝(Error Based Pruning)中具有二项分布的身影 。
-
随机变量的取值等概率分布的时候,相应的熵最大。通俗理解为:等概率分布时,随机变量取到每一个值的概率都相同,此时随机变量的不确定性最大。
-
决策树还表示给定特征条件下类的概率分布,即在上一个特征发生的前提下寻找下一个特征发生的概率。
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
要使 g ( D , A ) g(D,A) g(D,A) 变小,需使 H ( D ∣ A ) H(D|A) H(D∣A) 变大,表示为:已知特征 A A A 的条件下对集合 D D D 的分类效果好。
-
决策树生成过程中,若特征 A g A_g Ag 只有一种可能值,此时 H ( D ) H(D) H(D) 和 H ( D ∣ A ) H(D|A) H(D∣A) 均为 0 ,信息增益也为 0 ,必小于 ϵ \epsilon ϵ ,应生成叶结点。
-
决策树生成时,当所有特征的信息增益均小于 ϵ \epsilon ϵ 时,决策树完成构建。
-
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比(information gain ratio)可以对这一问题进行校正。
-
ID3算法和C4.5算法,只有划分依据不同,ID3算法依据信息增益划分,C4.5算法依据信息增益比划分。
-
C4.5算法较ID3算法,它可以处理连续型的数据,但不适用于大型数据。
-
预剪枝是自上而下的过程,后剪枝是自下而上的过程。其中悲观错误剪枝(Pessimistic Error Pruning)较为特殊,它归属于后剪枝,但却是自上而下剪枝。
-
连续性修正:
-
将伯努利分布 B ( 1 , p ) B(1,p) B(1,p) 重复 n n n 次,就是二项分布 B ( n , p ) B(n,p) B(n,p) 。
-
棣莫弗-拉普拉斯中心极限定理:
设随机变量 Y n ∼ B ( n , p ) ( 0 < p < 1 , b ≥ 1 ) Y_n \sim B(n,p)(0<p<1, b \ge 1) Yn∼B(n,p)(0<p<1,b≥1)
lim n → ∞ P { a < x n − n p n p ( 1 − p ) ≤ b } = ∫ a b 1 2 π e − t 2 2 d t \lim _{n \rightarrow \infty} P\left\{a<\frac{x_n-n p}{\sqrt{n p(1-p)}} \leq b\right\}=\int_a^b \frac{1}{\sqrt{2 \pi}} e^{-\frac{t^2}{2}} d t n→∞limP{a<np(1−p)xn−np≤b}=∫ab2π1e−2t2dt
其中, 1 2 π e − t 2 2 \frac{1}{\sqrt{2 \pi}} e^{-\frac{t^2}{2}} 2π1e−2t2 就是正态分布的概率密度函数。
该定理表明:正态分布是二项分布的极限分布。
即: n → ∞ , B ( n , p ) → B ( n p , n p ( 1 − p ) ) n \rightarrow \infty, B(n,p) \rightarrow B(np, np(1-p)) n→∞,B(n,p)→B(np,np(1−p))
-
二项分布为离散型随机变量,分布函数是阶梯状;正态分布为连续性随机变量,而正态分布的曲线穿过了每个阶梯的中心点。在 [ a , a + 0.5 ) [a, a+0.5) [a,a+0.5) 区间内,二项分布的分布函数大于正态分布;在 ( a + 0.5 , a + 1 ] (a+0.5, a+1] (a+0.5,a+1] 区间内,正态分布的分布函数大于二项分布。
-
若直接用正态分布求概率,结果偏大,体现在概率直方图中:
- 当求取坐标为 ( a , b ) (a, b) (a,b) 时,二项分布会求取 [ a + 1 , b − 1 ] [a+1,b-1] [a+1,b−1] 的面积,正态分布则会包含一部分 ( a − 1 , a ) , ( b , b + 1 ) (a - 1, a),(b, b+1) (a−1,a),(b,b+1) 的面积。
-
当二项分布的期望 n p np np 大到可以用正态分布近似的时候,应对正态分布做连续性修正,视概率求取边界对积分边界进行 ± 0.5 \pm0.5 ±0.5 处理(根据四舍五入计数法,经过 0.5 0.5 0.5 修正后的边界内的整数个数等于二项分布区间内的整数个数)。
对于 X ∼ B ( n , p ) X \sim B(n,p) X∼B(n,p) :
若求取概率 P ( a < X < b ) P(a<X<b) P(a<X<b) ,有:
∑ k = a + 1 b − 1 C n k 1 p n ≈ ∫ a + 0.5 b − 0.5 1 2 π e − t 2 2 d t \sum_{k=a+1}^{b-1}C_{n}^k \frac{1}{p^{n}} \approx \int_{a+0.5}^{b-0.5} \frac{1}{\sqrt{2 \pi}} e^{-\frac{t^2}{2}}dt k=a+1∑b−1Cnkpn1≈∫a+0.5b−0.52π1e−2t2dt
若求取概率 P ( a ≤ X ≤ b ) P(a \leq X \leq b) P(a≤X≤b) ,有:
∑ k = a b C n k 1 p n ≈ ∫ a − 0.5 b + 0.5 1 2 π e − t 2 2 d t \sum_{k=a}^{b}{C_{n}^{k}{\frac{1}{p^{n}}} \approx } \int_{a-0.5}^{b+0.5} \frac{1}{\sqrt{2 \pi}} e^{-\frac{t^2}{2}}dt k=a∑bCnkpn1≈∫a−0.5b+0.52π1e−2t2dt
对于 ( a , b ) (a,b) (a,b) ,连续性修正后的正态分布区间 ( a + 0.5 , b − 0.5 ) (a+0.5,b-0.5) (a+0.5,b−0.5) 内取整即为二项分布在区间 ( a , b ) (a,b) (a,b) 内取整。对于 [ a , b ] [a,b] [a,b] ,连续性修正后的正态分布区间 ( a − 0.5 , b + 0.5 ) (a-0.5, b+0.5) (a−0.5,b+0.5) 内取整二项分布在区间 [ a , b ] [a,b] [a,b] 内取整。
-
-
悲观错误剪枝(Pessimistic Error Pruning)中, E ( T ) = N ( T ) × E r r o r ( T ) E(T)=N(T) \times {Error}(T) E(T)=N(T)×Error(T) 的实质就是二项分布的期望 E ( X ) = n p E(X) = np E(X)=np , s t d ( T ) = N ( T ) × E r r o r ( T ) × ( 1 − E r r o r ( T ) ) std(T)=\sqrt{N(T)\times Error(T) \times (1-Error(T))} std(T)=N(T)×Error(T)×(1−Error(T)) 的实质就是二项分布的标准差 D ( X ) = n p ( 1 − p ) \sqrt{D(X)} = \sqrt{np(1-p)} D(X)=np(1−p) 。
-
悲观错误剪枝(Pessimistic Error Pruning)中,剪枝后只有一个叶结点,没有标准差和方差。
-
最小误差剪枝(Minimum Error Pruning)引入了贝叶斯思维,加入了先验概率影响因子。
-
关于最小误差剪枝(Minimum Error Pruning)中的 m m m ,应该计算得到而不是直接给出。应在已知先验概率的情况下,通过迭代或网格搜索等方法确定 min E r r o r ( T ) \min Error(T) minError(T),此时才符合标题中的“最小误差”。当类别总数较大时,先验概率至关重要,更不应该随意设定 m m m 的值。
-
上 α \alpha α 分位数: P ( X ≥ x α ) = α P(X \ge x_\alpha) = \alpha P(X≥xα)=α ; 下 α \alpha α 分位数: P ( X ≤ x α ) = α P(X \le x_\alpha) = \alpha P(X≤xα)=α 。
-
对于基于错误的剪枝(Error Based Pruning)中误判率上界的分析:
- 该结点的误判率(连续修正):
e r r o r ( T ) = e ( T ) + 0.5 N ( T ) error(T) = \frac{e(T) +0.5}{N(T)} error(T)=N(T)e(T)+0.5
- 二项分布的标准差 s t d ( T ) = n p ( 1 − p ) std(T) = np(1-p) std(T)=np(1−p):
N ( T ) ⋅ e ( T ) + 0.5 N ( T ) ⋅ ( 1 − e ( T ) + 0.5 N ( T ) ) = ( e ( T ) + 0.5 ) ( N ( T ) − e ( T ) − 0.5 ) N ( T ) N(T) \cdot \frac{e(T) + 0.5}{N(T)} \cdot (1 - \frac{e(T) + 0.5}{N(T)})= \sqrt{\frac{\left(e\left( { T }\right)+0.5\right)\left(N\left( { T }\right)-e\left( { T }\right)-0.5\right)}{N\left( { T }\right)}} N(T)⋅N(T)e(T)+0.5⋅(1−N(T)e(T)+0.5)=N(T)(e(T)+0.5)(N(T)−e(T)−0.5)
- 加入置信水平的标准差:
( e ( T ) + 0.5 ) ( N ( T ) − e ( T ) − 0.5 ) N ( T ) + q α 2 4 \sqrt{\frac{\left(e\left( { T }\right)+0.5\right)\left(N\left( { T }\right)-e\left( { T }\right)-0.5\right)}{N\left( { T }\right)} + \frac{{q_\alpha}^2}{4}} N(T)(e(T)+0.5)(N(T)−e(T)−0.5)+4qα2
- 熵和基尼系数类似,均表示随机变量的不确定性。
- CART 假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支为“是”,右分支为“否”。
- CART 决策树既能做分类也能做回归。