更新、更全的《机器学习》的更新网站,更有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. 微信小程序实现pdf,word等格式文件上传

    目前微信只支持从聊天记录里面获取文件 一.前言 目前微信提供了一个接口 wx.chooseMessageFile 它能让用户从聊天记录里面选择一个或者多个文件,然后返回它的一些信息,列入文件的path ...

  2. Linux基础提高_sudo,行为审计,跳板机

    sudo 临时给普通用户赋予root权限的一种方式 echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >>/etc/ ...

  3. WS的发布与调用

    WebService—CXF整合Spring实现接口发布和调用过程  https://www.cnblogs.com/domi22/p/8094517.html   spring 集成cxf 第二弹( ...

  4. 每天学会一点点(spring-mvc.xml与web.xml配置文件)

    1.spring-mvc.xml中拦截器的使用 首先在springMVC.xml配置如下代码: <!-- 拦截器 --> <mvc:interceptors> <bean ...

  5. [币严区块链]ETH搭建节点区块数据同步的三种模式:full、fast、light

    ETH  全节点Archive(归档)模式数据量增长图 上述图表可通过链接查看:https://etherscan.io/chartsync/chainarchive 通过上表,可以看到截止2019年 ...

  6. FreeSql (二十七)将已写好的 SQL 语句,与实体类映射进行二次查询

    有时候,我们希望将写好的 sql 语句,甚至是存储过程进行查询,虽然效率不高(有时候并不是效率至上). 巧用AsTable var sql = fsql.Select<UserX>() . ...

  7. Flutter开发环境配置(MAC版)

    一.配置镜像 打开命令终端,输入命令open ~/.bash_profile,打开bash_profile文本,添加镜像路径并保存 export PUB_HOSTED_URL=https://pub. ...

  8. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  9. style属性css与javascript对照表

    有时候会用javascript来控制标签的style,但js的style属性写法跟css有点不一样,通常是一个单词的写法不变,单词-单词属性会去掉“-”,再把第二个单词的首字母大写,估计是为了与减法运 ...

  10. Jmeter 接口自动化-脚本数据分离实例

    一. 背景:  为了让大家更加的了解Jmeter,并且使用起来游刃有余.这篇我们主要讲一下,如何优雅的使用Jmeter一步步的实现接口自动化,完成脚本与数据分离,把可能对Jmeter脚本的维护转移到c ...