机器学习中树模型算法总结之 决策树(下)
写在前面
首先回顾一下上一篇的相关内容,主要是理论的介绍了决策树的模型及几种常见的特征选择准则,具体可参见机器学习中树模型算法总结之 决策树(上)。今天主要接着学习,包括决策树的生成(依赖于第一篇的三种特征选择准则)以及生成之后避免过拟合的剪枝操作。
学习笔记相关资料:
《统计学习方法》——李航
《机器学习》西瓜书——周志华
《Machine Learning Tech》课程——台大林轩田
3.决策树的生成
3.1 基于信息增益准则的ID3算法
ID3算法的具体实现:
(1)从根结点开始,对当前结点计算所有特征的信息增益;
(2)选择信息增益最大的特征作为当前结点特征,然后根据该特征的不同取值构建子结点;
(3)接着对新生成的子结点递归执行以上步骤,直到所有特征的信息增益都很小或者没有特征可选(分类完毕)为止。
ID3相当于用极大似然法进行概率模型的选择。
这里再贴上对上述步骤的详细描述:
ID3算法虽然简单,但是其缺点也不少:
- ID3算法采用信息增益来选择最优划分特征,但是这种方法倾向于取值较多的特征,往往容易导致结果误差;
- 没有考虑连续值,对于连续值的特征无法进行拟合
- 无法处理有缺失值的数据
- 没有考虑过拟合的问题
3.2 基于信息增益率的C4.5算法
C4.5算法与ID3算法类似,可以看成其改进版,只是将特征选择中的信息增益准则换为信息增益率。
具体算法步骤如下:
4.决策树的剪枝(pruning)
由以上决策树的算法可以看出,生成过程递归地进行直至不能继续为止,这样的结果往往导致训练集合准确率很高,但是在测试集上表现很差,即所谓的过拟合(overfitting)。机器学习中有许多降低过拟合问题的解决方法,在决策树中使用的是剪枝。剪枝的基本策略有“预剪枝”和“后剪枝”。
4.1 预剪枝(pre-pruning)
预剪枝是指在决策树的生成过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树性能的提升,则停止划分并将当前结点标记为叶结点。
使用预剪枝操作,一方面减低了过拟合的风险并且显著降低了算法的训练及预测时间开销,但是另一方面,由于预剪枝的“贪心”本质禁止某些分支的展开,可以导致其泛化性能不升反降,带来了欠拟合的风险。所以在实际应用中较少使用预剪枝。
4.2 后剪枝(post-pruning)
总体思路:由完全树T0开始,剪枝部分结点得到T1,再次剪枝部分结点得到T2...直到剩下树根的树Tk;在验证数据集上对这k个树分别评价,选择损失函数最小的树Ta。
设|T|为树T叶结点个数,t是树T的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,则决策树的损失函数可以定义为:
其中H(T)为经验熵:
将损失函数第一项简化记为C(T):
最终形式的损失函数:
在上式中,C(T)表示模型对训练数据的预测误差,|T|为模型的复杂度,alpha为平衡两者的参数(大于等于0)。较大的alpha偏向选择较简单的树,较小的alpha偏向选择预测误差更小的树模型。
下面贴上剪枝算法的具体步骤:
关于后剪枝的其他几种算法:
1、REP-错误率降低剪枝
2、PEP-悲观剪枝
3、CCP-代价复杂度剪枝
4、MEP-最小错误剪枝
具体可参见知乎专栏决策树之决策树剪枝
5.CART算法
CART——Classification and Regression Tree,分类与回归树,是广泛应用的决策树学习方法。与前类似,CART算法也包括特征选择、树的生成和剪枝几个部分。
5.1 CART生成
CART树包括两种,回归树和分类树。对于回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择。
5.1.1 回归树
因为是回归树,所以我们现在的训练集中y值为连续变量:
首先是回归树节点的划分,这里采用的是启发式的算法:选择第j个变量和它的取值s(注意主要离散化),作为切分变量和切分点。然后遍历切分变量j和切分点s,找到最优的(j,s)对使得下面式子最小:
然后用选定的最优(j,s)对,划分区域并确定相应地输出值:
继续递归的对划分出来的两个区域调用上述步骤,将输入空间划分为M个区域,生成决策树。
CART回归树的整体生成算法如下所示
举个栗子
假设我们的输入训练集为:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
首先将连续属性离散化,得到切分点s=1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,然后遍历切分点,比如当切分点为1.5时,划分为两个区域R1 = {1}, R2={2,3,4,5,6,7,8,9},计算c1,c2,min
对所有的切分点可以计算出:
1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 | ||
min | 15.72 | 12.07 | 8.36 | 5.78 | 3.91 | 1.93 | 8.01 | 11.73 | 15.74 |
可以发现当s=6.5时最小,此时R1={1,2,3,4,5,6}, R2={7,8,9,10}, c1=6.24,c2=8.9,
此时回归树为:
然后用当前生成的回归树去拟合训练数据的残差,
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
-0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
得到此时的训练误差:
接下去继续递归上述步骤求T2,唯一不同的是原来的y变为了残差
5.1.2 分类树
5.2 CART 剪枝
CART剪枝算法从“完全生长”的决策树的地段剪去一些子树,使决策树变小,从而能够对未知数据有更准确的预测。CART剪枝算法步骤:
(1)首先从生成算法产生的决策树T0底端不断剪枝,直到T0的根结点,形成一个子序列{T0,T1,…Tn} ;
(2)通过交叉验证在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
具体步骤:
平方误差或者基尼指数最小的决策树被认为是最优的决策树。
同样为了加深CART的印象,贴一个例子(P71)
小结
至此决策树的基本学习就差不多啦,但是这些仅仅是理论的算法,至于代码实现还是要更进一步地去练习。
如果理论掌握的差不多的小伙伴可以转到周志华老师《机器学习》Chapter 4的课后习题,也是我最近在看的,一起交流哈~
新人学机器学习算法,有错误或者不完备的地方请指正~
以上~
2018.04.18
机器学习中树模型算法总结之 决策树(下)相关推荐
- 机器学习中树模型算法总结之 决策树(上)
写在前面 在网上看XGBoost资料的时候觉得自己以前看的树模型算法都忘得差不多了,所以就趁着这个机会把机器学习里的树模型算法重新再过一遍,主要包括决策树.随机森林.提升树.XGBoost等等. 1. ...
- 机器学习中的模型评价、模型选择及算法选择
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 正确使用模型评估.模型选择和算法选择技术无论是对机器学习学术研究还是工业场景应用都至关重要.本文将对这三个任务的相关技术 ...
- 炼数成金数据分析课程---16、机器学习中的分类算法(交叉内容,后面要重点看)...
炼数成金数据分析课程---16.机器学习中的分类算法(交叉内容,后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用分类算法(如Knn.决策树.贝叶斯分类器等)的原理及pytho ...
- 机器学习中的分类算法
机器学习中的分类算法 机器学习,模式识别中很重要的一环,就是分类,因为计算机其实无法深层次地理解文字图片目标的意思,只能回答是或者不是.当然现在卷积神经网络正在希望计算机能够看懂东西,这次我们先来看一 ...
- 机器学习中的模型是什么?
在机器学习中,模型是指一种数学函数,它能够将输入数据映射到预测输出.模型是机器学习算法的核心部分,通过学习训练数据来自适应地调整模型参数,以最小化预测输出与真实标签之间的误差. 机器学习中的模型是什么 ...
- 机器学习中【回归算法】详解
关注微信公众号[Microstrong],我写过四年Android代码,了解前端.熟悉后台,现在研究方向是机器学习.深度学习!一起来学习,一起来进步,一起来交流吧! 本文同步更新在我的微信公众号里,地 ...
- 机器学习中的聚类算法有哪几种?
目前,聚类算法被广泛应用于用户画像.广告推荐.新闻推送和图像分割等等.聚类算法是机器学习中一种"数据探索"的分析方法,它帮助我们在大量的数据中探索和发现数据的结构.那么机器学习中的 ...
- 一文读懂机器学习中的模型偏差
一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...
- louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...
本系列文章已转至 机器学习的优化器zhuanlan.zhihu.com 优化算法在机器学习中扮演着至关重要的角色,了解常用的优化算法对于机器学习爱好者和从业者有着重要的意义. 这系列文章先讲述优化算 ...
最新文章
- 在关联枚举中使用Codable
- go kegg_差异基因的GO与KEGG注释
- (十七)linux网络命令 vconfig ifconfig
- (五)python3 只需3小时带你轻松入门—— 逻辑运算符
- HDU 4033	Regular Polygon(二分+高精度)
- 去掉“搜一搜”后,让“查看新贴”等按钮居中
- ajax velocity,velocity 使用js
- 数据库联接字符串大全
- 整数实例hdu2041(超级楼梯)
- PHP如何在照片下面写一行字_如何使用php分别插入照片和文字?
- DNS服务器配置图解过程(1)
- mathematic语法基础
- java tika pdf_java解析pdf获取pdf中内容信息
- 计算机二级考试失误有提示吗,2016年计算机二级考试应该避免的失误
- 根据经纬度计算范围_高考地理地理计算专题
- 朋友圈被公司“无偿征用”,该怎么办?
- 支持Python3、JavaScript、Shell、TypeScript 的定时任务管理面板项目
- 计算机考研复试_C++重点知识笔记面试题
- 数据库基础知识(必读)
- DELL Precision T7920加装显卡遇到的坑
热门文章
- SAP License 数据安全: SAP 权限的特殊控制方法
- 《如何搭建小微企业风控模型》第十二节 模型检验 节选
- 【POJ1088】滑雪
- JDK 之 HttpClient(jdk11)
- bootstrap时间格式化
- 开博客第一天!!来几句鸡汤
- struts2第一个程序 Helloworld
- 5.12 操作系统——进程调度
- 一. JVM发展史,运行时数据区域,四大引用
- [习题]如何触发 GridView 身体里面的「子控件」的事件 (ASP.NET案例精编 / 清华大学出版社 Ch.10/11两章的补充)...