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

こ雲淡風輕ζ 提交于 2019-12-23 05:29:48

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

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\);
  • 使用验证样本集选择最优子树。

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!