重要的事情先说三遍:
C4.5在评估节点划分的优劣时,不仅仅只使用信息增益,会同时使用信息增益和信息增益率!
C4.5在评估节点划分的优劣时,不仅仅只使用信息增益,会同时使用信息增益和信息增益率!
C4.5在评估节点划分的优劣时,不仅仅只使用信息增益,会同时使用信息增益和信息增益率!
C4.5寻找最优划分的真实方法是:1)计算所有划分的平均信息增益t;2)从所有信息增益大于t的划分中寻找信息增益率最大的划分,该划分就是最优划分。
那位同学晒出的那本原著中写的非常清楚。
下面简单分析一下。
(贴上我另一问题的回答部分内容)
首先分析一下信息增益有什么问题。很多文章会说:信息增益会偏向于变量取值更多的离散特征。不管其对错,先看如下信息熵的公式:
假设我们有数据集D,它包含12个样本,其中有6个正样本和6个负样本。再假设两种划分,第一种划分使用特征a把数据集D划分成了两份:
D1,Pos 4 : Neg 2 (4个正样本,2个负样本)
D2,Pos 2 : Neg 4(2个正样本,4个负样本)
容易计算,数据集D1和D2的信息熵都为:
(1)
所以它们的加权熵也等于(1)式。
再来看第二种划分,使用特征b把数据集D划分成了四份
D1,Pos 2 : Neg 1 (2个正样本,1个负样本)
D2,Pos 2 : Neg 1(2个正样本,1个负样本)
D3,Pos 1 : Neg 2 (1个正样本,2个负样本)
D4,Pos 1 : Neg 2(1个正样本,2个负样本)
容易计算,这四个数据集的加权熵也等于(1)式。所以用特征a和用特征b对数据集划分得到的信息熵是一致的,这也符合我们的直觉,因为它们划分出来的结果差不多。我们看到,这样一个简单的例子其实说明“信息增益会偏向于变量取值更多的离散特征”这个结论是靠不住的,一个反例足以。那么信息增益真正的问题在哪?
继续上面的例子。刚才说了,从直觉上,用特征a对数据集划分得到的结果与用特征b对数据集进行划分得到的结果是差不多的。但从机器学习的角度来看,此时特征a的划分可能更好。原因是b迅速地将样本空间划分的过小了,从而增加了过拟合的风险。例如,我们要估计落入每个节点的正样本的真实比例(真实分布,非数据经验分布),此时我们可以用训练时数据在节点上的分布来作估计值。用特征a的划分,在D1上它的估计值是2/3;用特征b的划分,在D1上它的估计值也是2/3。但区别在于特征a的划分用了6个样本在估计,而特征b的划分只用了3个样本。所以用特征a的划分进行估计时可能更加准确。
综上所述,当面临差不多的两种划分时,我们应该要避免选择划分分支更多的那一种,因为它会将样本空间划分的更小,从而会导致在其中的统计量的可靠性变差。而信息增益在面临此种选择时,不会偏向任何一方。
所以C4.5提出了信息增益率。上面如果读懂了,此时就应该非常容易猜到信息增益率设计的动机是什么。既然要让指标偏向于划分少的,而信息增益本身并不能办到这一点,那么可以设计出一个factor,让信息增益去乘以这个factor,并且划分越多,这个factor要越小。
于是C4.5中的split info就出现了,它完全满足这样的要求(实际是它的倒数)。例如,上面的例子中,用特征a划分得到的split info为-log(0.5),而特征b划分得到的split info为-log(0.25)。后者显然大于前者,这就达到了让指标倾向于划分结果少的划分的目的。
通过上述分析,可以看出信息增益仍然是更加直接的评价指标,它能直接评估一次分裂是否能够将数据划分的更加纯净。而信息增益仅仅是一个“相对”指标。C4.5与ID3的最大区别在于,ID3仅仅追求每次节点划分能够带来最大的“收益”,而C4.5算法强调的是在保证足够收益的情况下,寻求最大“收益代价比”(将split info看作代价)。