python决策树之C4.5算法详解
本文为大家分享了决策树之C4.5算法,供大家参考,具体内容如下 1. C4.5算法简介 C4.5算法是用于生成决策树的一种经典算法,是ID3算法的一种延伸和优化。C4.5算法对ID3算法主要做了一下几点改进: (1)通过信息增益率选择分裂属性,克服了ID3算法中通过信息增益倾向于选择拥有多个属性值的属性作为分裂属性的不足; 2. 分裂属性的选择――信息增益率 分裂属性选择的评判标准是决策树算法之间的根本区别。区别于ID3算法通过信息增益选择分裂属性,C4.5算法通过信息增益率选择分裂属性。 属性A的“分裂信息”(split information): 其中,训练数据集S通过属性A的属性值划分为m个子数据集, 通过属性A分裂之后样本集的信息增益: 信息增益的详细计算方法,可以参考博客“决策树之ID3算法及其Python实现”中信息增益的计算。 通过属性A分裂之后样本集的信息增益率: 通过C4.5算法构造决策树时,信息增益率最大的属性即为当前节点的分裂属性,随着递归计算,被计算的属性的信息增益率会变得越来越小,到后期则选择相对比较大的信息增益率的属性作为分裂属性。 3. 连续型属性的离散化处理 当属性类型为离散型,无须对数据进行离散化处理;当属性类型为连续型,则需要对数据进行离散化处理。C4.5算法针对连续属性的离散化处理,核心思想:将属性A的N个属性值按照升序排列;通过二分法将属性A的所有属性值分成两部分(共有N-1种划分方法,二分的阈值为相邻两个属性值的中间值);计算每种划分方法对应的信息增益,选取信息增益最大的划分方法的阈值作为属性A二分的阈值。详细流程如下: 4. 剪枝――PEP(Pessimistic Error Pruning)剪枝法 由于决策树的建立完全是依赖于训练样本,因此该决策树对训练样本能够产生完美的拟合效果。但这样的决策树对于测试样本来说过于庞大而复杂,可能产生较高的分类错误率。这种现象就称为过拟合。因此需要将复杂的决策树进行简化,即去掉一些节点解决过拟合问题,这个过程称为剪枝。 其中, 假设一棵子树错误分类一个样本取值为1,正确分类一个样本取值为0,那么子树的误判次数可以认为是一个伯努利分布,因此可以得到该子树误判次数的均值和标准差: 把子树替换成叶子节点后,该叶子节点的误判率为: 其中, 同时,该叶子结点的误判次数也是一个伯努利分布,因此该叶子节点误判次数的均值为: 剪枝的条件为: 满足剪枝条件时,则将所得叶子节点替换该子树,即为剪枝操作。 5. 缺失属性值的处理 训练样本集中有可能会出现一些样本缺失了一些属性值,待分类样本中也会出现这样的情况。当遇到这样的样本集时该如何处理呢?含有缺失属性的样本集会一般会导致三个问题: (1)在构建决策树时,每一个分裂属性的选取是由训练样本集中所有属性的信息益率来决定的。而在此阶段,如果训练样本集中有些样本缺少一部分属性,此时该如何计算该属性的信息益率; (2)当已经选择某属性作为分裂属性时,样本集应该根据该属性的值来进行分支,但对于那些该属性的值为未知的样本,应该将它分支到哪一棵子树上; (3)在决策树已经构建完成后,如果待分类样本中有些属性值缺失,则该样本的分类过程如何进行。 针对上述因缺失属性值引起的三个问题,C4.5算法有多种解决方案。 6. C4.5算法流程 7. C4.5算法优缺点分析 优点: (1)通过信息增益率选择分裂属性,克服了ID3算法中通过信息增益倾向于选择拥有多个属性值的属性作为分裂属性的不足; 缺点: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |