决策树学习笔记整理【转】
本文目的
最近一段时间在Coursera上学习Data Analysis,里面有个assignment涉及到了决策树,所以参考了一些决策树方面的资料,现在将学习过程的笔记整理记录于此,作为备忘。
算法原理
决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。决策数有两大优点:1)决策树模型可以读性好,具有描述性,有助于人工分析;2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
如何预测
先看看下面的数据表格:
ID |
拥有房产(是/否) |
婚姻情况(单身,已婚,离婚) |
年收入(单位:千元) |
无法偿还债务(是/否) |
1 |
是 |
单身 |
125 |
否 |
2 |
否 |
已婚 |
100 |
否 |
3 |
否 |
单身 |
70 |
否 |
4 |
是 |
已婚 |
120 |
否 |
5 |
否 |
离婚 |
95 |
是 |
6 |
否 |
已婚 |
60 |
否 |
7 |
是 |
离婚 |
220 |
否 |
8 |
否 |
单身 |
85 |
是 |
9 |
否 |
已婚 |
75 |
否 |
10 |
否 |
单身 |
90 |
是 |
上表根据历史数据,记录已有的用户是否可以偿还债务,以及相关的信息。通过该数据,构建的决策树如下:
比如新来一个用户:无房产,单身,年收入55K,那么根据上面的决策树,可以预测他无法偿还债务(蓝色虚线路径)。从上面的决策树,还可以知道是否拥有房产可以很大的决定用户是否可以偿还债务,对借贷业务具有指导意义。
基本步骤
决策树构建的基本步骤如下:
1. 开始,所有记录看作一个节点
2. 遍历每个变量的每一种分割方式,找到最好的分割点
3. 分割成两个节点N1和N2
4. 对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止
决策树的变量可以有两种:
1) 数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
2) 名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”。使用“=”来分割。
如何评估分割点的好坏?如果一个分割点可以将当前的所有节点分为两类,使得每一类都很“纯”,也就是同一类的记录较多,那么就是一个好分割点。比如上面的例子,“拥有房产”,可以将记录分成了两类,“是”的节点全部都可以偿还债务,非常“纯”;“否”的节点,可以偿还贷款和无法偿还贷款的人都有,不是很“纯”,但是两个节点加起来的纯度之和与原始节点的纯度之差最大,所以按照这种方法分割。构建决策树采用贪心算法,只考虑当前纯度差最大的情况作为分割点。
量化纯度
前面讲到,决策树是根据“纯度”来构建的,如何量化纯度呢?这里介绍三种纯度计算方法。如果记录被分为n类,每一类的比例P(i)=第i类的数目/总数目。还是拿上面的例子,10个数据中可以偿还债务的记录比例为P(1) = 7/10 = 0.7,无法偿还的为P(2) = 3/10 = 0.3,N = 2。
Gini不纯度
熵(Entropy)
错误率
上面的三个公式均是值越大,表示越 “不纯”,越小表示越“纯”。三种公式只需要取一种即可,实践证明三种公司的选择对最终分类准确率的影响并不大,一般使用熵公式。
纯度差,也称为信息增益(Information Gain),公式如下:
其中,I代表不纯度(也就是上面三个公式的任意一种),K代表分割的节点数,一般K = 2。vj表示子节点中的记录数目。上面公式实际上就是当前节点的不纯度减去子节点不纯度的加权平均数,权重由子节点记录数与当前节点记录数的比例决定。
停止条件
决策树的构建过程是一个递归的过程,所以需要确定停止条件,否则过程将不会结束。一种最直观的方式是当每个子节点只有一种类型的记录时停止,但是这样往往会使得树的节点过多,导致过拟合问题(Overfitting)。另一种可行的方法是当前节点中的记录数低于一个最小的阀值,那么就停止分割,将max(P(i))对应的分类作为当前叶节点的分类。
过渡拟合
采用上面算法生成的决策树在事件中往往会导致过滤拟合。也就是该决策树对训练数据可以得到很低的错误率,但是运用到测试数据上却得到非常高的错误率。过渡拟合的原因有以下几点:
- 噪音数据:训练数据中存在噪音数据,决策树的某些节点有噪音数据作为分割标准,导致决策树无法代表真实数据。
- 缺少代表性数据:训练数据没有包含所有具有代表性的数据,导致某一类数据无法很好的匹配,这一点可以通过观察混淆矩阵(Confusion Matrix)分析得出。
- 多重比较(Mulitple Comparition):举个列子,股票分析师预测股票涨或跌。假设分析师都是靠随机猜测,也就是他们正确的概率是0.5。每一个人预测10次,那么预测正确的次数在8次或8次以上的概率为 ,只有5%左右,比较低。但是如果50个分析师,每个人预测10次,选择至少一个人得到8次或以上的人作为代表,那么概率为 ,概率十分大,随着分析师人数的增加,概率无限接近1。但是,选出来的分析师其实是打酱油的,他对未来的预测不能做任何保证。上面这个例子就是多重比较。这一情况和决策树选取分割点类似,需要在每个变量的每一个值中选取一个作为分割的代表,所以选出一个噪音分割标准的概率是很大的。
决策树过渡拟合往往是因为太过“茂盛”,也就是节点过多,所以需要裁剪(Prune Tree)枝叶。裁剪枝叶的策略对决策树正确率的影响很大。主要有两种裁剪策略。
前置裁剪 在构建决策树的过程时,提前停止。那么,会将切分节点的条件设置的很苛刻,导致决策树很短小。结果就是决策树无法达到最优。实践证明这中策略无法得到较好的结果。
2) 选择置信水平α= 95%,或其他值,这取决于你需要对这个区间有多自信。一般来说,α越大,区间越大。
3) 求出 α/2和1-α/2对应的标准正太分布的统计量 和 (均为常量)。然后解下面关于p的不等式。acc可以有样本估计得出。即可以得到关于p的执行区间
转载于:https://www.cnblogs.com/purple5252/p/9102566.html
决策树学习笔记整理【转】相关推荐
- 专题:机器学习进阶之路——学习笔记整理
现将自己机器学习方面的学习笔记整理如下,后续还会继续更新: 机器学习基本概念 监督学习.非监督学习.批量学习.在线学习.基于实例学习.基于模型学习 经验风险最小化与结构风险最小化 模型评估与选择(留出 ...
- 【mysql学习笔记整理】
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(二)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- python eval 入门_Python学习笔记整理3之输入输出、python eval函数
Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网 浏览: 次 日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...
- Deep Learning(深度学习)学习笔记整理系列之(八)
Deep Learning(深度学习)学习笔记整理系列之(八) 分类: Deep Learning 机器学习 Linux驱动2013-04-10 11:4257652人阅读评论(25)收藏举报 ...
- Deep Learning(深度学习)学习笔记整理系列三
Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明 ...
- Deep Learning(深度学习)学习笔记整理(二)
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之: ...
- java反射 pdf_java反射学习笔记整理.pdf
java反射学习笔记整理.pdf 还剩 15页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 反射笔记 ...
最新文章
- CentOS-7.2部署Squid服务
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]
- Android --- java.lang.RuntimeException: Can‘t create handler inside thread that has not called Loop
- 重磅!百度研究院发布2021年十大科技趋势预测
- 原生安全二倍速:探秘基础设施的内生“免疫系统“
- html登入弹框插件,基于jQuery的弹出框插件
- TCP/IP TIME_WAIT状态原理
- Java show两个整数加减_怎么样用java编写界面实现两个数的加法运算
- 数据可视化(BI报表的开发)第一天
- 使用Drools跟踪输出
- 协方差矩阵的详细说明
- 寒武纪官宣25亿美元估值融资,也有AI芯片公司要被收购了
- 7.2.5 dps 测试软件,魔兽世界7.2.5兽王猎DPS有什么改动测试
- java运行bat_java调用bat
- java 支付宝对账文件处理,支付宝账单下载读文件解析
- spring源码系列(一)——spring循环引用
- 本机 ip 地址和本地ip地址的区别?
- nodejs的桌面应用(electron)
- 游戏手柄之自定义按钮控制海龟
- 林达华-和机器学习和计算机视觉相关的数学