机器学习原理及公式推导(五)决策树

       决策树(decision tree)是一种基本的分类与回归算法,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。决策树学习包括3个步骤:特征选择、决策树的生成和决策树的剪枝。这些思想主要来源于ID3算法、C4.5算法以及CART算法。

1、决策树模型与学习

       决策树由结点(node)和有向边(directed edge)组成,结点分为内部结点(internal node)和叶结点(leaf node),内部结点表示一个特征或属性,叶结点表示一个类。
       决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。意思是每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。
       决策树将特征空间划分为互不相交的单元(cell)或区域(region),决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。各叶结点上的条件概率往往偏向某一个类,即该类的概率较大,决策树分类时将该结点的实例强行分到条件概率大的那一类去。
       基于特征空间划分的类的条件概率模型有无穷多个,我们选择的条件概率模型应不仅对训练数据有很好的拟合,而且对未知数据也应有很好的预测。因此决策树学习用损失函数表示这一目标,损失函数通常是正则化的极大似然函数。
       由于从所有可能的决策树中选取最优决策树是NP完全问题,所以通常采用启发式方法,近似求解得到一个次最优(sub-optimal)决策树。

2、特征选择

       特征选择在于选取对训练数据具有分类能力的特征,通常的准则是信息增益或信息增益比。
       首先给出熵与条件熵的定义。熵(entropy)是表示随机变量不确定性的度量,设 X X 是一个取有限个值得离散随机变量,其概率分布为 P ( X = x i ) = p i P(X=x_i)=p_i ,则 X X 的熵定义为
H ( X ) = i = 1 n p i l o g p i H(X)=-\sum_{i=1}^np_ilogp_i        上式的对数以2为底或以 e e 为底,此时熵的单位分别为比特(bit)或纳特(nat)。由于熵只依赖于 X X 的分布,所以也可写作 H ( p ) H(p)
       熵越大,随机变量的不确定性就最大,熵的范围是
0 H ( p ) l o g n 0\le H(p)\le log n        0代表 X X 的取值是确定的, l o g n logn 代表 X X n n 种可能的概率相同,即平均分布。
       接下来是条件熵(conditional entropy)的定义。条件熵 H ( Y X ) H(Y|X) 表示在已知随机变量 X X 的条件下随机变量 Y Y 的不确定性,定义为 X X 给定条件下 Y Y 的条件概率分布的熵对 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)        可以看到,熵本质上是关于概率的公式,当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。
       信息增益(information gain)表示得知特征 X X 的信息而使类 Y Y 的信息不确定性减少的程度,设特征 A A 对训练数据集 D D 的信息增益为 g ( D , A ) g(D,A) ,则
g ( D , A ) = H ( D ) H ( D A ) g(D,A)=H(D)-H(D|A)        显然,信息增益大的特征具有更强的分类能力,因此特征选择的方法是计算训练数据集每个特征的信息增益,选择信息增益最大的特征。
       特征 A A 对训练数据集 D D 的信息增益 g ( D , A ) g(D,A) 的计算方法为:
       首先用极大似然估计,计算数据集 D 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|}        式中, D |D| 代表样本个数, C k |C_k| 代表属于类 C k C_k 的样本个数。
       接着用极大似然估计,计算特征 A A 对数据集 D D 的经验条件熵 H ( D A ) H(D|A)
H ( D A ) = i = 1 n D i D H ( D i ) H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)        式中,根据特征 A A 的取值将样本分为 n n 个子集, D i |D_i| 代表子集 D i D_i 的样本个数。而对于 H ( D i ) H(D_i) ,其表达式为
H ( D i ) = k = 1 K D i k D i l o g 2 D i k D i H(D_i)=-\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|}        式中, D i k |D_{ik}| 代表子集 D i D_i 中属于类 C k C_k 的样本个数。
       最后计算信息增益
g ( D , A ) = H ( D ) H ( D A ) g(D,A)=H(D)-H(D|A)        以信息增益作为划分训练数据集的特征,容易偏向于选择取值较多的特征。直观上理解,如果某个特征的可取值数很多,以至于一些取值下可能只有一个样本,则这个取值的经验熵为0,这导致了此特征的经验条件熵很低,信息增益很高。因此使用信息增益比(information gain ratio)对这一问题进行校正。
       特征 A A 对训练数据集 D D 的信息增益比 g R ( D , A ) g_R(D,A) 等于其信息增益 g ( D , A ) g(D,A) 与特征 A A 本身的熵 H A ( D ) H_A(D) 之比,即
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)}        式中, H A ( D ) = i = 1 n D i D l o g 2 D i D H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} n n 是特征 A A 取值的个数。若特征 A A 的可取值数较多,则 g ( D , A ) g(D,A) 较大,同样 H A ( D ) H_A(D) 也较大,因此保持了平衡。

3、决策树的生成

       首先介绍ID3的生成算法。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征建立子结点,再将此特征移除,对子结点递归地调用以上方法,直到所有特征的信息增益均很小或没有特征可以选择未知。
       ID3相当于用极大似然法进行概率模型的选择。
       接下来是C4.5算法,与ID3相比,C4.5在生成的过程中用信息增益比来选择特征。

4、决策树的剪枝

       决策树容易产生过拟合现象,原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决的办法是考虑决策树的复杂度,对已生成的决策树进行简化,即剪枝(pruning)。
       决策树的剪枝通过极小化决策树整体的损失函数或代价函数来实现。设树 T T 的叶结点个数为 T |T| ,叶结点 t t N t N_t 个样本点,则决策树的损失函数定义为
C α ( T ) = t = 1 T N t H t ( T ) + α T = C ( T ) + α T C_\alpha (T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|=C(T)+\alpha|T|        式中, H t ( T ) H_t(T) 是叶结点 t t 上的经验熵,计算公式为
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}}{N_t}        式中, N t k N_{tk} 是叶结点 t t k k 类样本点的个数。因此,约掉 N t N_t 后, C α ( T ) C_\alpha(T) 中的 C ( T ) C(T) 项可以写为
C ( T ) = t = 1 T k = 1 K N t k l o g N t k N t C(T)=\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}log\frac{N_{tk}}{N_t}        在 C α ( T ) C_\alpha(T) 中, C ( T ) C(T) 表示模型对训练数据的预测误差, T |T| 表示模型复杂度。
       剪枝,就是在 α \alpha 确定时,选择损失函数最小的模型,或者说损失函数最小的子树。损失函数的极小化,等价于正则化的极大似然估计。
       剪枝算法如下:生成整个树 T T 后,计算每个结点的经验熵后,递归地从树的叶结点向上回缩,设回缩前后整体树分别为 T B T_B T A T_A ,如果 C α ( T A ) C α ( T B ) C_\alpha(T_A)\le C_\alpha(T_B) ,则进行剪枝。

5、CART算法

       分类与回归树(classification and regression tree, CART)模型是应用广泛的决策树学习方法。
       CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”。这样的决策树等价于递归地二分每个特征,将特征空间划分为有限个单元并输出条件概率分布。
       CART算法包括两步:
       (一)决策树生成,生成的决策树要尽量大;
       (二)决策树剪枝,用损失函数最小作为剪枝标准,用验证集选择最优子树。
       对回归树,用平方误差最小化准则;对分类树,用基尼指数(Gini index)最小化准则。
       首先是回归树的生成,假设已将输入空间划分为 M M 个单元 R 1 , R 2 ,   , R M R_1,R_2,\cdots,R_M ,且每个单元 R m R_m 上有一个固定的输出值 c m c_m ,则回归树模型可表示为
f ( x ) = m = 1 M c m I ( x R m ) f(x)=\sum_{m=1}^Mc_mI(x\in R_m)        用平方误差 x i R m ( y i f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 来表示训练数据的预测误差,可以推导出 c m c_m 的最优值是 R m R_m 上所有实例 x i x_i 所对应输出 y i y_i 的均值,即
c ^ m = a v e ( y i x i R m ) \hat c_m=ave(y_i|x_i\in R_m)        接着考虑如何对输入空间进行划分。采用启发式方法,选择第 j j 个变量 x j x^{j} 和值 s 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)}\le s\}, R_2(j,s)=\{x|x^{(j)}>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}[\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]        上式内部最优解对应的 c 1 c_1 c 2 c_2
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))        遍历所有输入变量,找到最优的切分变量 j j 与切分点 s s ,重复地将输入空间划分为两个区域,这样的回归树称为最小二乘回归树(least squares regression tree)。
       接下来是分类树,分类树用基尼指数选择最优特征与该特征的最优二值切分点。
       假设有 K K 个类,则概率分布的基尼指数定义为
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        对于给定的样本集合 D 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        如果样本集合 D D 被特征 A A 的某一可能值 a a 分为 D 1 D_1 D 2 D_2 两部分,则集合 D D 关于特征 A A 的条件基尼指数是集合 D D 的基尼指数关于特征 A A 的期望,其定义为
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)        与熵相似,基尼指数越大,样本集合的不确定性也就越大。基尼指数与熵之半的曲线很接近,都可以近似代表分类误差率。
       CART生成算法的过程为:
       从根节点开始递归地对每个结点进行操作,首先对每一个特征 A A 可能取的每个值 a a ,根据 A = a A=a 将样本分为 D 1 D_1 D 2 D_2 两个部分,计算 A = a A=a 时的基尼指数;选择基尼指数最小的特征及切分点作为最优特征与最优切分点。
       算法停止的条件是:
       (一)结点中的样本个数小于预定阈值;
       (二)样本集的基尼指数小于预定阈值(样本基本属于同一类);
       (三)没有更多特征。
       接下来是CART的剪枝。在剪枝过程中,计算子树的损失函数为
C α ( T ) = C ( T ) + α T C_\alpha(T)=C(T)+\alpha|T|        对于固定的 α \alpha ,一定存在唯一的使损失函数 C α ( T ) C_\alpha(T) 最小的子树,将其表示为 T α T_\alpha 。当 α = 0 \alpha=0 时,整体树是最优的;当 α \alpha\to\infty 时,根结点组成的单结点树是最优的。
       从整体树 T 0 T_0 开始剪枝,对 T 0 T_0 的任意内部结点 t t ,计算以下两棵树的损失函数。
       以 t t 为单结点树的损失函数是
C α ( t ) = C ( t ) + α C_\alpha(t)=C(t)+\alpha        以 t t 为根节点的子树 T t T_t 的损失函数是
C α ( T t ) = C ( T t ) + α T t C_\alpha(T_t)=C(T_t)+\alpha|T_t|        因此,当 α < C ( t ) C ( T t ) T t 1 \alpha<\frac{C(t)-C(T_t)}{|T_t|-1} 时,有
C α ( T t ) < C α ( t ) C_\alpha(T_t)<C_\alpha(t)        此时 T t T_t 较优,不剪枝。当 α > C ( t ) C ( T t ) T t 1 \alpha>\frac{C(t)-C(T_t)}{|T_t|-1} 时,有
C α ( T t ) > C α ( t ) C_\alpha(T_t)>C_\alpha(t)        此时 t t 较优,对 T t T_t 进行剪枝。
       当 α = C ( t ) C ( T t ) T t 1 \alpha=\frac{C(t)-C(T_t)}{|T_t|-1} 时, T t T_t t t 有相同的损失函数值,根据奥卡姆剃刀原则, t t T t T_t 更可取,对 T t T_t 进行剪枝。
       因此,CART剪枝算法的过程为:
       对 T 0 T_0 中每一内部结点 t t 计算 g ( t ) = C ( t ) C ( T t ) T t 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} ,在 T 0 T_0 中减去 g ( t ) g(t) 最小的 T t T_t ,将得到的子树作为 T 1 T_1 ,同时将最小的 g ( t ) g(t) 作为 α 1 \alpha_1 T 1 T_1 为区间 [ α 1 , α 2 ) [\alpha_1,\alpha_2) 的最优子树。如此剪枝下去直至根结点,在这一过程中不断增加 α \alpha 的值,产生新的区间。最后采用交叉验证法在子树序列 T 0 , T 1 ,   , T n T_0,T_1,\cdots,T_n 中选取最优子树 T α T_\alpha

猜你喜欢

转载自blog.csdn.net/u013899126/article/details/89525610