写点什么

决策树及 ID3 算法学习

  • 2019-10-25
  • 本文字数:4043 字

    阅读完需:约 13 分钟

决策树及ID3算法学习

决策树的基础概念

决策树是一种用树形结构来辅助行为研究、决策分析以及机器学习的方式,是机器学习中的一种基本的分类方法。决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。决策树用于对条件→到决策的过程进行建模。查看一个示例图:




示例给出了通过天气情况,晴天、雨天、多云、是否有风、以及湿度情况来决策判定是否适合游玩。由图可见,决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。当根据信息构建好决策树后,就可以依据决策树做出对给出的情况的决策结果判定了。决策树算法是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,通过学习得到一个分类器,分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。


机器学习中,决策树是一个预测模型;它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。由此可见,决策树最关键的点,就是选好决策的每个分支节点的决策条件的优先级,更好的保证更关键的决策条件在树的更上层,那么选择方法中,如果一个分割点(特征)可以将当前的所有节点分为两类,使得每一类都很“纯”即每一类的准确度都很高,也就是它们大多属于同一个目标结果,那么就是一个好分割点。这个分割的“纯度”的量化要有两种算法:基尼不纯度(Gini Impurity)和信息量(Entropy)。

GINI 不纯度

基尼不纯度(Gini Impurity)是指,将来自集合中的某种结果随机应用在集合中,某一数据项的预期误差率,是决策树对于混杂程度预测的一种度量方式。

信息量

信息量(Entropy)可以指描述一件事情的难易程度,比如太阳从哪边升起,我只需要说东边;而世界杯哪支球队夺冠,我需要说可能是巴西、可能是德国、可能是西班牙、可能是……;下面三幅图,C 是最容易描述的,信息量最小,而 A 是最不好描述的,信息量最大。换句话说,一件事情越“纯”,信息量越小。




,如果增加了以天气情况分割的话,为:


晴天,有无去玩数据信息量:



雨天,有无去玩数据信息量:



多云,有无去玩数据信息量:



信息量再进行期望相加,得到分割后的信息量之和:



,通过对比发现天气分割后的信息量最小,且比原信息量小,所以这种分割是最好的。同样,沿着各自节点向下计算剩余特征的信息量,直到信息量为 0 或不再降低。

过度拟合


蓝线为 Gini 分布,红线为 Entropy 分布,经过实际验证在决策树算法中都能比较准确地进行分支;Entropy 由于有 Log 运算,效率略微比 Gini 慢;


两者都只能以某个特征进行整体评估(比如户口),而不能具体到特征下某个特定类别上,比如多云的天气都适合出去玩,具备很高区分度,但不能被这两种算法挑出来,只能通过修改达到该目的并评估效果的差异。


就像前一条提到的,如果样本中多云天气 100%适合出去玩,万一后面有一天多云天气风太大而不适合出去玩的话,就会出现决策失效。因此构造决策树很容易陷入过度拟合(Overfitting)的问题,如果不设置一定的限制条件,一定可以让训练数据集达到 100%准确率,比如为每条数据都生成一个叶子节点。


案例,比如使用大小区分橘子和柚子,橘子大多比柚子小,所以理论上可以训练出体积在某个较小范围内的大多是橘子,而另一个范围是柚子,这样的决策树叶子节点。但如果不进行限制的话,决策树很可能会变成 21cm3 的是橘子、32cm3 宽的是橘子、85cm3 宽的是柚子,它针对训练集是 100%准确的,但对训练集以外的数据就不能很好的进行决策了。



避免过度拟合一般有两种方式:约束决策树和剪枝。

约束决策树

约束决策树方法有很多种,需要根据情况或需求来选择或组合:


1. 设置每个叶子节点的最小样本数,这能避免某个特征类别只适用于极小量的样本;


2. 设置每个节点的最小样本数,与上类似,但它是从根节点就开始避免过度拟合;


3. 设置树的最大深度,避免无限往下划分;


4. 设置叶子节点的最大数量,避免出现无限多的划分类别;


5. 设置评估分割数据时的最大特征数量,避免每次都考虑所有特征为求“最佳”,而采取随机选取的方式避免过度拟合;


上面这些数据到底设置为多少合适呢,就需要使用实际的测试集来验证不同约束条件下的决策准确性来评估了。

剪枝

剪枝是先构造好决策树之后再进行调整,总体思路是:对每个节点或其子树进行裁剪,通过一些算法评估裁剪前后决策树模型对数据的预测能力是否有降低,如果没有降低则说明可以剪枝。

几个常用的剪枝评估方法:

错误率降低剪枝(Reduced Error Pruning,REP)


a) 使用某种顺序遍历节点


b) 删除以此节点为根节点的子树


c) 使此节点为叶子节点


d) 将训练集中该节点特征出现概率最大的那一类赋予此节点(即这个节点就代表这一类)


e) 计算整体误判率或准确率,如果比剪枝前更好,那么就剪掉


悲观剪枝(Pessimistic Error Pruning,PEP)


a) 评估单个节点(并非子树)是否裁剪


b) 使用该节点下所有叶子节点的误差之和评估


c) 当裁剪前后的误差率不超过某个标准值,则裁剪


代价复杂度剪枝(Cost Complexity Pruning,CCP)


a) 在 CART 算法中具体介绍

决策树算法的优劣

优势:简单易懂;可处理数值和类别两种类型的数据;只需要少量的训练集即可使用;使用白盒模型,可清晰观察每个步骤;对大数据量的处理性能较好;相比其他算法更贴近人类思维方式。


劣势:准确性不如其他算法,对连续性字段难预测,特别是时间顺序的数据,需要较多预处理工作;树的稳定性不足,训练集的小变化就可能引起整棵树的剧变,导致最终预测的变化;容易过拟合;决策树处理包含不同数值类别的特征数据时,容易倾向于选择取值更多的特征作为分割节点,对字段特例化严重的数据,例如游戏用户分析中的用户名,就更容易出现过拟合,并且类别越多,错误就会增加的更快。

ID3- Iterative Dichotomiser 3

ID3 也就是第三代迭代式二分法,是一种基本的构建决策树的算法。ID3 算法是一种贪心算法,用来构造决策树,每一步选择当前的最优决策,并不是整体可见的最优决策。ID3 算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。该算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。

信息熵

上文已介绍过信息量的概念,这里从另外一个角度来说明。熵是一个来源于物理学的概念,用于度量一个热力学系统的无序程度,一个系统越混乱,系统的熵值越大。在信息论中,熵用于度量事件的不确定性,不确定性越高则信息熵越大。如果事件发生前,事件的结果就已经确定,如一定发生,或者一定不发生,信息熵趋近于零。Shannon 给出了度量信息熵的数学公式。对于随机变量 X,其值域为,pi 为 xi 发生的概率密度函数,则随机变量 X 的熵为:



从信息熵的定义看,随机变量 X 的值域范围越广,概率分布越均匀,则随机变量对应的信息熵值越大。事件发生前,越难猜中结果,事件包含的信息熵越大。依然以天气数据为例:



对于 Play 这一列数据,14 天中有 9 天适合游玩,5 天不适合,假设 9/14 就是适合游玩的概率,则天气是否适合游玩的信息熵计算方法如下:


信息增益

数据通常包含多个特征值,例如天气数据包含湿度、风力、降雨等。如果将天气先按照某种属性进行分类,然后再计算其他列数据的信息熵,分类前的信息熵与分类后的信息熵的差值则为数据按某列属性进行分类后得到的信息增益。假设可以按某个属性划分成 n 类,每一类为 Ti, |Ti|表示数量,划分后的信息熵计算方法如下:



,H(x)和 H(p)表达相同的含义。信息增益的计算方法如下:,还是以天气数据为例,计算是否适合游玩这一列数据按照温度划分后的的信息增益。温度分为 hot、mild、cool 三种,将天气是否时候游玩的数据按温度分成三部分:



划分后的信息量为:



则是否合适游玩的数据按照温度划分后的信息增益为:0.940-0.911=0.029bits。

ID3 算法核心

ID3 算法正是一种使用信息增益概念的贪心算法。算法步骤如下:


1) 在所有数据上依次计算每一个属性数据决策后带来的信息增益,选择信息增益最大的一个属性作为决策树的根节点,其实反向来说也就是选择信息熵最小的属性来做根节点。


2) 将数据第一步选择的属性进行分类,在每一个分类后的子集数据上创建依次计算剩余属性的信息增益,选择信息增益最大的属性作为根节点的叶子节点。


3) 重复执行第 2)步,直到所有的子集只包含一个元素或者所有的属性都已经成为决策树的某个节点。


需要指出的是,ID3 算法是一种贪心算法,每一步都选择当前子集上最大信息增益对应的属性作为节点。使用 ID3 该天气示例的最后建立的决策树结果如下:



ID3 对所使用的样本数据是有一定要求的,第一无法处理连续性数据,需要离散型数据,除非连续数据被分解为模糊范畴的类别数据;第二需要足够的样本量,因为需要足够的数据来区分每种数据特征类别存在过度耦合,从而更好的消除特殊的情况数据影响;第三,使用信息增益作为节点的分裂标准,实际上并不合理,会倾向于选择取值较多的属性。

ID3 的算法劣势

1、从信息增益的计算方法来看,信息增益无法直接处理连续取值的的属性数据,只能处理离散型的数据。


2、信息增益的计算方法需要对某列属性进行分类,如果属性是 ID,按照 ID 分类后,所有的分类都只包含一个元素,即 ID 就是信息增益最大的属性,导致 ID3 算法失效。


3、如果预测数据中出现了训练样本中没有出现过的情况,ID3 也是没有办法处理的。针对 ID3 算法的缺陷,后续发明了 C4.5,CART,random forest 等算法。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/W5zWo_bMllxNa__AtyPPiQ


2019-10-25 18:251953

评论

发布
暂无评论
发现更多内容

蒙牛:以新营销和“更好”的年轻一代共鸣

科技新消息

网络IO管理-简单一问一答、多线程方式

Linux服务器开发

多线程 后端开发 Linux后台开发 网络io 服务端开发

数千万次下载、百万行开源代码贡献,优麒麟如何打造中国开源操作系统新名片? | 卓越技术团队访谈录

优麒麟

Linux 开源 内核 优麒麟 多端融合

“中国牛”、“天生要强”翻新,2022蒙牛继续大满贯

科技新消息

蒙牛中国乳业产业园牧场建设项目全面复工

科技新消息

启动报名2022南京智博会 第十四届南京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

物联网

“敏捷项目比传统项目快”这个说法对吗?

优秀

项目管理 低代码开发

如何写内嵌式的帮助文档

小炮

帮助文档

基调听云直播回顾 | 让业务系统不再深不可测

基调听云

APM 可观测性 智能运维 基调听云

WEB安全:深入反射式dll注入技术

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

安装配置GPU训练环境

十三

AIOps(智能运维)中的指标算法场景分享 | 内附视频&ppt资料

云智慧AIOps社区

人工智能 AI 算法 运维 告警

TDengine 荣获 CSDN IT 技术影响力之星 “年度开源项目” 、 “年度IT领军人物”奖项

TDengine

数据库 tdengine 开源

你的产品越来越难卖?是时候关注价值流了

基调听云

DevOps APM 智能运维 基调听云

Redis 布隆(Bloom Filter)过滤器原理与实战讲解

码哥字节

布隆过滤器 4月日更 Redis 数据结构 4月月更

“天生要强”的迭代和蒙牛体育IP大满贯

科技新消息

WhiteSource 是否容易受到“Spring4Shell”漏洞 CVE-2022-22965 的影响?

龙智—DevSecOps解决方案

Spring4Shell WhiteSource

精彩回顾 | 金融服务数字化生态的开放与安全

FinClip

金融 数据安全

数仓建设 | ODS、DWD、DWM等理论实战

五分钟学大数据

数据仓库 4月月更

面试侃集合之 DelayQueue 篇

码农参上

4月月更

优麒麟荣获 CSDN IT 技术影响力之星“年度开源项目”奖项!

优麒麟

Linux 开源 IT 获奖 优麒麟

音视频开发—时间戳相关整理(时间基tbr,tbn,tbc)

Linux服务器开发

WebRTC ffmpeg SRS 音视频开发 流媒体服务器开发

大数据洞察画像自动化实践

网易云信

大数据

大咖说·图书分享|数字化转型架构:方法论与云原生实践

大咖说

阿里巴巴 云原生 数字化转型

首个!青藤蜂巢荣获网络安全卓越验证中心&泰尔实验室双认证

青藤云安全

网络安全 青藤

传统数据库改造难?华为云GaussDB“五心”解决

华为云数据库小助手

GaussDB

解决方案体现的是一个公司的深度思考能力

基调听云

APM 智能运维 业务运维 基调听云

2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

优麒麟社区 22.04 LTS Beta 版本发布!

优麒麟

Linux 开源 计算机 优麒麟 Beta

快速摆脱在线扩容难的噩梦,华为云数据库有妙计!企业级Redis 包年18元~

华为云数据库小助手

GaussDB GaussDB ( for Redis )

RISC-V开发板关机流程浅析

优麒麟

Linux 技术 risc-v开发板 优麒麟

决策树及ID3算法学习_文化 & 方法_袁明凯_InfoQ精选文章