- 数据挖掘学习笔记--决策树 C4.5
- 数据挖掘十大算法--K-均值聚类算法
- 机器学习与数据挖掘-支持向量机(SVM)
- 机器学习与数据挖掘-支持向量机(SVM)(一)
- 支持向量机(SVM)(二)-- 拉格朗日对偶(Lagrange duality)
- 支持向量机(SVM)(三)-- 最优间隔分类器(optimal margin classifier)
- 支持向量机(四)-- 核函数
- 支持向量机(SVM)(五)-- SMO 算法详解
- 数据挖掘十大算法--Apriori 算法
- 数据挖掘十大算法----EM 算法(最大期望算法)
- PageRank
- 数据挖掘算法学习(八)Adaboost 算法
- 数据挖掘十大算法--K 近邻算法
- 机器学习与数据挖掘-K 最近邻(KNN) 算法的实现(java 和 python 版)
- 朴素贝叶斯分类器
- 数据挖掘十大经典算法--CART: 分类与回归树
数据挖掘十大经典算法--CART: 分类与回归树
一、决策树的类型 在数据挖掘中,决策树主要有两种类型:
分类树 的输出是样本的类标。 回归树 的输出是一个实数 (例如房子的价格,病人呆在医院的时间等)。
术语分类和回归树 (CART) 包含了上述两种决策树,最先由 Breiman 等提出.分类树和回归树有些共同点和不同点—例如处理在何处分裂的问题。
分类回归树(CART,Classification And Regression Tree) 也属于一种决策树,之前我们介绍了基于 ID3 和 C4.5 算法的决策树。这里只介绍 CART 是怎样用于分类的。
分类回归树是一棵二叉树,且每个非叶子节点都有两个孩子,所以对于第一棵子树其叶子节点数比非叶子节点数多 1。
CART 与 ID3 区别: CART 中用于选择变量的不纯性度量是 Gini 指数; 如果目标变量是标称的,并且是具有两个以上的类别,则 CART 可能考虑将目标类别合并成两个超类别(双化); 如果目标变量是连续的,则 CART 算法找出一组基于树的回归方程来预测目标变量。
二、构建决策树
构建决策树时通常采用自上而下的方法,在每一步选择一个最好的属性来分裂。 "最好" 的定义是使得子节点中的训练集尽量的纯。不同的算法使用不同的指标来定义"最好"。本部分介绍一中最常见的指标。
有 4 中不同的不纯度量可以用来发现 CART 模型的划分,取决于目标变量的类型,对于分类的目标变量,可以选择 GINI,双化或有序双化; 对于连续的目标变量,可以使用最小二乘偏差(LSD)或最小绝对偏差(LAD)。
下面我们只讲 GINI 指数。 GINI 指数: 1、是一种不等性度量; 2、通常用来度量收入不平衡,可以用来度量任何不均匀分布; 3、是介于 0~1 之间的数,0-完全相等,1-完全不相等; 4、总体内包含的类别越杂乱,GINI 指数就越大(跟熵的概念很相似)
CART 分析步骤
1、从根节点 t=1 开始,从所有可能候选 S 集合中搜索使不纯性降低最大的划分 S,然后,使用划分 S将节点 1(t=1)划分成两个节点 t=2 和 t=3; 2、在 t=2 和 t=3 上分别重复划分搜索过程。
基尼不纯度指标 在 CART 算法中,基尼不纯度表示一个随机选中的样本在子集中被分错的可能性。基尼不纯度为这个样本被选中的概率乘以它被分错的概率。当一个节点中所有样本都是一个类时,基尼不纯度为零。
假设 y 的可能取值为{1, 2, ..., m},令 fi 是样本被赋予 i 的概率,则基尼指数可以通过如下计算:
例如:
上例是属性有 8 个,每个属性又有多少离散的值可取。在决策树的每一个节点上我们可以按任一个属性的任一个值进行划分。比如最开始我们按:
1)表面覆盖为毛发和非毛发
2)表面覆盖为鳞片和非鳞片
3)体温为恒温和非恒温
等等产生当前节点的左右两个孩子。下面我们按 GINI 指数划分有:
GINI 指数
总体内包含的类别越杂乱,GINI 指数就越大(跟熵的概念很相似)。比如体温为恒温时包含哺乳类 5 个、鸟类 2 个,则:
体温为非恒温时包含爬行类 3 个、鱼类 3 个、两栖类 2 个,则
所以如果按照“体温为恒温和非恒温”进行划分的话,我们得到 GINI 的增益(类比信息增益):
最好的划分就是使得 GINI_Gain 最小的划分。
终止条件
一个节点产生左右孩子后,递归地对左右孩子进行划分即可产生分类回归树。这里的终止条件是什么?什么时候节点就可以停止分裂了?直观的情况,当节点包含的数据记录都属于同一个类别时就可以终止分裂了。这只是一个特例,更一般的情况我们计算χ2 值来判断分类条件和类别的相关程度,当χ2 很小时说明分类条件和类别是独立的,即按照该分类条件进行分类是没有道理的,此时节点停止分裂。注意这里的“分类条件”是指按照 GINI_Gain 最小原则得到的“分类条件”。
假如在构造分类回归树的第一步我们得到的“分类条件”是:体温为恒温和非恒温。此时:
三、剪枝
决策树为什么(WHY) 要剪枝?原因是避免决策树过拟合(Overfitting) 样本。前面的算法生成的决策树非常详细并且庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的。因此用这个决策树来对训练样本进行分类的话,你会发现对于训练样本而言,这个树表现完好,误差率极低且能够正确得对训练样本集中的样本进行分类。训练样本中的错误数据也会被决策树学习,成为决策树的部分,但是对于测试数据的表现就没有想象的那么好,或者极差,这就是所谓的过拟合(Overfitting) 问题。Quinlan 教授试验,在数据集中,过拟合的决策树的错误率比经过简化的决策树的错误率要高。
怎么剪枝
现在问题就在于,如何(HOW) 在原生的过拟合决策树的基础上,生成简化版的决策树?可以通过剪枝的方法来简化过拟合的决策树。
剪枝可以分为两种:预剪枝(Pre-Pruning) 和后剪枝(Post-Pruning),下面我们来详细学习下这两种方法: PrePrune:预剪枝,及早的停止树增长,方法可以参考见上面树停止增长的方法。 PostPrune:后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。 其实剪枝的准则是如何确定决策树的规模,可以参考的剪枝思路有以下几个: 1:使用训练集合(Training Set)和验证集合(Validation Set),来评估剪枝方法在修剪结点上的效用 2:使用所有的训练集合进行训练,但是用统计测试来估计修剪特定结点是否会改善训练集合外的数据的评估性能,如使用 Chi-Square(Quinlan,1986)测试来进一步扩展结点是否能改善整个分类数据的性能,还是仅仅改善了当前训练集合数据上的性能。 3:使用明确的标准来衡量训练样例和决策树的复杂度,当编码长度最小时,停止树增长,如 MDL(Minimum Description Length) 准则。
1、Reduced-Error Pruning(REP,错误率降低剪枝) 该剪枝方法考虑将书上的每个节点作为修剪的候选对象,决定是否修剪这个结点有如下步骤组成: 1:删除以此结点为根的子树 2:使其成为叶子结点 3:赋予该结点关联的训练数据的最常见分类 4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点 因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度) REP 是最简单的后剪枝方法之一,不过在数据量比较少的情况下,REP 方法趋于过拟合而较少使用。这是因为训练数据集合中的特性在剪枝过程中被忽略,所以在验证数据集合比训练数据集合小的多时,要注意这个问题。 尽管 REP 有这个缺点,不过 REP 仍然作为一种基准来评价其它剪枝算法的性能。它对于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用 REP 剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。
2、Pessimistic Error Pruning(PEP,悲观剪枝) 先计算规则在它应用的训练样例上的精度,然后假定此估计精度为二项式分布,并计算它的标准差。对于给定的置信区间,采用下界估计作为规则性能的度量。这样做的结果,是对于大的数据集合,该剪枝策略能够非常接近观察精度,随着数据集合的减小,离观察精度越来越远。该剪枝方法尽管不是统计有效的,但是在实践中有效。 PEP 为了提高对测试集合的预测可靠性,PEP 对误差估计增加了连续性校正(Continuity Correction)。PEP 方法认为,如果:
成立,则 Tt 应该被剪枝,
上式中:
其中,e(t) 为结点 t 出的误差;i 为覆盖 Tt 的叶子结点;Nt 为子树 Tt 的叶子树;n(t) 为在结点 t 处的训练集合数量。PEP 采用自顶向下的方式,如果某个非叶子结点符合上面的不等式,就裁剪掉该叶子结点。该算法被认为是当前决策树后剪枝算法中经度比较高的算法之一,但是饿存在有缺陷。首先,PEP 算法是唯一使用 Top-Down 剪枝策略,这种策略会导致与先剪枝出现同样的问题,将该结点的某子节点不需要被剪枝时被剪掉;另外 PEP 方法会有剪枝失败的情况出现。 虽然 PEP 方法存在一些局限性,但是在实际应用中表现出了较高的精度,。两外 PEP 方法不需要分离训练集合和验证机和,对于数据量比较少的情况比较有利。再者其剪枝策略比其它方法相比效率更高,速度更快。因为在剪枝过程中,树中的每颗子树最多需要访问一次,在最坏的情况下,它的计算时间复杂度也只和非剪枝树的非叶子节点数目成线性关系。
Cost-Complexity Pruning(CCP、代价复杂度) CCP 方法包含两个步骤: 1:从原始决策树 T0 开始生成一个子树序列{T0、T1、T2、...、Tn},其中 Ti+1 是从 Ti 总产生,Tn 为根节点 2:从子树序列中,根据树的真实误差估计选择最佳决策树。
对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α。
是子树中包含的叶子节点个数;
是节点 t 的误差代价,如果该节点被剪枝;
r(t) 是节点 t 的误差率;
p(t) 是节点 t 上的数据占所有数据的比例。
是子树 Tt的误差代价,如果该节点不被剪枝。它等于子树 Tt上所有叶子节点的误差代价之和。
比如有个非叶子节点 t4 如图所示:
比如有个非叶子节点 t4 如图所示:
已知所有的数据总共有 60 条,则节点 t4 的节点误差代价为:
子树误差代价为:
以 t4 为根节点的子树上叶子节点有 3 个,最终:
找到α值最小的非叶子节点,令其左右孩子为 NULL。当多个非叶子节点的α值同时达到最小时,取最大的进行剪枝。
剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要,对于不同的划分标准生成的最大树(Maximum Tree),在剪枝之后都能够保留最重要的属性划分,差别不大。反而是剪枝方法对于最优树的生成更为关键。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论