02-21 决策树ID3算法
目录
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/
决策树ID3算法
决策树(decision tree)是一种基本的分类与回归方法,同时由于自身是弱分类器特别适合集成学习,例如随机森林、XgBoost。
本文将通过ID3算法带大家入门决策树,之后会另写文章谈谈C4.5算法和CART分类回归树。
一、决策树ID3算法学习目标
- 信息增益
- 决策树ID3算法流程
- 决策树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 流程
- 初始化信息增益的阈值\(\epsilon\)
- 如果\(D\)中的所有样本都属于同一类\(C_k\),则返回单节点树\(T\),标记类别为\(C_k\)
- 如果\(A\)为空集,则返回单节点树\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
- 计算\(A\)中各个特征对输出\(D\)的信息增益,选择信息增益最大的\(A_g\)
- 如果\(A_g\)小于阈值\(\epsilon\),则返回单节点数\(T\),标记类别为\(D\)中样本数最大的类\(C_k\)
- 如果\(A_g\)大于阈值\(\epsilon\),则按照特征\(A_g\)的不同取值\(A_{g_i}\)把\(D\)分割成若干个子集\(D_i\),每个子集生成一个子节点,子节点对应特征值为\(A_{g_i}\),递归调用\(2-6\)步,得到子树\(T_i\)并返回
五、决策树ID3算法优缺点
5.1 优点
- 理论清晰,方法简单
- 学习能力强
5.2 缺点
- 没有考虑到特征连续值的情况,即如人的身高、体重都是连续值,无法在ID3算法中应用,即ID3算法更适合做分类
- 以信息增益作为划分训练数据集的特征,存在于偏向于选择取值较多的特征的问题。因为相同条件下,取值比较多的特征的信息增益大于取值较少的特征
- 没有考虑过拟合问题
- 没有考虑特征中含有缺失值的情况
六、小结
决策树ID3算法是最原始的决策树算法,由于它较好的解释型在当时也是火了一段时间。但是他的缺点也是特别明显的,树深度大了则容易过拟合,并且无法处理回归问题,无法处理连续值的问题等等一系列问题。
决策树ID3算法由于它自身的缺陷目前已较少使用,也因为这些缺点有了我们下一篇要介绍的算法——决策树C4.5算法。
02-21 决策树ID3算法的更多相关文章
- 数据挖掘之决策树ID3算法(C#实现)
决策树是一种非常经典的分类器,它的作用原理有点类似于我们玩的猜谜游戏.比如猜一个动物: 问:这个动物是陆生动物吗? 答:是的. 问:这个动物有鳃吗? 答:没有. 这样的两个问题顺序就有些颠倒,因为一般 ...
- 决策树ID3算法[分类算法]
ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...
- 决策树---ID3算法(介绍及Python实现)
决策树---ID3算法 决策树: 以天气数据库的训练数据为例. Outlook Temperature Humidity Windy PlayGolf? sunny 85 85 FALSE no ...
- 机器学习之决策树(ID3)算法与Python实现
机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...
- 机器学习决策树ID3算法,手把手教你用Python实现
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型--决策树. 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解 ...
- 决策树ID3算法的java实现(基本试用所有的ID3)
已知:流感训练数据集,预定义两个类别: 求:用ID3算法建立流感的属性描述决策树 流感训练数据集 No. 头痛 肌肉痛 体温 患流感 1 是(1) 是(1) 正常(0) 否(0) 2 是(1) 是(1 ...
- 决策树 -- ID3算法小结
ID3算法(Iterative Dichotomiser 3 迭代二叉树3代),是一个由Ross Quinlan发明的用于决策树的算法:简单理论是越是小型的决策树越优于大的决策树. 算法归 ...
- 【Machine Learning in Action --3】决策树ID3算法
1.简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定 ...
- 决策树ID3算法的java实现
决策树的分类过程和人的决策过程比较相似,就是先挑“权重”最大的那个考虑,然后再往下细分.比如你去看医生,症状是流鼻涕,咳嗽等,那么医生就会根据你的流鼻涕这个权重最大的症状先认为你是感冒,接着再根据你咳 ...
随机推荐
- 【UEFI】---BIOS中UserPassword的重复校验总结
UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可.而其中很多编程所采用的思想确实值得学习.今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考. 先列干货,具体 ...
- MySql创建索引、删除索引、新增字段、删除字段、修改字段语句
--------------------------------------------------------- -- ALTER TABLE 创建索引 ---------------------- ...
- 新手学习FFmpeg - 调用API计算关键帧渲染时间点
通过简单的计算来,线上I帧在视频中出现的时间点. 完整代码请参考 https://andy-zhangtao.github.io/ffmpeg-examples/ 名词解释 首先需要明确以下名词概念: ...
- Hive数据导入/导出
1.1 导入/导出规则 EXPORT 命令导出数据表或分区,与元数据一起输出到指定位置.又可以从这个输出位置移动到不同的Hadoop 或Hive 实例中,并且使用IMPORT 命令导入. 当导出一个分 ...
- Git客户端下载
链接:http://pan.baidu.com/s/1eRXsITO 密码:4i6e
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher 题解报告
来刷kuangbin字符串了,字符串处理在ACM中是很重要的,一般比赛都会都1——2道有关字符串处理的题目,而且不会很难的那种,大多数时候都是用到一些KMP的性质或者找规律. 点击标题可跳转至VJ比赛 ...
- Golang 入门系列(十五)如何理解go的并发?
前面已经讲过很多Golang系列知识,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 接下来要说的 ...
- 上海地铁游移动APP需求分析
人们在现实的生活中会遇到各种各样的问题,有不同的需求,我们需要加以解决,开发一个软件是一个很好的方法去解决这些需求和问题.那么,作为一个软件团队如何才能准确而全面地找到这些需求呢?主要有一下几个步骤. ...
- Python基础(十一)
今日主要内容 补充:三目运算 f-strings 迭代器 生成器 补充:三目运算 三目运算(三元运算)结构: 表达式1 if 条件表达式 else 表达式2 c = a if a > b els ...
- java教程系列二:Java JDK,JRE和JVM分别是什么?
多情只有春庭月,犹为离人照落花. 概述 本章主要了解JDK,JRE和JVM之间的区别.JVM是如何工作的?什么是类加载器,解释器和JIT编译器.还有一些面试问题. Java程序执行过程 在深入了解Ja ...