热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

【西瓜书笔记二】决策树

一,基本流程决策树是一类常见的机器学习方法,是基于树结构来进行决策的。决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树。其基本流程遵循简单而直观的“分而治之”策略,如

一,基本流程

决策树是一类常见的机器学习方法,是基于树结构来进行决策的。决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树。其基本流程遵循简单而直观的“分而治之”策略,如下所示:





二,划分选择

决策树学习的关键在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一个类别,即结点的“纯度”越来越高。

1,信息增益

Ent(D)的值越小,则D的纯度越高。

假定离散属性a有V个可能的取值{a1,a,2,...,av},若使用a来对样本集D进行划分,则会产生V个分支结点,其中V个分支结点包含了D中所有在属性a上取值为av的样本,记为DV。一般来说样本数越多的分支结点影响越大,于是可计算出属性a对样本的集D进行划分所获得的“信息增益”:


其中DV表示的是正反比例。

一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。因此我们想用信息增益来进行决策树的划分选择。下面使用一个表来计算信息增益的过程。


该样本集中有17个样例用于学习一颗还没剖开的瓜是好的还是坏的。

· 第一步计算出根节点的信息熵:

第二步,计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益,

下面以“色泽”为例,计算器信息增益。该属性在D中的划分可以得到3个子集,分别记为:D1=(色泽=青绿),D2=(色泽=乌黑),D3=(色泽=浅白)。


于是,根据4.2可计算出属性“色泽”的信息增益为:


2,增益率

在上面的介绍中,并没有考虑“编号”这一属性,若将“编号”作为属性,那么“编号”将产生17个分支,每个分支结点仅包含一个样本,那么由 log1 =0 可知 Ent("编号") = 0 ,那么此时的信息增益为0.998,远大于其他属性。然而这样的决策树显然不具有泛化能力,无法对新样本进行有效预测。

这其实是因为信息增益准备会对取值数目较多的属性有所偏好,为减少可能带来的不利影响,C4.5决策树算法,使用“增益率”来选择最优划分属性。信息率定义为:

其中IV(a)称为属性a的“固有值”。属性a的可能取值数目越多(即V越大),则IV(a)的值通常越大。例如样本数据集有,IV(触感)=0.874 (V=2) , IV(色泽)=1.580 (V=3) , IV(编号)=4.088 (V=17) 。

需要注意的是增益率准备对于取值数目较少的属性有所偏好,因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。 

3,基尼系数

设有2种结果:Gini(D) = 2P1P2 = 1 - (p1*p1 + p2*p2) = (p1 + p2)*(p1 + p2)  - (p1*p1 + p2*p2) 


三,剪枝处理

剪枝是决策树学习算法对付“过拟合”的主要手段,这是因为训练样本学习的“太好”,以至于将训练集自身的一些特点当作所有数据都具有的一般性特点而导致的拟合,因此可以主动去掉一些分支来降低过拟合的风险。

决策树的剪枝有“预剪枝”和“后剪枝”。预剪枝是指在决策树过程中,对每个节点划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分并将当前结点标记为叶节点;后剪枝是指先从训练集生成一颗完整的树,然后自底向上的对非叶子结点进行考察,若将该结点对应的子树替换成叶子结点能带来泛化能力的提升,则将该子树替换成叶子结点。

那么如何判断决策树的泛化能力呢?可以采用留出法,即预留出一部分数据用作“验证集”以进行性能评估。如下表所示,将数据集划成两个部分:

1,预剪枝

由前面所知,基于信息增益作为准则,选取”脐部“来对训练集进行划分,则产生3个分支。然后是否应该进行划分呢?预剪枝要对划分前后的泛化性能进行估计。在划分前,所有样例集中在根节点。若不进行划分,则根据算法流程可知,该结点被标记为叶结点,其类别标记为训练样例中样例数最多的类别,则该结点标记为”好瓜“,那么验证集中有4个样例被分类错误,正确率为42.9%。而若用”脐部“划分之后,则结点2,3,4分别被标记为”好瓜“,”好瓜“,”坏瓜“,此时验证集中有5个被验证正确,因此精度为:71.4%。所以应该用”脐部“进行划分。


划分的结果如下所示:



2,后剪枝



最终得到的后剪枝图如上所示,其验证机精度为71.4%。通过对比可知,后剪枝决策树通常比预剪枝决策树保留更多的分支,一般情况下,后剪枝决策树的欠拟合风险小,泛化性能往往优于预剪枝决策树。但后剪枝决策树的训练时间要比一般的决策树和预剪枝决策树要耗费的时间多得多。


四,多变量决策树

有称为”斜决策树“。决策树所形成的分类边界有一个明显的特征:轴平行,即它的分类边界由若干个与坐标轴平行的分段组成。如下图所示:


这样在学习任务的真实分类边界比较复杂时,必须使用很多段划分,才能获得较好的近似。此时的决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会非常大。







推荐阅读
  •   上一篇博客中我们说到线性回归和逻辑回归之间隐隐约约好像有什么关系,到底是什么关系呢?我们就来探讨一下吧。(这一篇数学推导占了大多数,可能看起来会略有枯燥,但这本身就是一个把之前算法 ... [详细]
  • 深入理解K近邻分类算法:机器学习100天系列(26)
    本文详细介绍了K近邻分类算法的理论基础,探讨其工作原理、应用场景以及潜在的局限性。作为机器学习100天系列的一部分,旨在为读者提供全面且深入的理解。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • Linux 学习路径与核心框架
    本文提供了一套系统化的 Linux 学习路径,旨在帮助初学者和中级用户构建全面的知识体系。通过逐步深入的学习方法,掌握从基础命令到高级系统管理的技能。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 开发笔记:9.八大排序
    开发笔记:9.八大排序 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
author-avatar
打完BOSS好睡觉1998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有