ID3、C4.5、CART、RandomForest的原理
决策树意义:
分类决策树模型是表示基于特征对实例进行分类的树形结构.决策树可以转换为一个if_then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布. 它着眼于从一组无次序、无规则的样本数据(概念)中推理出决策树表示形式的分类规则.假设这里的样本数据应该能够用“属性—结论”.决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的一个可以自动对数据进行分类的树形结构,是树形结构的知识表示,可以直接转换为分类规则.因为从可能的决策树中直接选取最优决策树是NP完全问题,现实中采用启发式方法学习次优的决策树.
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法.
树模型在制药和生物领域尤其受欢迎,可能因为它和医生做决策的过程比较类似. 随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性.
决策树学习算法:
包含3部分:特征选择、树的生成和树的剪枝.常用算法有ID3、C4.5和CART、RandomForest,其中C4.5是ID3的校正,RandomForest的思想可用于前面三种算法来提高正确度
CART(分类的生成算法):
输入:训练数据集D,停止计算的条件;
输出:CART决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树;
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对每一个特征A,对其可能取的每一值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1和D2 两部分,计算A=a时的基尼指数
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点.依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去.
(3)对两个子结点递归地调用(1)、(2),直至满足停止条件
(4)生成CART决策树
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征.
决策树优缺点:
优点:
1、决策树易于理解和实现,人们在在学习过程中不需要使用者了解很多的背景知识,只从样本数据及提供的信息就能够产生一颗决策树,这同时是它的能够直接体现数据的特点,只要通过解释后都有能力去理解决策树所表达的意义;
2、对于决策树,数据的准备往往是简单或者是不必要的,而且能够同时处理数据型和常规型属性,在相对短的时间内能够对大型数据源做出可行且效果良好的结果;
3、易于通过静态测试来对模型进行评测,可以测定模型可信度;如果给定一个观察的模型,那么根据所产生的决策树很容易推出相应的逻辑表达式;
缺点:
1、是基于规则的算法,在产生规则的时候采用了局部的贪婪方法,每次只选取一个属性进行分析构造决策树,因而产生大量的规则,数据集很大,规则就很复杂,效率明显会下降,而且既然是局部最优,无法保障全局最优;
2、C4.5在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效.只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行;
3、处理缺失数据时的困难;
4、过度拟合问题的出现,以及忽略数据集中属性之间的相关性等.
RF的优缺点:
优点:
1、
几乎不需要输入准备.它们可以处理二元特征,分类特征,数字特征,并且不需要任何缩放处理.
2、 在当前所有算法中,具有极好的准确率;
3、 能够有效地运行在大数据集上;
4、 能够处理具有高维特征的输入样本,而且不需要降维;
5、 能够评估各个特征在分类问题上的重要性;
6、 在生成过程中,能够获取到内部生成误差的一种无偏估计;
7、 对于缺省值问题也能够获得很好得结果;
8、
可实现隐式特征选择,并且提供一个很好的特征重要性指标;
9、
通用性.随机森林适用于各种各样的建模工作,它们可以很好的处理回归任务和分类任务(甚至产生体面的校正的概率分数),它就相当于机器学习领域的Leatherman(多面手),你几乎可以把任何东西扔进去,它基本上都是可供使用的.在估计推断映射方面特别好用,以致都不需要像SVM那样做很多参数的调试.
缺点:
1、 随机森林的主要劣势在于模型大小.你可能需要数百兆的内存才能轻松地结束一个森林,而且评估的速度也很慢.
2、 另外一点,有些人可能会发现一个问题,也就是随机森林模型其实是个很难去解释的黑盒子.
RF为什么要有放回地抽样:
如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",都是绝对"片面的",也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的
1)如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
2) 每棵树都尽最大程度的生长,并且没有剪枝过程.
随机森林中的“随机”就是指的这里的两个随机性.两个随机性的引入对随机森林的分类性能至关重要.由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感).
随机森林分类效果(错误率)与两个因素有关:
1)森林中任意两棵树的相关性:相关性越大,错误率越大;
2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低.
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大.所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数.
ID3、C4.5、CART、RandomForest的原理的更多相关文章
- ID3\C4.5\CART
目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...
- 决策树(ID3,C4.5,CART)原理以及实现
决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...
- 机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)
决策树是一种基本的分类与回归方法.分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成.结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类. 1. 基础知识 熵 在信息学和 ...
- 决策树 ID3 C4.5 CART(未完)
1.决策树 :监督学习 决策树是一种依托决策而建立起来的一种树. 在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某 ...
- 21.决策树(ID3/C4.5/CART)
总览 算法 功能 树结构 特征选择 连续值处理 缺失值处理 剪枝 ID3 分类 多叉树 信息增益 不支持 不支持 不支持 C4.5 分类 多叉树 信息增益比 支持 ...
- C4.5,CART,randomforest的实践
#################################Weka-J48(C4.5)################################# ################### ...
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 机器学习算法总结(二)——决策树(ID3, C4.5, CART)
决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规 ...
- ID3/C4.5/Gini Index
ID3/C4.5/Gini Index */--> ID3/C4.5/Gini Index 1 ID3 Select the attribute with the highest informa ...
随机推荐
- GPS经纬度换算成XY坐标
; }
- thinkPHP 5.0.x 使用SQLite3 进行缓存设置 Cache
1. 配置 thinkPHP cache [application/config.php] 把type设置为sqlite3(默认是小写,第一个字母不区分大小写) 把path换成db,并指定sqlite ...
- 通过servlet实现几个网站常用的功能
帮朋友写的小程序,由于功能比较简单所以就偷懒只使用了Servlet 一.JSP页面部分(这个部分的设置比较粗糙,主要是为了查看功能能否实现,如果需要向用户展示还得修饰一下) 1)功能页(所有需要后台实 ...
- ecshop二次开发之常用函数及汇总
lib_time.php gmtime()说明:获得当前格林威治时间的时间戳 server_timezone()说明:获得服务器的时区 local_mktime($hour = NULL , $min ...
- php时间戳之间相互转换
第一种情况: 将时间戳转换成年月日格式 <?php echo date('Y-m-d H:i:s',$v['apply_time']);?> 第二种情况: 将年月日转换成时间戳 strto ...
- Windows下的Objective-C集成开发环境(IDE)(转)
Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1) 使用苹果的平台,集成开发环境使用X ...
- [已解决] protobuf Missing input file
如果proto描述文件在当前目录,要以"./"开始 如: protoc ./test.proto --java_out=./ 文章来源:http://www.cnblogs.com ...
- Linux下如何查看高CPU占用率线程
转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...
- JS事件
JS事件: 声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event; 所以在下面用到 event 的地方都用 oEvent 代替 1)doucument的 ...
- TOJ 1191. The Worm Turns
191. The Worm Turns Time Limit: 1.0 Seconds Memory Limit: 65536K Total Runs: 5465 Accepted Run ...