1.决策树定义
父节点和子节点是相对的,说白了子节点由父节点根据某一规则分裂而来,然后子节点作为新的父亲节点继续分裂,直至不能分裂为止。而根节点是没有父节点的节点,即初始分裂节点,叶子节点是没有子节点的节点,如下图所示:


2.决策树的构建流程:

这就引出了最重要的问题:
1.数据如何分割
2.怎么选择分割依据的属性
3.什么时候停止分裂

对于1:假设已经选择了一个分割属性,如何分割
若是离散型: 按照属性值对应一个分裂节点

若是连续型:一般是按照属性进行排序,再分成若干区间,如[0,10]、[10,20]、[20,30]…,一个区间对应一个节 点,若数据的属性值落入某一区间则该数据就属于其对应的节点。

对于2:分裂属性的选择
决策树采用贪婪思想进行分裂,就是选择可以得到最优分裂结果的属性进行分裂。

决策树采用 信息增益 和 信息增益率 作为依据
1.信息增益:说白了息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度。

信息增益 = 熵 - 条件熵

其中Gain表示节点的复杂度,Gain越高,说明复杂度越高。

越大,分的越纯

(1)熵

越小,分的越纯
(2)基尼值

越小,分的越纯

2.信息增益率:
本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。

为什么比信息增益好呢?是因为信息增益倾向于选择分支比较多的分裂属性。
举个栗子:满足什么情况才去玩高尔夫,假设用Day做分裂属性,显然,每一天都可以将样本分开,也就是形成了一颗叶子数量为10,深度只有两层的树,用公式算出来的信息增益是0.9403,增益确实很大,实际来看显然这种属性的分割没意义,类似的还有身份证号等属性。

导致这种偏差的原因就是特征可以选取的值过多,解决办法自然想出对树分支过多进行惩罚。

3.停止分裂条件 (先剪枝)
最极端的情况是当节点分裂到只剩下一个数据点时自动结束分裂,但这种情况下树过于复杂。
(1)最小节点数
当节点的数据量小于一定数量时,停止分裂。因为数据量较少时,再做分裂容易强化噪声数据的作用

(2)熵或基尼值小于阈值
过小说明已经纯度已经非常大了,可以极端认为节点分裂出A 100个 B 0个,没有分的必要了
(3)深度到达指定条件

(4)所有属性都用完了,没有可属性可以用来分裂了

                           **剪枝**

剪枝是指将一颗子树的子节点全部删掉,根节点作为叶子节点,以下图为例:

剪枝修剪分裂前后分类误差相差不大的子树,能够降低决策树的复杂度,降低过拟合出现的概率。

后剪枝:
1.错误率降低剪枝(ID3)
如果一棵子树修剪前后错误率没有下降,就可以认为该子树是可以修剪的。
需要用新的数据集,原因是如果用旧的数据集,不可能出现分裂后的错误率比分裂前错误率要高的情况。由于使用新的数据集没有参与决策树的构建,能够降低训练数据的影响,降低过拟合的程度,提高预测的准确率。

2.悲观剪枝(C4.5)
如果决策树的精度在剪枝前后没有影响的话(剪枝后的误差小于剪枝前精度的上限),则进行剪枝。

3.代价复杂度剪枝(CART)
代价复杂度选择节点误差率增益值最小的非叶子节点
决策树自由生长的时候,误判成本可以降的很低,但是因为树“枝繁叶茂”(过拟合)。所有我们希望在误判成本和复杂度之间追求一个平衡。

   ID3

(1)采用信息增益进行分裂,分裂的精确度可能没有采用信息增益率进行分裂高

(2)不能处理连续型数据,只能通过离散化将连续性数据转化为离散型数据

(3)不能处理缺省值

(4)没有对决策树进行剪枝处理,很可能会出现过拟合的问题

 C4.5

(1)C4.5是采用信息增益率选择分裂的属性,解决了ID3选择属性时的偏向性问题;

(2)C4.5能够对连续数据进行处理,采用一刀切的方式将连续型的数据切成两份,在选择切割点的时候使用信息增益作为择优的条件;
理论上来讲,N条数据就有N-1个切割点,为了选取最优的切割垫,要计算按每一次切割的信息增益,计算量是比较大的,那么有没有简化的方法呢?有,在相邻两个属于不同类的位置尝试加分割点
(3)C4.5采用悲观剪枝的策略,一定程度上降低了过拟合的影响。

*** *******CART
CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点:

(1)CART既能是分类树,又能是回归树;

(2)当CART是分类树时,选择能够最小化分裂后节点GINI值的分裂属性;当CART是回归树时,采选择能够最小化两个节点样本方差的分裂属性。

(3)CART是一棵二叉树。每一次分裂只会产生两个节点。
对于连续性的数据,直接采用与C4.5相似的处理方法

对于离散型属性,理论上有多少个离散值就应该分裂成多少个节点。怎么办呢?很简单,只要将其中一个离散值独立作为一个节点,其他的离散值生成另外一个节点即可。
举一个简单的例子:如果某离散属性一个有三个离散值X,Y,Z,则该属性的分裂方法有{X}、{Y,Z},{Y}、{X,Z},{Z}、{X,Y},分别计算每种划分方法的基尼值或者样本方差确定最优的方法。

cart流程图:

参考链接:
https://www.cnblogs.com/yonghao/p/5061873.html#4126813
https://blog.csdn.net/olenet/article/details/46433297
https://blog.csdn.net/guo1988kui/article/details/78427409

机器学习-决策树--基础知识总结相关推荐

  1. AI入门:机器学习领域基础知识

    本章要点: AI与人类大脑的联系: 对输入/输出建模: 分类和回归: 时间序列: 训练. 外行人都以为人工智能是人造大脑,并且总把它和科幻电影中的机器人联系起来,而实际上这些科幻场景与现如今的人工智能 ...

  2. 机器学习算法基础知识

    在我们了解了需要解决的机器学习问题的类型之后,我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法.在这个帖子里,我们会介绍一遍最流行的机器学习算法.通过浏览主要的算法来大致了解可以利用的 ...

  3. 机器学习Tensorflow基础知识、张量与变量

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, ...

  4. 机器学习平台基础知识

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 什么是机器学习平台? 机器学习平台是面向数据科学团队 ...

  5. 机器学习之基础知识(全)

    目录 1.机器学习概述 1.1 人工智能概述 1.1.1 人工智能使用场景 1.1.2 人工智能小案例 1.2 人工智能发展历程 1.2.1 图灵测试 1.2.2 发展历程 1.2.3 小结 1.3 ...

  6. (自学)sklearn决策树基础知识|解决centos7.8 graphviz报错不能画图的问题

    sklearn常规流程: from sklearn import tree #导入需要的模块 clf = tree.DecisionTreeClassifier()#实例化 clf = clf.fit ...

  7. [机器学习]Python基础知识笔记整理

    机器学习主要语言Python,C++,把之前收集和总结的笔记: 目录列表: 字符编码声明 字符串String 列表list 列表与字符串 元组 字典dic 集合set 控制结构 猜拳游戏练习 列表生成 ...

  8. 机器学习之基础知识(从数据处理到模型评估)

    1.数据预处理 1.1归一化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布 的需求,这种需求统称为将数据"无量纲化". ​ ...

  9. 机器学习--决策树理论知识(二)

    文章转自:http://bbit.vip/service/main.php?version=1&type=article&id=136

  10. 独家 | 机器学习基础知识梳理,新手必备!(附链接)

    翻译:吴金笛 校对:丁楠雅 本文约4000字,建议阅读16分钟. 本文介绍了机器学习以及几个易与其混淆的术语,并给出了几个机器学习的应用. 介绍 在过去的几年里,人们对机器学习重新产生了兴趣. 这种复 ...

最新文章

  1. C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别
  2. 微信小程序拍照视频上传php,微信小程序-拍照或选择图片并上传文件
  3. cad文本改宋体字型lisp_CAD绘图员必须掌握的15个高能技巧,别人3天工作量你半天搞定!...
  4. BeeHive模块注册
  5. oracle中备份package源码
  6. tomcat常见错误处理
  7. 【js拾遗】名称空间
  8. Activity 生命周期与状态保存
  9. sql azure 语法_Azure SQL –弹性作业代理
  10. 发现孩子做作业用计算机,儿童不宜长期使用计算器做作业
  11. 使用Popup窗口创建无限级Web页菜单(4)
  12. 关于 html 中 table 表格 tr,td 的高度和宽度
  13. 容器技术Docker K8s 8 容器服务ACK Pro版集群
  14. 计算机病毒是人制,计算机病毒是一组人为设计的程序
  15. Halcon创建文件夹
  16. winpython, anaconda 哪个更好?
  17. C++(11):多线程同步packaged_task
  18. Vue项目关于省略号显示
  19. TransCenter: Transformers with Dense Queries for Multiple-Object Tracking
  20. 数字·空间·光艺术|数字空间和光艺术作品

热门文章

  1. 指向类对象的指针非空但是部分对象成员不存在原因分析
  2. 升级tomcat遇到的坑
  3. JavaEE学习--javascript中的正则表达式
  4. Android Studio Connection refused
  5. jquey控制元素滚动条,外层div滚动,内层顶部div固定不动
  6. 春运来了,你的火车票备好了么?
  7. python--django基础篇(创建项目,模型类,迁移,测试数据库操作)
  8. python 图表工具_7 款 Python 数据图表工具的比较
  9. java opencv sift_Java opencv中sift的实现
  10. java案例代码18--算法-选择排序以及二分查找排序