决策树
决策树
参考资料:
- 《统计学习方法》
熵
随机变量 \(X\) 的熵定义为
条件熵
设有随机变量 \((X,Y)\),其联合概率分布为
条件熵 \(H(Y|X)\) 表示在已知随机变量 \(X\) 的条件下随机变量 \(Y\) 的不确定性,定义为 \(X\) 给定条件下 \(Y\) 的条件概率分布的熵对 \(X\) 的数学期望
信息增益
也称作互信息(mutual information)
特征 \(A\) 对训练数据集 \(D\) 的信息增益 \(g(D,A)\),定义为集合 \(D\) 的经验熵 \(H(D)\) 与特征 \(A\) 给定条件下 \(D\) 的经验条件熵 \(H(D|A)\) 之差,即
经验熵 \(H(D)\) 表示对数据集 \(D\) 进行分类的不确定性,经验条件熵 \(H(D|A)\) 表示在特征 \(A\) 给定的条件下对数据集 \(D\) 进行分类的不确定性。
它们的差,即信息增益,就表示由于特征\(A\)而使得对数据集\(D\)的分类的不确定性减少的程度。
信息增益比
在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大.反之,信息增益值会偏小.
使用信息增益比( information gain ratio)可以对这一问题进行校正.这是特征选择的另一准则.
信息增益比:特征 \(A\) 对训练数据集\(D\)的信息增益比\(g(D,A)\)定义为其信息增益\(g(D,A)\)与训练数据集D的经验熵\(H(D)\)之比:
ID3
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止.最后得到一个决策树.ID3相当于用极大似然法进行概率模型的选择.
缺陷:容易产生过拟合
C4.5
C4.5 算法与ID3算法相似,在生成的过程中,用信息增益比来选择特征.
决策树的剪枝
决策树生成学习局部的模型,而决策树剪枝学习整体的模型.
决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)来实现.
设树\(T\)的叶结点个数为\(|T|\),\(t\)是树\(T\)的叶结点,该叶结点有 \(N_t\)个样本点,其中\(k\)类的样本点有\(N_{tk}\)个,\(k = 1,2,…,K\) ,\(H_t(T)\)为叶结点\(t\)上的经验熵,\(\alpha≥0\)为参数,则决策树学习的损失函数可以定义为
其中经验熵为
将式子(5.11)右端记作
即
式(5.14)中,\(C(T)\)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,\(|T|\)表示模型复杂度,参数\(\alpha≥0\)控制两者之间的影响.较大的\(\alpha\)促使选择较简单的模型(树),较小的\(\alpha\)促使选择较复杂的模型(树). \(\alpha=0\)意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度.
CART 算法
CART是在给定输入随机变量\(X\)条件下输出随机变量\(Y\)的条件概率分布的学习方法.CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布.
CART 回归树的生成
CART 分类树生成
分类树用基尼指数选择最优特征,同时决定该特征的最优值切分点。
基尼指数:分类问题中,假设有K个类,样本点属于第k类的概率为p,则概率分布的基尼指数定义为
对于二类分类问题,若样本点属于第1个类的概率是\(p\), 则概率分布的基尼指数为
对于给定的样本集合\(D\),其基尼指数为
这里,\(C_k\) 是 \(D\) 中属于第 \(k\) 类的样本子集,\(K\)是类的个数。直观地说,基尼指数就是随便从样本集合中随机抽取两个样本,其类别标记不一致的概率。
如果样本集合 \(D\) 根据特征 \(A\) 是否取某一可能值 \(a\) 被分割成 \(D_1\) 和 \(D_2\) 两部分, 即
则在特征 \(A\) 的条件下,集合 \(D\) 的基尼指数定义为
基尼指数 \(\operatorname{Gini}(D)\) 表示集合 \(D\) 的不确定性, 基尼指数 \(\operatorname{Gini}(D, A)\) 表示经 \(A=a\) 分割后集合 \(D\) 的不确定性. 基尼指数值越大, 样本集合的不确定性也就越大, 这一点与熵相似.
CART剪枝
CART 剪枝算法由两步组成
- 首先从生成算法产生的决策树 \(T_0\) 底端开始不断剪枝, 直到 \(T_0\) 的根结点, 形成一个子树序列 \(\left\{T_0, T_1, \cdots, T_n\right\}\)
- 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试, 从中选择最优子树.
剪枝
在剪枝过程中, 计算子树的损失函数:
其中, \(T\) 为任意子树, \(C(T)\) 为对训练数据的预测误差 (如基尼指数), \(|T|\) 为子树的叶结点个数, \(\alpha \geqslant 0\) 为参数, \(C_\alpha(T)\) 为参数是 \(\alpha\) 时的子树 \(T\) 的整体损失. 参数 \(\alpha\) 权衡训练数据的拟合程度与模型的复杂度.
Breiman 等人证明: 可以用递归的方法对树进行剪枝. 将 \(\alpha\) 从小增大, \(0=\) \(\alpha_0<\alpha_1<\cdots<\alpha_n<+\infty\), 产生一系列的区间 \(\left[\alpha_i, \alpha_{i+1}\right), i=0,1, \cdots, n\); 剪枝得到的子树序列对应着区间 \(\alpha \in\left[\alpha_i, \alpha_{i+1}\right), i=0,1, \cdots, n\) 的最优子树序列 \(\left\{T_0, T_1, \cdots, T_n\right\}\), 序列中的子树是联套的.
具体地, 从整体树 \(T_0\) 开始剪枝. 对 \(T_0\) 的任意内部结点 \(t\), 以 \(t\) 为单结点树的损失函数是
以 \(t\) 为根结点的子树 \(T\) 的损失函数是
当 \(\alpha=0\) 及 \(\alpha\) 充分小时, 有不等式
当 \(\alpha\) 增大时, 在某一 \(\alpha\) 有
当 \(\alpha\) 再增大时, 不等式 (5.29) 反向. 只要 \(\alpha=\frac{C(t)-C\left(T_t\right)}{\left|T_t\right|-1}, T_t\) 与 \(t\) 有相同的损失函数值, 而 \(t\) 的结点少, 因此 \(t\) 比 \(T_t\) 更可取, 对 \(T_t\) 进行剪枝.
为此, 对 \(T_0\) 中每一内部结点 \(t\), 计算
它表示剪枝后整体损失函数减少的程度。
在 \(T_0\) 中剪去 \(g(t)\) 最小的 \(T_t\), 将得到的子树作为 \(T_1\), 同时将最小的 \(g(t)\) 设为 \(\alpha_1 . T_1\) 为区间 \(\left[\alpha_1, \alpha_2\right)\) 的最优子树.
如此剪枝下去, 直至得到根结点. 在这一过程中, 不断地增加 \(\alpha\) 的值, 产生新的区间.
交叉验证
在剪枝得到的子树序列 \(T_0, T_1, \cdots, T_n\) 中通过交叉验证选取最优子树 \(T_\alpha\)
具体地, 利用独立的验证数据集, 测试子树序列 \(T_0, T_1, \cdots, T_n\) 中各棵子树的平方误差或基尼指数. 平方误差或基尼指数最小的决策树被认为是最优的决策树. 在子树序列中, 每棵子树 \(T_1, T_2, \cdots, T_n\) 都对应于一个参数 \(\alpha_1, \alpha_2, \cdots, \alpha_n\). 所以, 当最优子树 \(T_k\) 确定时, 对应的 \(\alpha_k\) 也确定了, 即得到最优决策树 \(T_\alpha\).
现在写出 CART 剪枝算法.
预剪枝
- 提前终止某些分支的生长
根据验证集,验证如果对该节点进行划分,划分前后决策树性能是否下降。可以考虑比如准确率,召回率等指标进行评判。
本文来自博客园,作者:Un-Defined,转载请保留本文署名Un-Defined,并在文章顶部注明原文链接:https://www.cnblogs.com/EIPsilly/p/18381868