ID3和C4.5、CART
CART连续属性参考C4.5的离散化过程,区别在于CART算法中要以GiniGain最小作为分界点选取标准。是否需要修正?处理过程为:
先把连续属性转换为离散属性再进行处理。虽然本质上属性的取值是连续的,但对于有限的采样数据它是离散的,如果有N条样本,那么我们有N-1种离散化的方法:<=vj的分到左子树,>vj的分到右子树。计算这N-1种情况下最大的信息增益率。另外,对于连续属性先进行排序(升序),只有在决策属性(即分类发生了变化)发生改变的地方才需要切开,这可以显著减少运算量。
(1) 对特征的取值进行升序排序
(2) 两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的GiniGain。优化算法就是只计算分类属性发生改变的那些特征取值
(3)选择GiniGain最小的分裂点作为该特征的最佳分裂点(注意,若修正则此处需对最佳分裂点的Gini Gain减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目)
实现连续特征数据集划分的Python程序为(采用Numpy matrix,连续特征取值就可以省略排序这一步了):
- def binSplitDataSet(dataSet, feature, value):
- mat0 = dataSet[nonzero(dataSet[:,feature] > value)[0],:][0]
- mat1 = dataSet[nonzero(dataSet[:,feature] <= value)[0],:][0]
- return mat0,mat1
其中dataset为numpy matrix, feature为dataset连续特征在dataset所有特征中的index,value即为feature的一个取值。
必须注意的是:根据离散特征分支划分数据集时,子数据集中不再包含该特征(因为每个分支下的子数据集该特征的取值就会是一样的,信息增益或者Gini Gain将不再变化);而根据连续特征分支时,各分支下的子数据集必须依旧包含该特征(当然,左右分支各包含的分别是取值小于、大于等于分裂值的子数据集),因为该连续特征再接下来的树分支过程中可能依旧起着决定性作用。
信息增益函数对于那些可能产生多分支输出的测试倾向于产生大的函数值,但是输出分支多并不表示该测试对未知的对象具有更好的预测效果.信息增益率函数可以弥补这个缺陷.然而,信息增益率函数也有它的缺陷.如果划分的信息熵值非常小,信息增益率将会不稳定.因此,C4.5系统中引入一个限制来解决这个问题:待选测试的信息增益值不能小于所有的检测过的测试的平均信息增益值.然而这个限制有其负面的影响.如果属性集中存在无关属性,即便该属性没有被选为测试属性,都将影响信息增益率的效果.因为引进的无关属性会降低测试的信息增益的平均值,所以一些具有高信息增益率而低信息增益的属性将成为最优的测试属性.这种情况就不会在使用信息增益函数的决策树中出现.
因此,信息增益函数和信息增益率函数各有利弊.实际应用说明信息增益率函数比信息增益函数更健壮,能稳定地选择好的测试.
最新文章
- ABP文档 - 审计日志
- Linux 使用iftop命令查看服务器流量
- 1007. Maximum Subsequence Sum (25)
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
- 20145223《Java程序程序设计》第2周学习总结
- Decimal To Fraction 小数转换成分数
- java基本加密算法
- 学习笔记TimePicker
- python练习程序(c100经典例17)
- 转 Android中this、super的区别
- 深入浅出—JAVA(3)
- CSS空白符处理!
- 万马齐喑究可哀-中文编程的又一波";讨论";
- jQuery获取或设置元素的宽度和高度
- 背景上实现阴影——linear-gradient
- 利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)
- 【】tensorflow学习笔记
- centos7 安装搜狗输入法
- [Unity算法]斜抛运动
- 关于CDh5.13.1 HDFS启用HA(High Availability)注意事情--(JournalNode 只有一个编辑路径)
热门文章
- 搭建并行开发环境MPICH2
- RTT设备驱动之看门狗
- Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)
- [转]Jquery Mobile dialog的生命周期
- (转)Linux系统排查4——网络篇
- Zookeeper配置Kafka
- 《大巧不工 web前端设计修炼之道》学习笔记
- GitKraken使用教程-基础部分(8)
- 接口调试,HttpWebRequest和HttpWebResponse使用,接口回调处理
- SpringBoot JPA注解详解