机器学习学习笔记(17)----C4.5算法

ID3算法主要有两个问题:

1)选择划分特征时,ID3算法使用信息熵量化数据集的混乱程度,容易优先选取取值种类较多的特征;

2)ID3算法不能处理连续的特征值。

C4.5算法针对这两点做了改进:

1)针对问题1,使用信息增益比替代信息增益;

2)针对问题2,基于熵属性离散化方法,将连续值离散化。

除了这两点改进以外,C4.5算法和ID3算法几乎一样。

首先看一下信息增益比的概念:

按照《机器学习学习笔记(14)----决策树》的定义,信息熵增益:

对于训练样本集D上的任意属性A,属性A关于集合D的信息熵增益G(D,A)定义为经验熵H(D)与条件经验熵H(D|A)之差:

G(D,A)=H(D)-H(D|A)  (1)

以特征A的值为分类标记,计算的熵定义为:

H_{A}(D) = -\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|}    (2)

那么信息增益比就定义为:

G_{ratio}(D,A)=\frac{G(D,A)}{H_{A}(D)}    (3)

接下来,我们看一下“基于熵属性离散化方法”:

为了简单起见,采用二值化的连续值的离散化过程,那么对于特征A,假设对应的是一个连续值的样本集,那么我们可以选择任何一个值,作为割点,将样本集分成两部分,一部分小于等于割点值,另一部分大于割点值。问题是这个割点值怎么选择才是合适的。

原则上,我们应该选择割点后,使得分解后的条件熵H(D|A)最小,这样的割点才是合理的。

如果对每一个值进行尝试,找出割点,效率会很低。机器学习程序旨在处理大量的训练数据集,因此进行枚举是不合适的。Fayyad和Irani已经证明,无论多少个类以及他们是如何分布的,割点总是会出现在两个类之间的边界熵。这就产生了一个有用的优化:使得熵最小化的割点永远不发生在同一类的两个模式之间;只需要考虑属于不同类的模式间的潜在分割。

举个例子:

天气数据
景色 温度 湿度 风力 打网球
晴朗 85 85 no
晴朗 80 90 no
阴天 83 86 yes
下雨 70 96 yes
下雨 68 80 yes
下雨 65 70 no
阴天 64 65 yes
晴朗 72 95 no
晴朗 69 70 yes
下雨 75 80 yes
晴朗 75 70 yes
阴天 72 90 yes
阴天 81 75 yes
下雨 71 91 no
64 65 68 69 70 71 72 75 80 81 83 85
yes no yes yes yes no no yes no yes yes no
            yes yes        
割点 割点     割点 割点 割点 割点 割点   割点  

温度共有12个可能值,但是按照我们前面描述的原则,可以简化为8个割点。

对于割点是64时,条件熵:

H(Y|A,T=64)=\frac{1}{14}H1+\frac{13}{14}H2   (4)

H1=0 (5)

H2=-\frac{8}{13}log_{2}\frac{8}{13}-\frac{5}{13}log_{2}\frac{5}{13}=0.43104+0.53019=0.9612  (6)

因此,

H(Y|A,T=64)=\frac{1}{14}*0+\frac{13}{14}*0.9612=0.8925  (7)

类似的,可以计算其他割点的条件熵,当割点是83时,条件熵最小:

H(Y|A,T=83)=\frac{13}{14}H1+\frac{1}{14}H2   (8)

H1=-\frac{9}{13}log_{2}\frac{9}{13}-\frac{4}{13}log_{2}\frac{4}{13}=0.3672+0.5232=0.8904 (9)

H2=0   (10)

H(Y|A,T=83)=\frac{13}{14}*0.8904+\frac{1}{14}*0=0.8268  (11)

因此应该选取83作为温度的割点,小于等于83的归为一类,大于83的归为另外一类。

接下来对于离散化后的温度特征值,我们尝试计算一下信息增益比:

H(D)=-\frac{9}{14}log_{2}\frac{9}{14}-\frac{5}{14}log_{2}\frac{5}{14}=0.9402  (12)

代入(1)式,得:

G(D,A,T=83)=0.9402-0.8268=0.1134  (13)

H_{A}(D,T=83) = -\frac{13}{14}log_{2}\frac{13}{14}-\frac{1}{14}log_{2}\frac{1}{14}=0.3712  (14)

把(13)和(14)式代入(3)式,可得

G_{ratio}(D,A,T=83)=\frac{0.1134}{0.3712}=0.3055  (15)

参考资料:

《机器学习及其应用》【印】M.戈帕尔 著

《Python机器学习算法:原理,实现与案例》 刘硕 著

《机器学习基础:从入门到求职》 胡欢武编著

你可能感兴趣的:(机器学习)