• 参考:《机器学习实战》
  • 优点:计算复杂度不高, 输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特
  • 征数据。
  • 缺点:可能会产生过度匹配问题。
  • 适用数据类型:数值型和标称型。

  • 创建分支的伪代码(createBranch):

图1

1、信息熵:

    • 图1中划分数据集的原则是:将无序的数据变得有序。在划分数据集之前之后信息发生的变化称为信息增益,划分数据集获得的信息增益最高的特征就是最好的选择。(书中对为什么用最大信息熵作为度量的原因并作解释)。
    • 信息的定义:
    • 熵:           
    • 在Python中对数据集的某个特征求熵比较容易:首先用字典统计该特征所有出现的值,然后可以求出对应的概率,然后由熵公式便可求出熵。

2、数据集的划分

      • 选择最好的数据集划分方式:对数据集的每个特征求信息熵,熵取最大的特征即为在按该特征划分数据时最好。

3、创建树:

    • 创建树的停止条件:子集长度达到最小值1或者只有一个特征了。在Python中可以用字典来保存树。创建过程:
    • 代码细节:
    • 所有分类得到的各个子集,按照分类时特征的值存入一个字典中,而该字典的父字典又是不同子集划分的结果。这样一层层嵌套形成一个决策字典树。在上面字典树创立过程中要注意的一点是,每多分一级字典,在数据子集中就要将上一级字典的标签删除,以免下级字典建立过程中重复划分。同时还要注意程序中:subLabels=labels[:],这一语句的作用是复制labels的剩余部分。之所以这样,是因为labels为列表,在python中列表是引用的数据类型,对其值在子函数中进行改变,则所有的labels都将会改变,而且即使用形如subLabels=labels的方式,在子函数中改变subLabels时,labels也会跟着改变。

4、绘制树图

    • 使用matplotlib提供的注解功能画树图。
    • #-*- coding:cp936 -*-
      #===============================================================================
      # 使用文本注解绘制树节点
      #===============================================================================
      import matplotlib.pyplot as plt
      decisionNode = dict(boxstyle = 'sawtooth', fc = '0.8')
      leafNode = dict(boxstyle = 'round4', fc = '0.8')
      arrow_args = dict(arrowstyle = '<-') def plotNode(nodeTxt, centerPt, parentPt, nodeType):
      createPlot.ax1.annotate(nodeTxt, xy = parentPt, xycoords = 'axes fraction',\
      xytext = centerPt, ha = 'center', bbox = nodeType,\
      arrowprops = arrow_args)
      def createPlot():
      fig = plt.figure(1, facecolor='white')
      fig.clf()
      createPlot.ax1 = plt.subplot(111, frameon = False)
      plotNode('a decision node', (0.5,0.1), (0.1,0.5), decisionNode)
      plotNode('a leaf node', (0.8,0.1), (0.3,0.8), leafNode)
      plt.show()
      createPlot()

 5、使用决策树执行分类

    • 递归地比较测试数据各特征与决策树上的数值,直到进入叶子节点,最后将测试数据定义为叶子节点所属类型。

 

决策树学习(ID3)的更多相关文章

  1. 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法

    主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...

  2. 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看

    从决策树学习谈到贝叶斯分类算法.EM.HMM     引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...

  3. 从决策树学习谈到贝叶斯分类算法、EM、HMM

    从决策树学习谈到贝叶斯分类算法.EM.HMM                (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...

  4. 机器学习之决策树(ID3 、C4.5算法)

    声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...

  5. 决策树学习笔记(Decision Tree)

    什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...

  6. 决策树之ID3、C4.5、C5.0等五大算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- C5.0决策树之ID3.C4.5.C5.0算法 ...

  7. 机器学习之决策树一-ID3原理与代码实现

    决策树之系列一ID3原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9429257.html 应用实 ...

  8. 决策树之ID3,C4.5及CART

    决策树的基本认识  决策树学习是应用最广的归纳推理算法之一,是一种逼近离散值函数的方法,年,香农引入了信息熵,将其定义为离散随机事件出现的概率,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它 ...

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

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

  10. 机器学习之决策树(ID3)算法

    最近刚把<机器学习实战>中的决策树过了一遍,接下来通过书中的实例,来温习决策树构造算法中的ID3算法. 海洋生物数据:   不浮出水面是否可以生存 是否有脚蹼 属于鱼类 1 是 是 是 2 ...

随机推荐

  1. 1202: [HNOI2005]狡猾的商人 - BZOJ

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  2. 指针 取地址& 解引用 *

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAACNCAIAAAARutrLAAAgAElEQVR4nOydd3wcxd3/R13uvdsUY2

  3. 团体程序设计天梯赛-练习集L1-015. 跟奥巴马一起画方块

    L1-015. 跟奥巴马一起画方块 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 美国总统奥巴马不仅呼吁所有人都学习编程,甚至 ...

  4. asp防注入安全问题

    一.古老的绕验证漏洞虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈.这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题.例如以下代码存在问题: ...

  5. uva 558 Bellman_Ford

    Bellman_Ford算法   求图中是否存在负权值的回路   若图中不存在   则最短路最多经过n-1个结点   若经过超过n-1个节点 则存在负权值的回路  此图永远无法找到最短路  每条边最多 ...

  6. 多线程 (四)GCD

    学习GCD要掌握几个概念 任务:需要执行的代码块可以看作一个任务 队列:把任务放到队列里,遵循先进先出的原则 队列又分为串行队列和并行队列 串行队列:顺序执行 并发队列:同时执行多个任务 同步:在当前 ...

  7. jquery的ajax向后台servlet传递json类型的多维数组

    后台运行结果:                                                                                      前台运行结果: ...

  8. POJ3687——Labeling Balls(反向建图+拓扑排序)

    Labeling Balls DescriptionWindy has N balls of distinct weights from 1 unit to N units. Now he tries ...

  9. 关于hadoop的环境变量

    export PATH export JAVA_HOME=/opt/jdk1.7 export PATH=$PATH:$JAVA_HOME/bin 为什么/etc/profile 添加了环境变量had ...

  10. node.js模块之fs文件系统

    fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 POSIX 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了异步的和同步的两个版本, 例如读取文件内 ...