zoukankan      html  css  js  c++  java
  • 决策树及其剪枝原理

    决策树可以分成ID3、C4.5和CART。

    CART与ID3和C4.5相同都由特征选择,树的生成,剪枝组成。但ID3和C4.5用于分类,CART可用于分类与回归

    ID3和C4.5生成的决策树可以是多叉的,每个节点下的叉树由该节点特征的取值种类而定,比如特征年龄分为(青年,中年,老年),那么改节点下可分为3叉。而CART为假设决策树为二叉树,内部结点特征取值为”是”和”否”。

    特征选择

    CART分类树通过基尼指数选择最优特征,同时决定该特征的最优二值切分点,而ID3和C4.5直接选择最优特征,不用划分。

    算法目的:决策树的剪枝是为了简化决策树模型,避免过拟合。

    剪枝类型:预剪枝、后剪枝

    • 预剪枝:在构造决策树的同时进行剪枝。所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。但是这种方法实际中的效果并不好。
    • 后剪枝是在决策树生长完成之后,对树进行剪枝,得到简化版的决策树。
      剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,熵的增加量是否小于某一阈值。如果确实小,则这一组节点可以合并一个节点,其中包含了所有可能的结果。后剪枝是目前最普遍的做法。
      后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类称为majority class ,(majority class 在很多英文文献中也多次出现)。

    预剪枝依据:

    • 作为叶结点或作为根结点需要含的最少样本个数
    • 决策树的层数
    • 结点的经验熵小于某个阈值才停止

    后剪枝算法

    后剪枝算法有很多种,这里简要总结如下:

    Reduced-Error Pruning (REP,错误率降低剪枝)

    这个思路很直接,完全的决策树不是过度拟合么,我再搞一个测试数据集来纠正它。对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,那么该子树就可以替换成叶子节点。该算法以bottom-up的方式遍历所有的子树,直至没有任何子树可以替换使得测试数据集的表现得以改进时,算法就可以终止。

    Pessimistic Error Pruning (PEP,悲观剪枝)

    PEP剪枝算法是在C4.5决策树算法中提出的, 把一颗子树(具有多个叶子节点)用一个叶子节点来替代(我研究了很多文章貌似就是用子树的根来代替)的话,比起REP剪枝法,它不需要一个单独的测试数据集。

    CART分类回归树

    基尼指数

    分类问题,假设有K个类,样本点属于第k个类概率为pk,则概率分布的基尼指数定义为
    这里写图片描述
    对于二类分离,样本点属于第一个类的概率p,基尼指数
    这里写图片描述
    对于给定样本集合D,基尼指数

    Ck是D中属于第k类的样本子集,K是类的个数。
    如果样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分。
    (即在某一特征多个取值中,取其一个将其分为”是”其他为”不是”)
    这里写图片描述
    在特征A下,集合D的基尼指数定义为
    这里写图片描述
    基尼指数越大,样本集合不确定性越大。

    CART树生成

    (1) 设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对于每个特征,每次取其中一个每个可能取得值,根据样本点对该值的测试结果为”是”或”否”将D分成2部分,并计算基尼指数.
    (2) 在所有可能的特征,以及他们所有可能的切分点中,选择基尼指数最小的特征,该选择的特征为最优特征,该特征中的切分点为最优切分点,依照最优特征和最优切分点生成二叉树,并把训练数据集分配到子节点中。
    (3)对两个子节点递归调用 (1) (2) ,直至满足停止条件
    (4)生成CART决策树。
    停止条件是样本个数小于预定阈值,或样本基尼指数小于预定阈值,或没有更多特征。

    而ID3,C4.5在(1) (2)处与CART不同,ID3计算信息增益,C4.5计算信息增益比,首先求所有特征的信息增益或信息增益比,其中计算的数值是针对每一个特征,不将特征划分,而后以该特征将树延伸,在父节点确定的条件下,继续对子节点求所有特征的信息增益,后在划分。
    CART则为求所有特征下的所有切分点后进行比较来划分。

    在CART剪枝中

    CART剪枝分为剪枝成子树序列,并通过交叉验证选取最优子树。

    1.剪枝,成子树序列

    在剪枝过程中,计算子树的损失函数:
    这里写图片描述
    其中,T为任意子树C(T)为对训练数据的预测误差(如基尼指数)|T|为子树的节点个数,a>=0为参数,Ca(T)为参数是a时子树T的整体损失参数a权衡训练数据的拟合程度和模型的复杂度
    从上方a不是固定的时候,则整个损失函数由预测误差,a和模型复杂度共同决策,得出a大的时候,最优子树Ta偏小;当a小的时候,最优子树Ta的树较大,a=0时整体树最优,a->∞时,根结点组成的单节点树最优。
    且认为不同的a值,可以确定一棵不同的最优化的树,或者说一个区间内的a值可以确定一颗最优化的树
    即将a不断增大,利用a生成Ta这棵最优子树
    这里写图片描述

    为了得到所有的可能生成的最优化树{T0,T1,T2,…Tn},我们须从底向上,每次进行一次剪枝,通过得到的树认为是最优化树反推a
    具体的,从整体树T0开始剪枝,对于T0的任意内部结点t,结点下有若干子节点,把t下的子树的若干叶节点称为Tt。
    剪枝后(即t下的子树减去后,t变为叶节点)的损失函数
    这里写图片描述
    剪枝前的损失函数
    这里写图片描述
    注意这里的损失函数都是某个叶结点的损失函数,但为什么可以只求叶节点的损失函数,因为在上面的分析ID3,C4.5中得出了C(T)作为模型的预测误差的值,通过累加每一个叶结点(即T个叶结点)的预测误差而得出C(T)。因此单独求某个叶结点并没有什么问题。

    现在就是求解a,a如何求解?
    当a=0或充分小时,不等式

    这里写图片描述
    因为叶结点越多预测误差应该越小。
    当a不断增大时,在某个a点有
    这里写图片描述
    当a再增大时,不等式反向。因此只要
    这里写图片描述
    Tt与t有相同的损失函数,而t结点少,因此t比Tt更可取,对Tt进行剪枝。
    接下来对T0这棵整体树中的每一个结点t,计算

    这里写图片描述

    这个g(t)表示剪枝后的整体损失函数减少程度,实际上可以看为是否剪枝的阈值,对于某个结点当他的参数a=g(t)时,剪和不剪总体损失函数时一样的。如果a增大则不剪的整体损失函数就大于剪去的。即a大于g(t)该剪,剪后会使整体损失函数减小,而a小于g(t)则不剪,剪后会使整体损失函数增大。
    这样a缓慢增大,随着a的增大,在一个区间内可确定一棵最优的剪枝树

    而我们求每棵树,并认为他是最优剪枝树。

    g(t)则代表每一棵树的a的最优区间内的最小值

    即在T0中剪去g(t)最小的Tt,得到的子树为T1,同时将最小的g(t)设为a1,那

    么T1为区间[a1,a2)的最优子树。

    如此这样下去,将所有可能的树的情况剪枝直到根节点,在这个过程中则

    会不断增加a,产生新的区间,最后a的所有可能的g(t)取值全部确定。

    2.通过交叉验证选取最优子树

    具体的利用独立的验证数据集,测试子树序列T0,T1,…Tn中各棵子树的平

    方误差或基尼指数。平方误差或基尼指数最小的决策数被认为是最优决策

    数,因为我们每确定一棵子树就会确定其参数a值,所以最优子树Tk确定,对应ak也确定,即得到最优决策数Ta。

     

    在使用随机森林算法进行特征选择时,其中一种方法叫做OOB,即袋外误差:

  • 相关阅读:
    网页布局 选择符 选择符权重
    css基础
    新手入门html 表格 表单 超链接 图片
    新手入门html
    批量安装Windows系统
    无人值守批量安装服务器
    PXE实现无人值守批量安装服务器
    小白必看:零基础安装Linux系统(超级详细)
    项目实战:rsync+sersync实现数据实时同步
    rsync学习笔记
  • 原文地址:https://www.cnblogs.com/luban/p/9412339.html
Copyright © 2011-2022 走看看