理解ID3决策树
决策树是一个树形结构,类似下面这样:
上图除了根节点外,有三个叶子节点和一个非叶子节点。
在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件、需及时处理的邮件、无需阅读的邮件。
使用决策树来分类某个样本数据,就是利用根节点选取的特征,将当前输入样本划分到根节点下的某个子节点上,然后再利用子节点表示的特征来将当前样本划分到该子节点下的某个子节点上,以此继续,直到到达某个叶子节点,那么这个叶子节点表示的类别就是当前决策树对该样本数据所属的类别的预测。
对于上图,因为各个节点表示的特征和各个叶子节点表示的分类都已经给出了,所以给定一个数据很容易就能预测出对应的类别,但是在实际的分类场景中,我们手上有了标注好的训练样本数据后,要如何来构建一颗能够预测新样本类别的决策树呢?换句话说就是,我们如何知道这颗决策树的各个节点选取什么特征来划分数据才最合适呢?ok,你可能听过一些算法的名字,比如ID3、C4.5、CART等,它们其实就是用来解决这个问题的。
这里我们将介绍ID3算法。
我们选取划分数据集的特征的时候,需要考虑的标准是什么特征可以更好的将数据集分开,比如判断是男人还是女人,那么【是否穿高跟鞋】要比【是否带耳钉】更容易将人群划分开,或者说更能划分出纯度高的数据子集。
然而,其实很多时候我们都无法轻易的看出哪种特征能划分出更纯的数据子集,所以就需要一种方法能够帮助我们量化每种特征划分出的数据子集的信息纯度,以便筛选出更纯的划分方式。而其中一种方法就是使用信息论,信息论是量化处理信息的分支科学,可以用来度量信息,比如度量我们刚才说的数据子集的纯度。
所以阅读下面的内容之前,建议先了解一下信息论中的相关知识,包括信息量、信息熵,可以参考这篇文章:《信息熵为什么要定义成-Σp * log(p)》。
ID3决策树使用信息熵度量数据子集的纯度,信息熵越大,数据越混乱,纯度越低。
从ID3决策树的第一层开始,如果每一层的信息熵都是按照最大化的方式递减的,才能最快划分出纯度较高的数据子集(就像我们人工做分类,一定是从最显著的特征开始划分物品,才是最大程度利用了显著特征的优势,所以以这种方式做分类最快),然后根据叶子节点划分出的数据子集中的最多出现的类别来确认对应叶子节点的所属分类,从而得到一颗完整的分类决策树。
那么如何保证每一层的信息熵以最大化的方式递减呢?这就要说到信息增益了。
在划分数据集之前之后信息发生的变化称为信息增益, 所以计算出每个特征划分数据集获得的信息增益,然后获得信息增益最高的特征就是最好的选择。
信息增益的计算方式如下:
按某个特征划分当前节点数据集将得到的信息增益 =
当前节点数据集的信息熵 - 按该特征划分出来的各个数据子集的信息熵总和
ok,对ID3决策树总结一下:
遍历每个特征,找出使得信息增益最大的特征,做为当前节点下数据子集的划分特征,直到所有属性遍历完毕,或者某个数据子集的所有数据都已经具有相同的分类,此时ID3决策树构建完成,可以用来预测新样本的类别了。
然而,ID3还是有缺陷的,比如会偏向选择特征值比较多的特征来划分数据子集,然而如果训练数据中符合这个特征值的数据只出现过很少,甚至是一次,那么将导致构建出的决策树对这个特征的偏见。另外,ID3无法处理含有连续型数值的特征以及处理回归问题,这类场景下,决策树需要另一种算法——CART,下一篇文章会具体介绍。
ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。
理解ID3决策树的更多相关文章
- Python3实现机器学习经典算法(三)ID3决策树
一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...
- ID3决策树预测的java实现
刚才写了ID3决策树的建立,这个是通过决策树来进行预测.这里主要用到的就是XML的遍历解析,比较简单. 关于xml的解析,参考了: http://blog.csdn.net/soszou/articl ...
- python ID3决策树实现
环境:ubuntu 16.04 python 3.6 数据来源:UCI wine_data(比较经典的酒数据) 决策树要点: 1. 如何确定分裂点(CART ID3 C4.5算法有着对应的分裂计算方式 ...
- 理解CART决策树
CART算法 原理 CART全称为Classification and Regression Tree. 回归树 相比ID3,CART遍历所有的特征和特征值,然后使用二元切分法划分数据子集,也就是每个 ...
- ID3决策树的Java实现
package DecisionTree; import java.io.*; import java.util.*; public class ID3 { //节点类 public class DT ...
- ID3决策树
决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺少不敏感,可以处理不相关特征数据 缺点:过拟合 决策树的构造 熵:混乱程度,信息的期望值 其中p(xi)是选择分类的概率 熵就是计算所有类别 ...
- ID3决策树---Java
1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.Arra ...
- java编写ID3决策树
说明:每个样本都会装入Data样本对象,决策树生成算法接收的是一个Array<Data>样本列表,所以构建测试数据时也要符合格式,最后生成的决策树是树的根节点,通过里面提供的showTre ...
- 决策树-ID3
id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
随机推荐
- AO SDK安装问题
ao sdk for .net安装时,需要进行验证.net框架,没装vs的时候会提示 arcobjects SDK for the Microsoft.NT Framework requires a ...
- uni-app Vue3项目引入Tailwind CSS
前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,同时还补全各种浏览器模式前缀,兼容性也不错.它的工作原理是扫描所有 HTML 文件.JavaScri ...
- 聊一聊坑人的 C# MySql.Data SDK
一:背景 1. 讲故事 为什么说这东西比较坑人呢?是因为最近一个月接到了两个dump,都反应程序卡死无响应,最后分析下来是因为线程饥饿导致,那什么原因导致的线程饥饿呢?进一步分析发现罪魁祸首是 MyS ...
- 断言、drf之请求与响应
目录 一.断言 二.drf之请求 2.1 Request能够解析的前端传入的编码格式 2.2 Request类有哪些属性和方法(学过) 常用参数 Response类的实例化参数 三.drf之响应 3. ...
- jenkins异常 -- active (exited),无法启动
一.问题描述 1.无法启动 systemctl start jenkins 没有反应,没有输出报错 2.查询状态 systemctl status jenkins 3.jenkins拒绝访问 二.解决 ...
- docker保存、导入、导出和加载tar及其tar.gz
一.操作tar包1.save和load命令save命令 docker save [options] images [images...]示例 : docker save -o nginx.tar ng ...
- Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags
reno@MyComputer:~/tools/cmake-3.12.4$ ./configure --------------------------------------------- CMak ...
- Java多线程处理文件详解与代码示例
在Java编程中,文件处理是一项常见的任务.当需要处理大量文件或处理文件的时间较长时,单线程的处理方式可能会显得效率低下.为了提高文件处理的效率,我们可以使用多线程技术.本文将详细介绍如何使用Java ...
- Qt音视频开发41-文件推流(支持网页和播放器播放并切换进度)
一.前言 本功能最初也是有一些人提过类似的需求,就是能不能将本地的音视频文件,通过纯Qt程序推流出去,然后用户可以直接在网页上播放,也可以用各种播放器播放,然后还可以任意切换播放进度,其实说白了就是个 ...
- React 应用的 Nginx 缓存控制
典型 React 应用面临的缓存问题,可通过 Nginx 配置进行解决 通用部署 构建应用后,只需使用 Nginx 指向静态文件即可 server { listen 80; root /PATH/TO ...