zoukankan      html  css  js  c++  java
  • Decision Tree

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12713169.html

    决策树

    决策树模型是一种描述对实例进行分类的树形结构。决策树由节点有向边组成。结点有两种类型:内部节点叶节点。内部节点表示一个特征或属性,叶节点表示一个类。

    • 决策树是最经典的机器学习模型之一
    • 是一个类似于流程图的树结构
    • 一种分类算法,它通过对训练集的学习,挖掘出有用的规则,用于对新数据进行预测
    • 是一种监督学习算法

    决策树的工作原理

    在做决策树的时候,会经历两个阶段:构造和剪枝。

    构造

    构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点:

    • 根节点:就是树的最顶端,最开始的那个节点
    • 内部节点:就是树中间的那些节点
    • 叶节点:就是树最底部的节点,也就是决策结果。

    节点之间存在父子关系。比如根节点会有子节点,子节点会有子子节点,但是到了叶节点就停止了,叶节点不存在子节点。那么在构造过程中,需要解决三个重要的问题:

    • 选择哪个属性作为根节点;
    • 选择哪些属性作为子节点;
    • 什么时候停止并得到目标状态,即叶节点。

    剪枝

    剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不错的结果。之所以这么做,是为了防止“过拟合”(Overfitting)现象的发生。

    造成过拟合的原因之一就是因为训练集中样本量较小。如果决策树选择的属性过多,构造出来的决策树一定能够“完美”地把训练集中的样本分类,但是这样就会把训练集中一些数据的特点当成所有数据的特点,但这个特点不一定是全部数据的特点,这就使得这个决策树在真实的数据分类中出现错误,也就是模型的“泛化能力”差。

    泛化能力指的分类器是通过训练集抽象出来的分类能力,你也可以理解是举一反三的能力。如果我们太依赖于训练集的数据,那么得到的决策树容错率就会比较低,泛化能力差。因为训练集只是全部数据的抽样,并不能体现全部数据的特点。

    一般来说,剪枝可以分为“预剪枝”(Pre-Pruning)和“后剪枝”(Post-Pruning)。

    • 预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。
    • 后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。方法是:用这个节点子树的叶子节点来替代该节点,类标记为这个节点子树中最频繁的那个类。

    属性选择

    纯度

    可以把决策树的构造过程理解成为寻找纯净划分的过程。数学上,可以用纯度来表示,纯度换一种方式来解释就是让目标变量的分歧最小。

    信息熵(entropy)

    信息熵表示了信息的不确定度。

    在信息论中,随机离散事件出现的概率存在着不确定性。为了衡量这种信息的不确定性,信息学之父香农引入了信息熵的概念,并给出了计算信息熵的数学公式:

    p(i|t) 代表了节点 t 为分类 i 的概率,其中 log2 为取以 2 为底的对数。这个公式作为一种度量,它能帮我们反映出来这个信息的不确定度。当不确定性越大时,它所包含的信息量也就越大,信息熵也就越高。信息熵越大,纯度越低。

    ID3

    ID3算法就是基于信息增益选择节点属性。

    信息增益

    信息增益指的就是划分可以带来纯度的提高,信息熵的下降。它的计算公式,是父亲节点的信息熵减去所有子节点的信息熵。在计算的过程中,我们会计算每个子节点的归一化信息熵,即按照每个子节点在父节点中出现的概率,来计算这些子节点的信息熵。所以信息增益的公式可以表示为:

    公式中 D 是父亲节点,Di 是子节点,Gain(D,a) 中的 a 作为 D 节点的属性选择。一般而言,信息增益越大,则意味着使用属性 a 来进行划分所获得的“纯度提升”越大。

    ID3的缺陷

    ID3倾向于选择取值比较多的属性

    有些属性可能对分类任务没有太大作用,但是它们会被选为最优属性。

    C4.5

    C4.5 在 ID3 的基础上,用信息增益率代替了信息增益,解决了噪声敏感的问题,并且可以对构造树进行剪枝、处理连续数值以及数值缺失等情况,但是由于 C4.5 需要对数据集进行多次扫描,算法效率相对较低。信息增益率 = 信息增益 / 属性熵。所以信息增益率的公式可以表示为:

    IV 是属性 a 的固有值,a 的可能取值数目越多(V 越大),IV(a) 的值通常越大,信息增益率就会减小。显然信息增益率偏好可取值数目少的属性

    CART

    CART 分类树

    CART 分类树与 C4.5 算法类似,只是属性选择的指标采用的是基尼系数。

    基尼系数本身反应了样本的不确定度。当基尼系数越小的时候,说明样本之间的差异性小,不确定程度低。分类的过程本身是一个不确定度降低的过程,即纯度的提升过程。所以 CART 算法在构造分类树的时候,会选择基尼系数最小的属性作为属性的划分。基尼系数越小,数据样本纯度越高

    假设 t 为节点,那么该节点的 GINI 系数的计算公式为:

    这里 p(Ck|t) 表示节点 t 属于类别 Ck 的概率,节点 t 的基尼系数为 1 减去各类别 Ck 概率平方和。

    CART 回归树

    CART 回归树划分数据集的过程和分类树的过程是一样的,只是回归树得到的预测结果是连续值,而且评判“不纯度”的指标不同。在 CART 分类树中采用的是基尼系数作为标准,那么在 CART 回归树中,实际上要根据样本的混乱程度,也就是样本的离散程度来评价“不纯度”。

    样本的离散程度具体的计算方式是,先计算所有样本的均值,然后计算每个样本值到均值的差值。假设 x 为样本的个体,均值为 u。为了统计样本的离散程度,可以取差值的绝对值,或者方差。

    其中差值的绝对值为样本值减去样本均值的绝对值:

    方差为每个样本值减去样本均值的平方和除以样本个数:

    所以这两种节点划分的标准,分别对应着两种目标函数最优化的标准,即用最小绝对偏差(LAD),或者使用最小二乘偏差(LSD)。这两种方式都可以找到节点划分的方法,通常使用最小二乘偏差的情况更常见一些。

    Decision Tree 算法优缺点

    优点

    • 决策树算法可以自学习,在学习的过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。
    • 决策树算法可以很容易地将模型进行可视化,可以让非专业人士也看得明白。

    缺点

    • 很容易出现过拟合

      

    Summary

    Reference

    https://time.geekbang.org/column/article/78273

    https://time.geekbang.org/column/article/78659

  • 相关阅读:
    word2vector 资料
    回声状态网络(ESN)基础教程
    GBDT:梯度提升决策树
    B-树,B+树,B*树详解
    HTTP权威指南-基础知识
    JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
    HTML自定义对象与属性探究(谷歌,火狐,IE9浏览器没问题)
    冒泡,setinterval,背景图的div绑定事件,匿名函数问题探究
    JavaScript高级程序设计--表单脚本
    我是跨域的JSONP
  • 原文地址:https://www.cnblogs.com/agilestyle/p/12713169.html
Copyright © 2011-2022 走看看