当前位置: 首页 > article >正文

决策树(2)

C4.5算法

基础概念

  1. C4.5 算法是对ID3 算法的改进。
  2. 用信息增益率来选择属性。
  3. 在决策树构造过程中进行剪枝。
  4. 对非离散数据也能处理。
  5. 能够对不完整数据进行处理。

通过对ID3的学习,可以知道ID3存在一个问题,那就是越细小的分割分类错误率越小,所以ID3会越分越细,分割太细了,训练数据的分类可以达到0错误率,但是因为新的数据和训练数据不同,所以面对新的数据分错率反倒上升了。决策树是通过分析训练数据,得到数据的统计信息,而不是专为训练数据量身定做。

比如给人做衣服,叫来10个人做参考,做出一件10个人都能穿的衣服,然后叫来另外5个和前面10个人身高差不多的,这件衣服也能穿。但是当你为10个人每人做一件正好合身的衣服,那么这10件衣服除了那个量身定做的人,别人都穿不了。

因此引入信息增益率来作为分类标准。

信息增益率

g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}     g(D,A)为信息增益(信息熵 - 条件熵) H_{A}(D)为特征A的固有值

信息熵H(D)=-\sum_{k=1}^{K}\frac{|C_{k}|}{|D|}\log_{2}\frac{|C_{k}|}{|D|}  k是类别,C_{k}是类别k下的数据集

条件熵H(D|A)=\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})   H(D_{i})=-\sum_{k=1}^{K}\frac{|C_{k}|}{|D_{i}|}\log_{2}\frac{|C_{k}|}{|D_{i}|}

A是特征,i是特征取值, eq?H%28D_%7Bi%7D%29是为当取第i个特征时分类的信息熵 

计算示例

信息熵:H(D)=-(\frac{5}{6}\log_{2}(\frac{5}{6})+\frac{1}{6}\log_{2}(\frac{1}{6}))=0.65

信息增益:g(D,A)=H(D)-\sum_{i}^{n}\frac{D_{i}}{D}H(D_{i})=0.65-(\frac{3}{6}H(D_{1})+\frac{3}{6}H(D_{2}))=0.19

天气的固有值:H_{weather}(D)=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}\log_{2}\frac{|D_{i}|}{|D|}=-(\frac{3}{6}\log_{2}(\frac{3}{6})+\frac{3}{6}\log_{2}(\frac{3}{6}))=1

信息增益率:g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}=\frac{0.19}{1}=0.19

剪枝

为了尽可能正确分类训练样本,节点的划分过程会不断重复直到不能再分,这样就可能对训练样本学习的“太好”了,把训练样本的一些特点当做所有数据都具有的一般性质,从而导致过拟合。我们可以通过剪枝处理去掉一些分支来降低过拟合的风险。

预剪枝

预剪枝不仅可以降低过拟合的风险而且还可以减少训练时间,但另一方面它是基于“贪心”策略,会带来欠拟合风险。
预剪枝表示在构造树的过程中,对一个节点考虑是否分支时,首先计算决策树不分枝时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。

后剪枝

后剪枝在构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。
后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情况下,后剪枝的欠拟合风险更小,泛化性能往往优于预剪枝决策树。

根据错误率降低剪枝是最简单的后剪枝方法之一,不过在数据量比较少的情况下,该方法却是较少使用。因为训练数据集合中的特性在剪枝过程中被忽略,所以在验证数据集合比训练数据集合小的多时,要注意这个问题。而且数据量较少的话,我们还要分出训练集好验证集,这也是个考验。 

缺点

  • 剪枝策略可以再优化;
  • C4.5 用的是多叉树,用二叉树效率更高;
  • C4.5 只能用于分类;
  • C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
  • C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

CART算法

基础概念

  • 用基尼指数来选择属性(分类),或用均方差来选择属性(回归)。
  • 顾名思义,CART算法既可以用于创建分类树,也可以用于创建回归树,两者在构建的过程中稍有差异。
  • 如果目标变量是离散的,称为分类树。
  • 如果目标变量是连续的,称为回归树。
  • 分类树可以处理离散数据,也就是数据种类有限的数据,它输出的是样本的类别,而回归树可以对连续型的数值进行预测,也就是数据在某个区间内都有取值的可能,它输出的是一个数值。

分类 

基尼系数

Gini(D)=\sum_{k=1}^{K}p_{k}(1-p_{k})

Gini(D)表示从数据集D中随机抽取两个样本,标记其不一致的概率。因此,基尼系数越小,数据集纯度越高。特别的,如果是一个二分类,则Gini(D)=ap(1-p);

集合D在特征A的条件下分为D1和D2两个部分,则集合D的基尼系数Gini(D,A)表示经过A=a划分后集合D的不确定性,公式如下:Gini(D,A)=\frac{|D_{1}|}{D}Gini(D_{1})+\frac{|D_{2}|}{D}Gini(D_{2})

回归

对于连续值的处理,CART 分类树采用基尼系数的大小来度量特征的各个划分点。对于任意划分特征 A,对应的任意划分点s 两边划分成的数据集 D_{1}D_{2} ,求出使D_{1}D_{2}各自集合的均方差最小,同时 D_{1}D_{2}的均方差之和最小所对应的特征和特征值划分点。

表达式为:min_{a,s}[min_{c_{1}}\sum_{x_{i}\in D_{1}}(y_i-c_{1})^{2}+min_{c_{2}}\sum_{x_{i}\in D_{2}}(y_i-c_{2})^{2}]

其中,c_{1}D_{1}数据集的样本输出均值,c_{2}D_{2} 数据集的样本输出均值。

预测方式 对于决策树建立后做预测的方式,上面讲到了 CART 分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。 而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。 

剪枝

CART算法采用一种“基于代价复杂度的剪枝”方法进行后剪枝,这种方法会生成一系列树,每个树都是通过将前面的树的某个或某些子树替换成一个叶节点而得到的,这一系列树中的最后一棵树仅含一个用来预测类别的叶节点。然后用一种成本复杂度的度量准则来判断哪棵子树应该被一个预测类别值的叶节点所代替。 这种方法需要使用一个单独的测试数据集来评估所有的树,根据它们在测试数据集熵的分类性能选出最佳的树。

决策树总结

划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。

使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;

样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;

样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;

剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。 


http://www.kler.cn/news/361716.html

相关文章:

  • (北京政务服务满意度公司)满意度调查助力服务质量提升
  • SpringBoot实现的汽车票在线预订系统
  • mysql数据量分库分表
  • 高效实现Python机器学习:超参数优化中的网格搜索与随机搜索详解
  • Django中的ModelForm组件
  • ue5 扇形射线检测和鼠标拖拽物体
  • 学会 学习
  • 京东笔试题
  • 【Python数据分析】利用Pandas库轻松处理大数据
  • LRDDR4芯片学习(三)——命令和时序
  • MySQL 中如何优化 DISTINCT 查询:基于 Java 的实践与应用
  • git-合并连续两次提交(一个功能,备注相同)
  • [区间dp]合并石子升级版
  • 如何借助通达信API构建自动化交易系统?
  • leetcode22.括号生成
  • 从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼
  • STM32_实验4_控制蜂鸣器
  • elasticsearch性能测试工具esrally
  • huggingface的数据集下载(linux下clone)
  • 好用的AI工具:探索智能生活的无限可能
  • Java 中接口的具名实现和匿名实现
  • 简述微服务高可用之Sentinel、Seate
  • 基于深度学习的地球观测中的目标检测
  • R语言医学数据分析实践-高级回归分析
  • Spring Boot Web智慧社区平台:设计与实现
  • 【Java】并发韵律:多线程编程的深度探索与艺术实践