实习了一段时间,接触了一些数据挖掘、机器学习的算法,先记录下来方便以后的复习回顾:

一:决策树概念

  决策树可以看做一个树状预测模型,它是由节点和有向边组成的层次结构。树中包含3中节点:根节点内部节点叶子节点。决策树只有一个根节点,是全体训练数据的集合。树中每个内部节点都是一个分裂问题:指定了对实例的某个属性的测试,它将到达该节点的样本按照某个特定的属性进行分割,并且该节点的每一个后继分支对应于该属性的一个可能值。每个叶子节点是带有分类标签的数据集合即为实例所属的分类。

  决策树算法很多,例如:ID3、C4.5、CART等。这些算法均采用自上而下的贪婪算法,每个内部节点选择分类效果最好的属性来分裂节点,可以分成两个或者更多的子节点,继续此过程直到这棵决策树能够将全部的训练数据准确的分类,或所有属性都被用到为止。该算法的简化版本是在使用了全部样本的假设来构建决策树的。具体步骤如下:

  (1):假设T为训练样本集。

  (2):从属性集合Attributes中选择一个最能区别T中样本的属性。

  (3):创建一个树节点,它的值为所选择的属性。创建此节点的子节点,每个子链代表所选属性的一个唯一值(唯一区间),使用子链的值进一步将样本细分为子类。

      对于每一个分支继续重复(2)(3)的过程,直到满足以下两个条件之一:

      (a):所有属性已经被这条路径包括。

      (b):与这个节点关联的所有训练样本都具有相同的目标属性(熵为0)。

  下面借用《数据挖掘概念与技术》书中的一个列子来方便理解:

  

                              图1-1

  图1-1是一个典型的决策树,它表示概念buys_computer,即它目的是预测顾客是否可能购买计算机。内部节点用矩形表示,叶子节点用椭圆表示。

  为了对未知的样本分类,样本的属性值在决策树上测试。我们用一些训练样本构造了图1-1中的决策树,每个内部节点表示一个属性上的测试,每个叶子节点代表一个分类(buys_computer = yes, buys_computer = no ).

二:决策树的适用情况

  通常决策树学习最适合具有以下特征的问题:

  (1):实例是由“属性-值”对表示的。

  (2):目标函数具有离散的输出值。例如上面的yes和no

  (3):实例的所有属性都是离散值。如果是连续值或者离散值种类太多,可以把它分为不同的区间,例如上面的age分为了3个区间而不是每个独立的值为一个判断分支。

三:决策属性的选择

  建树算法中属性的选择非常重要。属性选择方法很多种,例如信息增益(information gain)、信息增益比(information gain ratio)、Gini 指标(Gini Index)等方法。

  ID3算法依据的是信息增益来选择属性,每次计算所有剩余候选属性的信息增益,然后根据信息增益最大的一个作为此次的分类属性。信息增益是用熵作为尺度,是衡量属性对训练数据分类能力的标准。

  假设表3-1为图1-1中的训练样本集:共有14条数据,属性有:age、income、student、credit_rating,目标属性是:buys_computer

  

                            表3-1  

下面根据表3-1和图1-1的例子来讲解某具体属性的信息增益的计算过程:

  对于某个具体的属性A,它的信息增益计算表达式是:

  (1)是对给定样本分类所需的期望信息,计算过程如下:

  设Ss个训练样本的集合,S也就是对于表3-1中的数据,s = 14。假定类标号属性有m个不同值,定义m个不同类Ci(i=1,2,...m).设si是类Ci中的样本数,对应表3-1和图1-1实例中m=2,其中 C1 = yes C2 = no s1 = 9 s2 = 5 。

  则:

  其中pi是任意样本属于Ci的概率,pi = si/s .公式中的对数函数以2为底,因为信息用二进位编码。

    在该实例中     

  (2)是根据A划分子集的熵或期望值,计算过程如下:

    设属性A有v个不同的值{a1,...av},对应实例中的数据,例如属性age,分为3个不同的值:

    a1为 <=30

    a2为 30..40

    a3为 >40 ;

      

    属性A把训练样本集合S划分为v个子集{S1,...Sv};其中Sj包含训练样本集S中在属性A上有值aj的样本。Sij是子集Sj中属于类Ci的样本数。

    

    其中充当第j个子集的权值,等于子集(即A值为aj)的样本总数除以S中的样本总数 即 Sj/S。

    对于给定的子集Sj有

    其中,Pij=Sij/Sj  ,是Sj中的样本属于Ci的概率。

    

    该实例中:

        

因此属性age的信息增益为:Gain(age)= I(s1,s2) - E(age) = 0.246

    类似的我们可以计算出Gain(income)=0.029 Gain(student)=0.151 Gain(credit_rating)=0.048.由于age在属性中具有最高信息增益,因此它被选作为第一个测试属性。

    图1-1是最终生成的决策树。

四:决策树的剪枝

  为了防止决策树和训练样本集的过度拟合,需要对决策树进行剪枝。剪枝通常有事先剪枝法事后剪枝法。

  事先剪枝法: 是建树过程中判断当前节点是否需要继续划分的剪枝方法。通常是通过重要性检测判断是否停止分裂节点。

   事后剪枝法: 是让树充分生长之后,再判断是否将某些分支变成节点。常用方法是根据错误分裂率(或者决策树编码长度)进行决策树的事后修剪。

参考资料:机器学习  Mitchell T.M

     数据挖掘:概念与技术 第三版  Jiawei Han

   

转载于:https://www.cnblogs.com/justcxtoworld/p/3346271.html

分类算法之决策树介绍相关推荐

  1. 算法杂货铺——分类算法之决策树(Decision tree)

    算法杂货铺--分类算法之决策树(Decision tree) 2010-09-19 16:30 by T2噬菌体, 88978 阅读, 29 评论, 收藏, 编辑 3.1.摘要 在前面两篇文章中,分别 ...

  2. SparkMLlib分类算法之决策树学习

    SparkMLlib分类算法之决策树学习 (一) 决策树的基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风 ...

  3. 决策树分类算法(1) - 决策树简介及ID3/CS4.5算法

    1. 引言 在现实生活中,我们会遇到各种选择,不论是相亲,还是挑选水果,都是基于以往的经验来做判断.如果把判断背后的逻辑整理成一个结构图,你会发现它实际上是一个树状图,这就是我们今天要讲的决策树. 2 ...

  4. 算法杂货铺——分类算法之决策树(Decision tree) - T2噬菌体

    3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法.这两种算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断.在这一篇文章中,将讨论另一种被广泛使用的分类算 ...

  5. 编程神奇算法_分类算法的神奇介绍

    编程神奇算法 由Bryan Berend | 2017年3月23日 (by Bryan Berend | March 23, 2017) About Bryan: Bryan is the Lead ...

  6. 《数据分析实战》总结二之分类算法:决策树,朴素贝叶斯,SVM,KNN,Adaboost

    1 决策树 1.1 工作原理 把以前的经验总结出来,最后得到结果 比如打篮球,一般会根据"天气"."温度"."湿度"."刮风&qu ...

  7. 分类算法之决策树C4.5算法

    C4.5,是机器学习算法中的另一个分类决策树算法,它是决策树(决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树)核心算法,也是上节所介绍的ID3的改进算法,所以基本上了解了一半决策树构造方 ...

  8. python画图决策树算法分类_分类算法之决策树(理论篇)

    起步 决策树(decision tree)是一个树结构,可以是二叉树或非二叉树,也可以把他看作是 if-else 规则的集合,也可以认为是在特征空间上的条件概率分布. 决策树的结构 以一个简单的用于是 ...

  9. 王小草【机器学习】笔记--分类算法之决策树

    标签(空格分隔): 王小草机器学习笔记 决策树可以用于解决分类问题,也可以用于解决连续型的回归预测问题,是业界常说的机器学习的十大算法之一.决策树也属于监督学习的一种. 在教科书里必须会出现的,常用的 ...

最新文章

  1. “http 500内部服务器错误”的解决方法
  2. php空间限制磁盘限额,ORA-01536:超出表空间XXXX的空间限额
  3. 获得Web目录URL
  4. python 经典类和新式类
  5. zabbix server is not running the information displayed may not be current
  6. 复习--linux目录及文件操作
  7. 仿九天音乐图片切换技术[二],兼容ie,ff
  8. 前端制作动画的几种方式(css3,js)
  9. 【bzoj5452】[Hnoi2016]大数(莫队)
  10. java兄弟_java实现兄弟孩子树代码
  11. 力扣-389 找不同
  12. JavaScript:indexOf()方法
  13. Netty创建upd服务端
  14. UCOSIII---工程移植
  15. QT 之QPainter画点
  16. 网易博客搬家至CSDN博客指南
  17. 搭建邮件群发服务器费用,自建邮件群发服务器优缺点分析
  18. php卡死代码,服务器被php进程卡死问题排查-php5.2的curl-bug
  19. 动态网站基本上都是有后台的,静态的网站就是纯HTML的网站的,这样的网站是没有后台的
  20. 用迭代法求某数a的平方根

热门文章

  1. sap系统搭建教程_詹迟迟:如何搭建知识付费系统?知识付费系统搭建教程
  2. all方法 手写promise_promise.all的实现
  3. 计算机机器人方向,计算机考研想学习智能机器人方向都有那几个学校呢..._考研_帮考网...
  4. oracle 找不到程序,Oracle 找不到监听程序
  5. web系统四层结构中服务器端,基于.NET平台构建四层B/S结构的动态网站
  6. 嵌入式linux 网络唤醒,C语言实现wake on lan(网络唤醒...-Windows系统下用命令行编译C/C++...-字符串常量引起的思考_169IT.COM...
  7. Jackson ObjectMapper readValue过程
  8. 怎么判断一个字符串的最长回文子串是否在头尾_LeetCode 5 迅速判断回文串的Manacher算法...
  9. Nvidia CUDA初级教程6 CUDA编程一
  10. linux 磁盘分配 简书,linux 磁盘分区