问题

c4.5为什么使用信息增益比来选择特征?

回答
C4.5 算法选择特征时使用信息增益比(Gain Ratio),这背后有着非常实际和深刻的考虑,并非随意为之。简单来说,是为了解决信息增益在特征选择时可能存在的偏向性问题。

我们先回顾一下信息增益。信息增益衡量的是一个特征能够减少多少不确定性,也就是在已知某个特征的情况下,目标变量(类别)的不确定性降低了多少。计算公式通常是:

信息增益 $IG(S, A) = Entropy(S) sum_{v in V_A} frac{|S_v|}{|S|} Entropy(S_v)$

其中:
$S$ 是数据集。
$A$ 是当前考虑的特征。
$V_A$ 是特征 $A$ 的所有可能取值。
$S_v$ 是数据集中特征 $A$ 取值为 $v$ 的子集。
$Entropy(X)$ 是数据集 $X$ 的熵,衡量其不确定性。

信息增益的优点在于它直观地反映了特征对划分数据集的贡献度,能够帮助我们识别那些对分类最有帮助的特征。例如,如果一个特征几乎将数据集完全分开(例如,一个特征只有两个值,每个值对应一个纯净的类别),那么它的信息增益就会很高。

但是,信息增益存在一个潜在的弊端:偏向于取值较多的特征。

这是为什么呢?想象一下,如果一个特征有很多不同的取值,比如给每个数据点分配一个唯一的 ID,或者一个特征记录了数据的精确时间戳。对于这样的特征,当我们用它来划分数据集时,很可能会得到非常纯净的子集。例如,如果一个特征的每个取值都只对应一个数据点,那么这些子集就是完全纯净的(熵为 0)。这时,计算得到的信息增益就会非常高。

问题在于,这些高信息增益的特征往往并不是真正有区分度的特征。它们只是碰巧将数据分成了很多小份,但这些划分并没有抓住数据本身的内在规律,更像是“过拟合”了训练数据中的噪声或个体差异。我们希望选择的特征是能够将数据有意义地划分成几类,而不是简单地“分而治之”到个体。

信息增益比的出现,就是为了纠正信息增益的这种偏向性。

信息增益比的计算方式是:

信息增益比 $GR(S, A) = frac{IG(S, A)}{SplitInformation(S, A)}$

其中,$SplitInformation(S, A)$(也称为分裂信息)的计算公式是:

$SplitInformation(S, A) = sum_{v in V_A} frac{|S_v|}{|S|} log_2 frac{|S_v|}{|S|}$

这个 $SplitInformation$ 是什么意思呢?它实际上衡量的是特征 $A$ 将数据集 $S$ 分裂成子集的不确定性。更具体地说,它反映了特征 $A$ 的取值分布情况。

如果一个特征有很少的取值,并且取值分布比较均匀,那么 $SplitInformation$ 就会相对较小(因为对数项的参数 $|S_v|/|S|$ 可能接近 0 或 1,变化大,但乘以小概率项)。
如果一个特征有很多取值,并且每个取值对应的数据点数量很少(例如,每个取值只对应一个或很少几个数据点),那么 $SplitInformation$ 就会非常高。这是因为 $frac{|S_v|}{|S|}$ 的值会非常小,而 $log_2$ 的值会非常大(负数),前面还有个负号,所以整个项会变大。当分得越细(取值越多、分布越均匀),$SplitInformation$ 就越大。

那么,信息增益比是如何纠正偏向性的呢?

信息增益比用 $SplitInformation$ 作为分母,对信息增益进行了“归一化”。

对于那些能显著减少不确定性的特征(信息增益高),如果它们的同时也将数据分成了很多很小的、几乎是纯净的子集($SplitInformation$ 非常高),那么信息增益比就会被拉低。因为高信息增益是分得太细的结果,而不是特征本身有强大的区分能力。
而对于那些同样能够减少不确定性,但划分得更合理、更具有代表性的特征(信息增益也较高,但 $SplitInformation$ 不那么极端),它们的信息增益比就会相对更高。

举个例子来说明:

假设我们有两个特征:
1. 特征 A: 性别(男,女)。只有两个取值。
2. 特征 B: 学生的学号(假设有 100 个不同的学号,每个学号对应一个学生)。

在某个数据集上:

特征 A (性别): 可能将数据集分成大致一半男性一半女性。假设划分后,男性子集和女性子集都能较好地区分出目标类别,比如男性大部分是 A 类,女性大部分是 B 类。那么信息增益会比较高。$SplitInformation$ 会相对较低,因为只有两个分割项,并且每个子集的比例相对较大(接近 0.5)。
特征 B (学号): 假设每个学号对应一个学生,而且学生的学号是随机分配的,没有与类别关联。那么,用学号来划分数据集,你会得到 100 个子集,每个子集只有一个学生。每个子集都是完全纯净的,熵为 0。这时,信息增益会非常高($Entropy(S) 0$)。但是,$SplitInformation$ 会非常高,因为你把数据分成了 100 个几乎一样大小的子集(比例接近 1/100),$log_2(1/100)$ 的值很大(负数),乘以 100 个这样的项,得到的 $SplitInformation$ 会非常大。

在这种情况下:
信息增益比 (特征 A) = 高信息增益 / 较低的 $SplitInformation$ = 较高的值。
信息增益比 (特征 B) = 非常高信息增益 / 非常高的 $SplitInformation$ = 可能较低的值。

这样,C4.5 就会倾向于选择特征 A,因为它认为性别比学号更能代表数据的内在划分模式,而不是仅仅将数据拆分成个体。

总结一下,C4.5 使用信息增益比是因为:

1. 解决信息增益的偏向性问题: 信息增益倾向于选择那些取值数量多的特征,即使这些特征并没有真正提供有效的分类信息。
2. 引入归一化机制: 信息增益比通过除以分裂信息来修正信息增益,分裂信息衡量了特征本身的区分度(即特征的取值分布情况)。
3. 更稳健的特征选择: 通过这种方式,C4.5 能够选择那些既能有效减少数据不确定性,又不会因为过度划分而导致过拟合的特征,从而构建出更具泛化能力的决策树。

可以说,信息增益比是信息增益在实践中更优的替代方案,它使得 C4.5 算法在面对不同类型和分布的特征时,表现得更加鲁棒和有效。

网友意见

user avatar

重要的事情先说三遍:

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看作代价)。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有