更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

决策树ID3算法

决策树(decision tree)是一种基本的分类与回归方法,同时由于自身是弱分类器特别适合集成学习,例如随机森林、XgBoost。

本文将通过ID3算法带大家入门决策树,之后会另写文章谈谈C4.5算法和CART分类回归树。

一、决策树ID3算法学习目标

  1. 信息增益
  2. 决策树ID3算法流程
  3. 决策树ID3算法优缺点

二、决策树引入

假设银行需要构造一个征信系统用来发放贷款,如果你是构建该系统的人,你会如何构建该系统呢?

我说说我将如何构建一个银行的征信系统,首先,我会判断征信人的年收入有没有50万,如果有我直接判定他可以贷款,如果没有我会再做其他的判断;其次,判断征信人有没有房产,如果有房产也就是说他有了可以抵押的不动产,既可以判定他可以贷款,如果没有,则不能贷款……

上述整个过程其实就是决策树实现的一个过程,接下来将从理论层面抽象的讲解三种形式的决策树。

三、决策树ID3算法详解

3.1 if…else和决策树

如上一节的征信系统构建一样,决策树ID3算法的思想其实很简单,当你在使用\(if\ldots{elif}\ldots{else}\)敲代码的时候其实就是在使用决策树的思想,但是你有没有想过把哪个判断条件放在\(if\)上回更好,是先判断年收入还是先判断有没有房产呢?其实在1970年的时候就有一位叫昆兰的大牛使用信息论上熵的概念来思考过这个问题,并在此基础上使用信息增益这个概念构建了决策树决策的过程。

具体的方法是:从根节点开始,计算所有可能特征的信息增益,选择信息增益最大的特征作为根节点的特征,由该特征的不同特征值作为不同的子节点;再对子节点递归调用上述方法,构建决策树;直到所有特征的信息增益都很小或者没有特征可以选择为止,最后得到一颗完整的决策树\(T\)。

上述方法构建的决策树则会如上图所示类似于算法中的二叉树,但是需要注意的是ID3算法的决策树是多叉树,并且决策树的各个节点使用信息增益选择特征,然后递归构建决策树。

3.2 信息增益

在《熵与信息增益》一文中提到:熵\(H(X)\)度量了随机变量\(X\)的不确定性;条件熵\(H(Y|X)\)度量了知道\(X\)以后\(Y\)剩下的不确定性;\(H(X)-H(X|Y)\)度量了\(Y\)在知道\(X\)之后不确定性的减少程度,这个度量记作\(g(Y,X)\),并且在决策树ID3算法中称为信息增益。

从此处可以看出,信息增益越大的特征,\(Y\)在知道\(X\)之后不确定性的减少程度会越大,因此更适合用来分类。

四、决策树ID3算法流程

4.1 输入

假设现有一个训练集\(D\),特征集\(A\),阈值\(\epsilon\)。

4.2 输出

ID3算法决策树。

4.3 流程

  1. 初始化信息增益的阈值\(\epsilon\)
  2. 如果\(D\)中的所有样本都属于同一类\(C_k\),则返回单节点树\(T\),标记类别为\(C_k\)
  3. 如果\(A\)为空集,则返回单节点树\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
  4. 计算\(A\)中各个特征对输出\(D\)的信息增益,选择信息增益最大的\(A_g\)
  5. 如果\(A_g\)小于阈值\(\epsilon\),则返回单节点数\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
  6. 如果\(A_g\)大于阈值\(\epsilon\),则按照特征\(A_g\)的不同取值\(A_{g_i}\)把\(D\)分割成若干个子集\(D_i\),每个子集生成一个子节点,子节点对应特征值为\(A_{g_i}\),递归调用\(2-6\)步,得到子树\(T_i\)并返回

五、决策树ID3算法优缺点

5.1 优点

  1. 理论清晰,方法简单
  2. 学习能力强

5.2 缺点

  1. 没有考虑到特征连续值的情况,即如人的身高、体重都是连续值,无法在ID3算法中应用,即ID3算法更适合做分类
  2. 以信息增益作为划分训练数据集的特征,存在于偏向于选择取值较多的特征的问题。因为相同条件下,取值比较多的特征的信息增益大于取值较少的特征
  3. 没有考虑过拟合问题
  4. 没有考虑特征中含有缺失值的情况

六、小结

决策树ID3算法是最原始的决策树算法,由于它较好的解释型在当时也是火了一段时间。但是他的缺点也是特别明显的,树深度大了则容易过拟合,并且无法处理回归问题,无法处理连续值的问题等等一系列问题。

决策树ID3算法由于它自身的缺陷目前已较少使用,也因为这些缺点有了我们下一篇要介绍的算法——决策树C4.5算法。

02-21 决策树ID3算法的更多相关文章

  1. 数据挖掘之决策树ID3算法(C#实现)

    决策树是一种非常经典的分类器,它的作用原理有点类似于我们玩的猜谜游戏.比如猜一个动物: 问:这个动物是陆生动物吗? 答:是的. 问:这个动物有鳃吗? 答:没有. 这样的两个问题顺序就有些颠倒,因为一般 ...

  2. 决策树ID3算法[分类算法]

    ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...

  3. 决策树---ID3算法(介绍及Python实现)

    决策树---ID3算法   决策树: 以天气数据库的训练数据为例. Outlook Temperature Humidity Windy PlayGolf? sunny 85 85 FALSE no ...

  4. 机器学习之决策树(ID3)算法与Python实现

    机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...

  5. 机器学习决策树ID3算法,手把手教你用Python实现

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型--决策树. 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解 ...

  6. 决策树ID3算法的java实现(基本试用所有的ID3)

    已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...

  7. 决策树 -- ID3算法小结

          ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法:简单理论是越是小型的决策树越优于大的决策树. 算法归 ...

  8. 【Machine Learning in Action --3】决策树ID3算法

    1.简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定 ...

  9. 决策树ID3算法的java实现

    决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳 ...

随机推荐

  1. NPOI导出Excel封装

    直接上代码 public class ExcelUtils { public static ICellStyle CreateStyle(IWorkbook workbook, string font ...

  2. 【2】KNN:约会对象分类器

    前言 这是一个KNN算法的应用实例,参考<机器学习实战>中的datingTestSet2.txt的数据集. 可以通过对不同约会对象的特征进行分析然后自动得出以下三种结论: 不喜欢的 有点魅 ...

  3. docker 搭建自己的github

    github 搭建:   自己搭建一个github网站(仓库)   daocloud:公共hub搜索git下载github镜像 docker pull gitlab/gitlab-ce:8.7.0-r ...

  4. JavaBean的学习

    一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...

  5. Maven学习归纳(一)——简单的环境配置入门

    一.Maven的基本概念 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的编译,测试,构建,报告和文档的软件项目管理工具和解决依赖关系的工具. 1.1 项目的构建 项目的构建 ...

  6. Alodi:为了保密我开发了一个系统

    每天都在愉快的造轮子,这次可以一键创建测试环境 咖啡君维护了几十个不同类型项目,其中有相当一部分项目是对保密性有很高要求的,也就是说下个版本要上线的内容是不能提前泄露的,就像苹果新产品的介绍网站决不允 ...

  7. Elasticsearch(8) --- 聚合查询(Metric聚合)

    Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...

  8. 百度脑图-离线版(支持Linux、Mac、Win)

    免费好用的思维导图软件(在线版) 离线版:桌面版脑图是基于百度脑图的本地化版本,帮助你在没有互联网环境的情况下,依然可以使用脑图工具. 百度脑图帮助你进行思维导图,可以运用于学习.写作.沟通.演讲.管 ...

  9. 【linux】【jenkins】自动化运维二 安装插件

    gitlab安装教程参考:https://www.cnblogs.com/jxd283465/p/11525629.html 1.Maven Integration Plugins Jenkins安装 ...

  10. JAVA设计模式-单例模式(Singleton)线程安全与效率

    一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式 ...