• 广泛使用的分类算法——决策树(decision tree)。相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。
  • 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树的构造

不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:

1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。

2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。

3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分成个体类的启发式方法,它决定了拓扑结构及分裂点split_point的选择。

属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略。这里介绍ID3和C4.5两种常用算法。

ID3算法

从信息论知识中我们直到,期望信息越小,信息增益越大,从而纯度越高。所以ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。下面先定义几个要用到的概念。

设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:

其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量。

现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:

而信息增益即为两者的差值:

ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。下面我们继续用SNS社区中不真实账号检测的例子说明如何使用ID3算法构造决策树。为了简单起见,我们假设训练集合包含10个元素:

其中s、m和l分别表示小、中和大。

设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。理解计算过程:根节点以日志密度为属性(7yes-3no);划分子节点三个s(1yes-2no),m(3yes-1no),L(3yes-0no)。

因此日志密度的信息增益是0.276。

用同样方法得到H和F的信息增益分别为0.033和0.553。

因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果如下图表示:

在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。

上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。对于特征属性为连续值,可以如此使用ID3算法:

先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

C4.5算法

ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。

C4.5算法首先定义了“分裂信息”,其定义可以表示成:

其中各符号意义与ID3算法相同,然后,增益率被定义为:

C4.5选择具有最大增益率的属性作为分裂属性,其具体应用与ID3类似,不再赘述。

  • 如果属性用完了怎么办

在决策树构造过程中可能会出现这种情况:所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。

  • 关于剪枝

在实际构造决策树时,通常要进行剪枝,这时为了处理由于数据中的噪声和离群点导致的过分拟合问题。剪枝有两种:

先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

关于剪枝的具体算法这里不再详述,有兴趣的可以参考相关文献。

决策树分类(cross)相关推荐

  1. c++实现决策树分类汽车评估数据集_R有监督机器学习-分类方法

    当我们说机器学习的的时候,我们在说什么? 来源于mlr3包的作者:https://mlr3book.mlr-org.com/basics.html 上图解释了完整的机器学习流程,包括构建任务.准备训练 ...

  2. matlab决策树模型过程,利用MATLAB统计工具箱进行决策树分类的一个例子

    这个例子开始从lda线性分类算法,最后引出决策树分类算法,不错,初学者可以参考下 网上的很多决策树算法都没有例子,都是就一堆代码都不知道参数怎么传递.直接用工具箱里面的决策树算法,不懂得就help一下 ...

  3. 机器学习(9)决策树(决策树分类鸢尾花)

    目录 一.基础理论 二.决策树分类鸢尾花 API 1.读取数据 2.划分数据集 3.创建决策树预估器,训练 4.模型评估 方法一:比对法 方法二:计算错误率 代码 一.基础理论 决策树思想: 程序设计 ...

  4. 【数据挖掘】决策树 分类 ( 抽取分类规则 | 过拟合 | 剪枝 | 先剪 | 后剪 | 连续数值离散化 | 最优化分点 | 增益率选择划分属性 )

    文章目录 I . 决策树 分类规则抽取 II . 决策树 过拟合 与 剪枝 III . 决策树 剪枝 先剪 与 后剪 对比 IV . 连续属性 离散化处理 ( 二分法 | 最优划分点 ) V . 根据 ...

  5. python决策树怎么选择_机器学习|决策树分类与python实现

    目录: 1.决策树简介 2.决策树生成 a) 选择标准--熵 b) 信息增益--ID3算法 c) 信息增益率--C4.5算法 d) Gini系数--CART算法 e) 评价标准--评价函数 3.剪枝操 ...

  6. python决策树分类鸢尾花_基于决策树—鸢尾花分类

    决策树算法广泛应用于:语音识别.医疗诊断.客户关系管理.模式识别.专家系统等,在实际工作中,必须根据数据类型的特点及数据集的大小,选择合适的算法. 本文选择经典案例--<鸢尾花分类> 一. ...

  7. 使用R完成决策树分类

    关于决策树理论方面的介绍,李航的<统计机器学习>第五章有很好的讲解. 传统的ID3和C4.5一般用于分类问题,其中ID3使用信息增益进行特征选择,即递归的选择分类能力最强的特征对数据进行分 ...

  8. 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者...

    python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...

  9. 第四篇:决策树分类算法原理分析与代码实现

    前言 本文详细介绍机器学习分类算法中的决策树算法,并全面详解如何构造,表示,保存决策树,以及如何使用决策树进行分类等等问题. 为了全面的理解学习决策树,本文篇幅较长,请耐心阅读. 算法原理 每次依据不 ...

最新文章

  1. 艾伟_转载:C# Design Patterns (3) - Decorator
  2. [tool] AI视频翻译 解决英文视频字幕问题(类似youtube自动生成字幕)
  3. 怎么修改云服务器项目路径,云服务器tomcat的项目路径怎么设置
  4. 结合批处理功能,配置SQL Server 2005,使其打开远程连接功能
  5. Sencha 自定义组件函数回调
  6. React开发(223):详情页根据数组map处理返回值
  7. 计算机找不到管理无线网络,电脑wifi密码忘了 并且找不到管理无线网络该怎么处理?...
  8. inner join 与 left join 之间的区别
  9. java math rint_Java Math rint() 使用方法及示例
  10. 【图像隐写】基于matlab DWT数字水印嵌入+提取+攻击【含Matlab源码 622期】
  11. Java实现端口扫描器
  12. [高等数学]--曲率,曲率半径-
  13. QQ飞车手游S25赛季什么时候更新?S25赛季段位继承表图文一览
  14. Excel时间做差,统计加班时长
  15. windows下,C++中调用命令行并且获取命令行的输出
  16. 微信小程序图片在不同设备显示保持图片比例并且居中
  17. Unreal Engin_Maya插件ArtV1_001初认Artv1创建一个带绑定的人物对其进行简单的设置
  18. 以太坊Solidity之Truffle的使用流程与集成指南
  19. 163邮箱|电子邮件注册,163邮箱如何注册申请?
  20. oracle natural join qualifier,自然连接(natural join)

热门文章

  1. 重磅!九州云斩获“2020中国数字生态云计算卓越企业”奖
  2. python雪花曲线实验报告_探究“雪花”曲线
  3. 怎样的数据报表才能将公司全部业务数据整合在一起
  4. 【front-end】Unified Mandarin TTS Front-end Based on Distilled BERT Model
  5. 讲解如何为AD 添加多个UPN后缀
  6. iOS-基于SwiftUI开发的简易备忘录,适合新人学习,可用于大作业
  7. 出海品牌如何制定海外网红营销策略?中腰部网红真的可靠吗?
  8. oppo手机解锁_oppo手机屏幕锁密码忘记了怎么办?oppo手机强制解锁教程
  9. 如何下载通达信接口 费用如何?
  10. 京东茅台抢购Python详细教程(小白入门,亲测可用)