决策树算法

决策树模型的核心:
1.由节点与有向边组成
2.节点分为内部节点和叶子节点
3.内部节点表示一个特征,叶子节点表示一个类

每个内部特征表示一个特征属性上的测试,分支代表这个特征属性在某个值域上的输出

决策树的关键步骤是分裂属性,即按照一种特征属性的不同划分(比如阈值),构造不同分支。目标上让各个分裂自己尽可能地“纯”,即属于同一类别。

ID3算法[1]

“纯度”度量指标:信息增益,表示得知a属性的信息使得信息熵(复杂度)减少的程度。
信息熵:\(Entropy(S) \equiv \displaystyle\sum_{i=1}^c -p_i log_2p_i\),
其中,\(S\)为事件的集合,\(p_i\)为事件\(i\)发生的概率,\(c\)为特征总数。熵是以2进制位的个数来度量编码长度的,因此熵的最大值是\(log_2 c\)。

信息增益:\(Gain(S,A) \equiv Entropy(S) - \displaystyle\sum_{v\in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v)\),
其中,\(A\)表示一种属性,\(v\)表示这个属性上的划分值。

缺陷[1]

  1. ID3算法对可取值数目较多的属性有所偏好。因为这样的属性会使得条件熵值较大。
  2. 没有剪枝过程
  3. 只可以处理离散分布的数据特征

C4.5

改进[1]

C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

  1. 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
  2.  在树构造过程中进行剪枝;
  3.  能够完成对连续属性的离散化处理;
  4.  能够对不完整数据进行处理。

C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

“纯度”度量指标:信息增益率

“纯度”度量指标:信息增益率。
设样本集\(S\)按离散属性\(F\)的\(c\)个不同取值划分为\(c\)个子集,则它们的信息熵为:
\(SplitInformation(S,A)\equiv -\displaystyle\sum_{i=1}^c \frac{|S_i|}{|S|} log_2\frac{|S_i|}{|S|}\),可以看出这\(c\)个子集的信息熵是定值。
则信息增益率为:\(GainRatio(S,A)\equiv\frac{Gain(S,A)}{SplitInformation(S,A)}\)

但增益率又会对类比数目较小的特征有所偏好(分母小,信息增益率大)。故,C4.5算法先在划分属性中,找出信息增益高于平均水平的那些划分属性作为候选,再从候选中选择增益率最大的.

离散化处理

将连续型的属性变量进行离散化处理,形成决策树的训练集[2]:

  1. 将该属性的所有连续值从大到小排序,去重
  2. 以相邻两个连续值的中点作为划分值,计算信息增益(信息熵-条件信息熵)
  3. 假设有n个不重复的连续值,我们需要计算n-1次
  4. 取增益最大的划分值,将连续值离散化

不完整数据处理[1]

处理缺少属性值的一种策略是赋给该节点所有对应训练实例中该属性最常见的值,另一种复杂的情况是为该节点每个可能出现的值赋予一个概率。

CART(分类与回归树,二叉)

度量指标

回归树

“纯度”度量指标:回归方差
\(\sigma=\sqrt{\displaystyle\sum_{i\in I}(x_i-\mu)^2}=\sqrt{\displaystyle\sum_{i\in I}x_i^2-n\mu^2}\)
其中,\(I\)为,\(x_i\),\(\mu\)

回归方差越大,节点数据越分散(不纯)。故选择划分的依据为,最小化:
\(Gain=\displaystyle\sum_{i \in I}\sigma_i\)

分类树

“纯度”度量指标:GINI系数
\(GINI=1-\displaystyle\sum_{j\in J}p_j^2\)
其中,\(J\)为类的个数,\(p_j\)为样本属于第\(j\)类的概率,举个栗子,10个样本中有7个样本属于A类,3个样本属于B类,那么
\(GINI=1-(\frac{7}{10})^2-(\frac{3}{10})^2=0.42\)

GINI系数越大,表示节点越不纯。故选择划分的依据为,最小化:
\(Gain=\displaystyle\sum_{i \in I}p_i\cdot GINI_i\)
\(Gain\)应该这么理解,在划分后一共有\(I\)类(二叉树。。其实就两类嘛),总样本中被划分到第\(i\)类的样本共占\(p_i\)(这里是频率而不是概率),这些被划分到第\(i\)类的样本中,GINI值为\(GINI_i\)。所以这个GINI值不是所有样本的GINI值,更像是一个“条件概率”,在给定第\(i\)类样本的条件下,计算样本的纯度。

举个栗子,如图[3]。

二值化处理

由于CART是一棵二叉树,所以对于连续型或离散型的数据,需要进行二值化。
对连续型的处理与C4.5类似,只不过不用信息增益作评价指标,而是GINI值或样本方差。
对离散型的处理,采用one-versus-rest的划分方法,划分为两个类。

不完整数据处理

处理缺少属性值的一种策略是赋给该节点所有对应训练实例中该属性最常见的值,另一种复杂的情况是为该节点每个可能出现的值赋予一个概率[1]。

CART生成算法[4]

输入:训练数据集\(D\),停止计算的条件。
输出:CART决策树。
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:

  1. 设结点的训练数据集为\(D\),对每一特征\(A\),“穷举”可能取的每个值\(a\),根据样本点对\(A=a\)的测试为“是”或“否”分割为\(D_1\)和\(D_2\)两部分,计算\(A=a\)时的基尼指数。
  2. 在所有可能的特征\(A\)以及他们所有可能的切分点\(a\)中,选择基尼系数最小的特征$A^* \(及其对应的切分点\)a^*\(作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去(根据\)A^*=a^*$)。
  3. 对两个子结点递归地调用步骤1、2,直至满足停止条件。
  4. 停止计算,生成CART决策树。

算法停止计算的条件:一般是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART剪枝[3]

决策树优缺点

  1. 优点

    • 白盒:决策树算法中学习简单的决策规则,建立决策树模型的过程非常容易理解,决策树模型可以可视化,非常直观。
    • 不需要对数据做先验假设
    • 速度快,准确性高
    • 对数据要求相对低:
      • 预处理往往更简单,比如无需去掉空白值、无需归一化等;
      • 能同时处理数据型和常规型属性(比如样本可以是:男,30岁,医生,结婚。这包含了数据、常规型属性);
      • 对缺失值不敏感(可赋予平均值、中位数、众数等),可以处理不相关特征数据;
      • 对异常值鲁棒。
    • 应用范围广,可用于分类和回归,而且非常容易做多类别的分类。
    • 可以做特征选择、特征组合
  2. 缺点
    • 很容易在训练数据中生成复杂的树结构,造成过拟合。剪枝可以缓解过拟合的负作用,常用方法是限制树的高度、叶子结点中的最少样本数量。
    • 若数据集类别不平衡,生成的树会存在偏见。
    • 对时间序列数据,需要很多预处理的工作。
    • 难以预测连续性的字段,即学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树。
    • 回归预测输出值缺少平滑性,只会是有限的几种数值。
    • 不适合处理高维稀疏数据,不适合处理特征关联性较强的数据。

参考文献

[1] https://www.cnblogs.com/coder2012/p/4508602.html(附代码
[2] https://blog.csdn.net/u014514939/article/details/79299619
[3] https://www.cnblogs.com/yonghao/p/5135386.html
[4] https://blog.csdn.net/baimafujinji/article/details/53269040

决策树 - 可能是CART公式最严谨的介绍的更多相关文章

  1. python数据分析算法(决策树2)CART算法

    CART(Classification And Regression Tree),分类回归树,,决策树可以分为ID3算法,C4.5算法,和CART算法.ID3算法,C4.5算法可以生成二叉树或者多叉树 ...

  2. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)

                                                    第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...

  3. 机器学习之决策树三-CART原理与代码实现

    决策树系列三—CART原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9482885.html ID ...

  4. 决策树之CART算法

    顾名思义,CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,必然也满足决策树的几大步骤,即: ...

  5. 决策树(上)-ID3、C4.5、CART

    参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树): 1.https://zhuanlan.zhihu.com/p/85731206 2.https://zhuanla ...

  6. 机器学习技法-决策树和CART分类回归树构建算法

    课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.决策树(Decision Tree).口袋(Bagging),自适应增 ...

  7. 决策树系列(五)——CART

    CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点: (1)CART既能是分类树,又能是分类树: (2)当CART是分类树时,采用GINI值作为节点分裂的依据 ...

  8. 监督学习——决策树理论与实践(下):回归决策树(CART)

    介绍 决策树分为分类决策树和回归决策树: 上一篇介绍了分类决策树以及Python实现分类决策树: 监督学习——决策树理论与实践(上):分类决策树          决策树是一种依托决策而建立起来的一种 ...

  9. 【机器学习速成宝典】模型篇06决策树【ID3、C4.5、CART】(Python版)

    目录 什么是决策树(Decision Tree) 特征选择 使用ID3算法生成决策树 使用C4.5算法生成决策树 使用CART算法生成决策树 预剪枝和后剪枝 应用:遇到连续与缺失值怎么办? 多变量决策 ...

随机推荐

  1. VBScript开发Excel常见问题

    VBS基础 基本概念:VB & VBS & VBA VB.VBScript和VBA(Visual Basic For Application)这三种语言,既有联系又有区别.三种语言的语 ...

  2. Android组件化框架项目详解

    简介 什么是组件化? 项目发展到一定阶段时,随着需求的增加以及频繁地变更,项目会越来越大,代码变得越来越臃肿,耦合会越来越多,开发效率也会降低,这个时候我们就需要对旧项目进行重构即模块的拆分,官方的说 ...

  3. HTTP协议图--HTTP 报文实体

    1. HTTP 报文实体概述   HTTP 报文结构 大家请仔细看看上面示例中,各个组成部分对应的内容. 接着,我们来看看报文和实体的概念.如果把 HTTP 报文想象成因特网货运系统中的箱子,那么 H ...

  4. Kafka生产者producer简要总结

    Kafka producer在设计上要比consumer简单,不涉及复杂的组管理操作,每个producer都是独立进行工作的,与其他producer实例之间没有关联.Producer的主要功能就是向某 ...

  5. codeforces 156D Clues(prufer序列)

    codeforces 156D Clues 题意 给定一个无向图,不保证联通.求添加最少的边使它联通的方案数. 题解 根据prufer序列,带标号无根树的方案数是\(n^{n-2}\) 依这个思想构建 ...

  6. JVM线程状态,park, wait, sleep, interrupt, yeild 对比

    ---恢复内容开始--- JVM线程状态 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAIT ...

  7. #Alpha Scrum4

    Alpha Scrum3 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:音乐网页前端页面编写,博客发布 林书浩.陈远军:界面设计.美化 吴沂章 ...

  8. Alpha Scrum2

    Alpha Scrum2 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:督促和监督团队进度.协调组内合作,前端页面编写,博客发布 林书浩.陈远 ...

  9. linux下Python3的安装

    linux平台下,需要gcc和openssl-devel的依赖包,所以没有的话需要先安装: yum -y install gcc*   yum -y install openssl-devel 然后将 ...

  10. python对列表中的字典进行排序

    数据显示为: rows=[{'日期': '2018-09-04', '测试1': '50.00 %', '测试2': '100.00%'}, {'日期': '2018-09-05', '测试1': ' ...