机器学习之C4.5

来源:互联网 发布:蜂蜜源码 编辑:程序博客网 时间:2024/06/05 06:11

C4.5算法,决策树的一种生成算法。是对ID3的一个改进算法,在选择最佳分裂属性时,ID3使用的标准是信息增益,而C4.5使用的是信息增益率。
C4.5和ID3一样,生成的决策树可以是多叉树,CART生成的是二叉树。

信息增益率

在选择多值属性时通过考虑分支的数量和大小来减少偏差。
计算
首先计算训练集的信息增益,不再赘述
Intrinsic Value(有的博客称之为分裂信息度量)的计算:

IV(Ex,a)=vvalues(a)|xEx|value(x,a)=v||Ex|log2(|xEx|value(x,a)=v||Ex|)

意思就是在计算属性a的Intrinsic Value时,对于a的所有值,属性a=此值的个数占总个数的比例*log2这个比例
具体计算举例看此博客:[信息增益率计算example](http://blog.csdn.net/xuxurui007/article/details/18045943 “信息增益率计算example”)
相对与ID3算法的改进
- 既可以处理连续数据也可以处理离散数据
- 可以处理属性丢失的训练集
- 处理多值属性?(attributes with differing costs)

对连续属性的处理

如果属性是离散型,节点的个数就是离散数值的个数,这时可能产生多叉。
对于连续性属性,选择一个阈值,进行二叉划分
阈值的选择方法,我看到有两种,具体实现细节不同,但都是使划分后的信息增益率最大
1. Ri的最小值赋给A1,Ri的最大值赋给Am(m是自己选择的值)
   for j from 2:m-1
   Do Aj=A1+j*(Am-A1)/m
   从A1到Am中选择使得信息增益率最大的值作为阈值
2. 另外一种方法:
   属性R上的数据个数为total,将数据集按照该属性值从小到大排序[A1,...,Atotal]
   生成total-1个分割点。第i个分割点的取值Vi=(Ai+Ai+1)/2。从total-1个分割点中寻找使信息增益率最大的点。

python实现

惊奇的发现自己写的C4.5算法竟然对了。感谢机器学习实战,其中有一些实现方法是借鉴和学习这本书里的代码。不过我只对离散多值属性进行了验证,是正确的,没有对连续属性进行验证,一是因为没有测试数据,而是因为今天没有时间了,还要听英语,明天要开始下一个算法。
这个程序比较庞大,我是倒着写的,就是先写被其他函数用到函数,最后写主要函数

0 0