• 二、决策树


    1. 构建一颗树

    一棵树包含一个根节点、若干个内部结点和若干个叶节点。从根节点开始,经由若干个内部结点,到不同的分支,最终到达不同的叶节点。

    根节点包含了样本全集,叶节点对应了决策结果,从根节点到每个叶节点的路径对应了一个判定测试样本。

    对于一棵用于分类的决策树来说,关键就是若干个内部结点的确定。

    针对数据集$D = { ({{f{x}}_1},{y_1}),({{f{x}}_2},{y_2}),...,({{f{x}}_m},{y_m})} $,其中${f{x}} = { {x_1},{x_2},...,{x_d}}$,包含d维属性,$y$是对应的类别。

    我们需要确定依次从哪个属性(视为内部结点)开始划分,一直到:

    1)当前结点包含的样本全属于一个类别,无需再划分;

    2)当前属性值为空,或是所有样本在所有属性上取值相同,无法划分;

    2)当前结点包含的样本集为空,不能划分,

    为止。最后返回一个包含固定结点的决策树。


    决策树学习基本算法

    输入:训练集$D = { ({{f{x}}_1},{y_1}),({{f{x}}_2},{y_2}),...,({{f{x}}_m},{y_m})} $,

       其中${f{x}} = { {x_1},{x_2},...,{x_d}}$,即属性集$A = {a_1, a_2,...,a_d}$

    过程:从根节点开始,

    1. 生成结点node
    2. if D中样本在该结点处都属于同一个类别C then
    3.        把该结点对应的属性从属性集A中去掉
    4.   并将该结点node标记为C类的叶节点
    5. end if
    6. if A是空集 OR D中样本在A上的取值相同 OR 属于该分支样本集为空 then
    7.        把该结点对应的属性从属性集A中去掉
    8.   并将该结点node标记为叶节点,类别为D中样本数最多的类
    9. end if
    10. 从剩余属性A中选择最优划分属性,例如选择信息增益最大的属性为最优划分属性
    11. 根据该属性生成结点node划分,回到第1步

    输出:包含固定结点的决策树


    随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,我们选择最优划分属性有三种指标,信息增益增益率基尼指数

    信息增益 ID3决策树

    增益率 C4.5决策树

    基尼系数 CART决策树

    。。。

    2. 完善这棵树

    2.1 剪枝处理

    剪枝是决策树学习算法对付“过拟合”的主要手段。

    预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;

    后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点.

    如何判断决策树泛化性能是否提升呢? 例如留出法,即预留一部分数据用作"验证集",来评估决策树的泛化性能。

    剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化能往往剪枝决策树。

    但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上对树中的所有非叶结点进行逐考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

    2.2 连续与缺失值

    连续值需要离散化,比如采用分法(bi-partition)对连续属性进行处理,从大到小排序,选择$frac{{max  - min }}{2}$为划分点来分为两类。

    需注意的是,与离散属性不同,若当前结点划分属性为连续属性?该属性还可作为其后代结点的划分属性.

    缺失值(不完整样本)不能被简单的放弃,有必要考虑利用有缺失属性值的训练、样例来进行学习。与没有缺失值决策树学习过程不同的是:

    我们需要给每个样本赋予一个权重$omega $,在最开始的时候,样本权重都是1。

    在进行划分属性选择的时,最优属性指标的计算多乘上一个比例$ ho $,该比例$ ho $表示该属性无缺失样本所占的比例。

    给定划分属性在进行样本划分时,对于属性缺失的样本,按照不同的概率 $r$划入到该属性不同取值(子节点)中去,该概率$r$表示无缺失值样本中在该属性中所占的比例。也就是在进行样本划分时,会把这个样本在该属性下的权重调整为$omega  cdot r$。

  • 相关阅读:
    17款加速效率的CSS工具
    我为什么向后端工程师推荐Node.js
    八款开源 Android 游戏引擎 (巨好的资源)
    50个必备的实用jQuery代码段
    $.getJSON()跨域请求
    javascript獲得服務器端控件的ID
    (转)8款在线CSS优化工具/组织和压缩CSS
    10 个文件和文档的比较工具
    40个有创意的jQuery图片和内容滑动及弹出插件收藏集之四
    MBP换硬盘的过程
  • 原文地址:https://www.cnblogs.com/yijuncheng/p/9943559.html
Copyright © 2020-2023  润新知