更新、更全的《机器学习》的更新网站,更有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. ubantu下配置共享文件

    原文转自 http://blog.chinaunix.net/uid-25305993-id-3754109.html 一 samba的安装: sudo apt-get install samba   ...

  2. F#周报2019年第37期

    新闻 宣告ML.NET 1.4的预览版及更新模型构建器 .NET展示会:一系列的活动! Octopus入门版:对于小团队免费 宣告.NET Core 3.0预览版9 使用IntelliCode更简单地 ...

  3. guava multimap介绍

    引用一篇别人的博客,理解理解 http://vipcowrie.iteye.com/blog/1517338

  4. 使用DevExpress的PdfViewer实现PDF打开、预览、另存为、打印(附源码下载)

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  5. Winform中实现ZedGraph的多条Y轴(附源码下载)

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  6. Linux环境下进行分布式压测踩过的坑

    背景:公司为了满足大并发的情况,需要测试组配合,就需要分布式压测,这里我把我踩过坑都记录下来: 环境:Linux + jmeter-v.5.1.1;使用3台2核4G的压力机: Q1: Server f ...

  7. LINUX下搭建简单临时的WWW服务器

    首先确定是否安装有python: python -V 如果有: cd 到你要开放的文件夹中,然后使用下面的命令可以把 当前文件夹内的所有文件 发布到 8000 端口. python -m Simple ...

  8. js中Math对象常用的属性和方法

    1 Math对象 1.1定义:Math是js的一个内置对象,它提供了一些数学方法. 1.2特性:不能用构造函数的方式创建,无法初始化,只有静态属性和方法 1.3静态属性 1.3.1 Math.PI 圆 ...

  9. [Leetcode] 第309题 最佳买卖股票时机含冷冻期

    一.题目描述 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与 ...

  10. 解决mysql不能在查询A表的同时,更新A表的问题

    方法: 运用中间表 UPDATE 表名 SET 字段名 = '' WHERE id in (SELECT a.id FROM (SELECT id FROM 表名 WHERE ISNULL(字段名)) ...