机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)

决策树是一种基本的分类与回归方法。分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成。结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类。

1. 基础知识

在信息学和概率统计中,熵(entropy)是表示随机变量不确定性的度量。设\(X\)是一个取有限个值得离散随机变量,其概率分布为:$$P(X = x_i) = p_i, i = 1,2,3,...,n$$
则随机变量\(X\)的熵定义为:$$H(X) = - \sum_{i=1}^{n}p_i\log{p_i}$$
通常上式中对数以\(2\),或者\(e\)为底。由定义知,熵依赖于\(X\)的分布,而于\(X\)的取值无关,所以\(X\)的熵记作\(H(p)\),即:

\[H(p) = - \sum_{i=1}^{n}p_i\log{p_i} \]

熵越大,随机变量的不确定性就越大,\(0\leq H(p) \leq \log{n}\)

1.1 条件熵

设有随机变量\((X,Y)\),其联合概率分布为:

\[P(X=x_i, Y=y_j) = p_{ij}, i = 1,2,...,n; j = 1,2,...,n \]

条件熵表示\(H(Y|X)\)在已知随机变量\(X\)的条件下随机变量\(Y\)的不确定性,定义为:

\[H(Y|X) = \sum_{i=1}^{n}p_i H(Y|X=x_i) \]

这里,\(p_i=P(X=x_i), i = 1,2,...,n\)。当熵和条件熵中的概率由数据估计(极大似然估计)得到时,所对应的熵分别为经验熵和经验条件熵。

1.2 信息增益

信息增益表示得知特征\(A\)的信息而使得类\(Y\)的信息的不确定性减少的程度。特征\(A\)对训练数据集\(D\)的信息增益\(g(D,A)\),定义为集合\(D\)的经验熵与特征\(A\)给定条件下\(D\)的经验条件熵之差,即:

\[g(D,A) = H(D) - H(D|A)$$对于数据集$D$,信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征往往具有更强的分类能力。 根据信息增益准则的特征选择方法:对训练数据集(或子集)$D$,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。 设训练数据集为$D$,$|D|$表示其样本容量,即样本个数。设有K个类$C_k,k = 1,2,...,K$,$|C_k|$为属于类$C_k$的样本个数,$\sum_{k=1}^{K}|C_k| = |D|$。设特征$A$有$n$个不同的取值${a_1,a_2,...,a_n}$,根据特征$A$的取值将$D$划分为$n$个子集$D_1,D_2,...,D_n$,$|D_i|$为$D_i$的样本个数,$\sum_{i=1}^{n}|D_i| = |D|$。记子集$D_i$中属于类$C_k$的样本集合为$D_{ik}$,即$D_{ik} = D_i\cap C_k$。 (1)数据集$D$的经验熵$H(D)$ $$H(D) = - \sum_{k=1}^{K}{\frac{|C_k|}{|D|} \log\frac{|C_k|}{|D|} }\]

(2)特征\(A\)对数据集\(D\)的经验条件熵\(H(D|A)\)

\[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|}} \]

(3)信息增益\(g(D,A) = H(D) - H(D|A)\)

1.3 信息增益比

信息增益作为划分数据集的特征,存在偏向与选择取值较多的特征的问题。信息增益比可以改进改问题。特征\(A\)对训练数据集\(D\)的信息增益比\(g_R(D,A)\)定义为其信息增益\(g(D,A)\)与训练数据集\(D\)关于特征\(A\)的值得熵\(H_A(D)\)之比,即:

\[g_R(D,A) = \frac{g(D,A)}{H_A(D)}$$其中$H_A(D) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \log_2{\frac{|D_i|}{|D|} }$,$n$是特征A取值的个数。 ###1.4 基尼系数 后面补充 ##2. ID3算法 在决策树各个结点上应用**信息增益**准则选择特征,递归地构建决策树。 给定训练数据集$D$,**特征集**$S$,阈值$\epsilon$ (1)若$D$中所有实例属于同一类$C_k$,则T为单结点树,并将类$C_k$作为该结点的类标记,返回T; (2)若$S=\varnothing$,则T为单结点树,并将D中实例数最大的类$C_k$作为该结点的类标记,返回T; (3)否则,计算$S$中各特征对$D$的信息增益,选择信息增益最大的特征$S_g$; (4)如果$S_g$的信息增益小于阈值$\epsilon$,则置T为单结点树,并将$D$中实例数最大的类$C_k$作为该结点的类标记,返回T; (5)否则,对$S_g$的每一个可能值$a_i$,将$D$分割为若干个非空子集$D_i$,将$D_i$中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T (6)对第i个子节点,以$D_i$为训练集,以$S-{S_g}$为特征集,递归调用步(1)-(5),得到字数$T_i$,返回$T_i$。 ##3. C4.5算法 C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征,过程与上述类似。 ##4. CART算法 后面再添加 ##5. 决策树的评价 假定样本的总类别为K个,对于决策树的某**叶结点**,假定该叶结点含有样本数目为$n$,其中第$k$类的样本数目为$n_k,k = 1,2,...,K$。 (1)若该结点中某类样本$n_j = n$,而$n_1,...n_{j-1},n_{j+1},...n_{K} = 0$,则该结点的熵$H_p=0$,最小; (2)若该结点中各类样本数目$n_1=n_2=...=n_k=n/K$,则该结点熵$H_u=\ln K$,最大。 对所有叶结点的熵求和,该值越小说明对样本的分类越精确。各个叶结点包含的样本数目不同,可以使用样本数加权求熵和。因此,评价函数:$$C(T) = \sum_{t \in leaf }N_t \cdot H(t)\]

该评价函数值越小越好,所以,可以称为“损失函数”。

6. 剪枝

决策树对训练属于有很好的分类能力,但是对于未知的测试集未必有好的分类能力,泛化能力弱,即可能发生过拟合现象。为防止过拟合,我们需要进行剪枝。
三种决策树的剪枝过程算法相同,区别是对于当前树的评价标准不同。

剪枝分为预剪枝和后剪枝:

6.1 预剪枝:

(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。

6.2 后剪枝:

总体思路:由完全树\(T_0\)开始,剪枝部分结点得到\(T_1\),再次剪枝部分结点得到\(T_2\)...直到剩下树根的树\(T_k\);在验证数据集上对这\(k\)个树分别评价,选择损失函数最小的树\(T_a\)

设树\(T\)的叶结点个数为\(|T|\),t是树T的叶结点,该叶结点有\(N_i\)个样本点,其中k类的样本点有\(N_{ik}个,k=1,2,...,K\)\(H_t(T)\)为叶结点\(t\)上的经验熵,\(\alpha \geq 0\)为参数,则决策树学习的损失函数可定义为:

\[C_{\alpha}(T) = \sum_{t=1}^{|T|}N_t \cdot H(T) + \alpha |T| \]

其中经验熵为$$H_t(T) = \sum_{t=1}^{|T|}{\frac{N_{tk}}{N_t} \log {2} \frac{N{tk}}{N_t}}$$

这时有:$$C_{\alpha}(T) = C(T) + \alpha |T|$$
\(C(T)\)表示模型对训练数据集的预测误差,即模型与训练数据集的拟合程度。\(|T|\)表示模型的复杂度,参数\(\alpha \geq 0\)控制两者之间的影响。较大的\(\alpha\)促使选择较简单的模型(树),较小的\(\alpha\)促使选择较复杂的模型(树),当\(\alpha = 0\)时意味着只考虑模型与训练数据的拟合程度,不考虑模型复杂度。

假定当前对以\(r\)为根的子树剪枝,剪枝后,只保留\(r\)本身而删掉所有的子结点。
\(r\)为根的子树:

  • 剪枝后的损失函数:\(C_\alpha(r) = C(r) + \alpha\)
  • 剪枝前的损失函数:\(C_\alpha(R) = C(R) + \alpha \cdot |R_{leaf}|\)\(C(R)\)应该是小于\(C(r)\)
  • 令二者相等,求得:\(\alpha = \frac{C(r) - C(R)}{R_{leaf} -1}\)\(\alpha\)称为结点\(r\)的剪枝系数。

对于给定的决策树\(T_0\)

  • 计算所有内部结点的剪枝系数
  • 查找最小剪枝系数的结点,剪枝得决策树\(T_k\)
  • 重复以上步骤,直到决策树\(T_k\)只有一个结点;
  • 得到决策树序列\(T_0,T_1,T_2...T_k\);
  • 使用验证样本集选择最优子树。

注:上述如存在错误还望指正。

posted @ 2017-03-11 21:51  Farnear  阅读(8733)  评论(0编辑  收藏  举报