信息增益,信息增益率,Gini

本文介绍决策树中的三种特征选择方法:信息增益、信息增益率及Gini指数,并通过实例详细解析每种方法的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在看Random Forest的时候,最优特征选择的常用方法查了下一般有三种:

信息增益(Info Gain)用于ID3,Gini用于CART,信息增益率(Info Gain Ratio)用于C4.5。提到前两个指标的计算时,首先要讲到的是关于熵(Entropy)的计算。

1、熵(Entropy)

理论上来说用于决策树的属性选择函数,为方便计算,往往是定义为其属性的不纯性度量,那么必须满足如下三个条件:

  • 当结点很纯时,其度量值应为0
  • 当不纯性最大时(比如所有类都有同样的可能),其度量值应最大
  • 度量应该服从多级特性,这样决策树才能分阶段建立起来 
    measure([2,3,4])=measure([2,7])+frac79timesmeasure([3,4])
     

而熵(Entropy)能够满足以上三点特性。熵(Entropy)是由“信息论之父”香农提出的,更多的各种历史、数学理论请查看参考[1]。接下来,看看熵的计算公式如下:

entropy(p1,p2,,pn)=p1log2(p1)p2log2(p2)pnlog2(pn)

其中,( p_i )为比例值。其实,熵也可以用另外一种意思来解释:

Given a probability distribution, the info required to predict an event is the distribution’s entropy. Entropy gives the information required in bits (this can involve fractions of bits!)

可以简单的理解为“熵”描述了用来预测的信息位数。接下来看个例子:

如下表所述的天气数据,学习目标是预测Play or not play?

表1 天气预报数据集例子

Outlook Temperature Humidity Windy Play?
sunny hot high false no
sunny hot high true no
overcast hot high false yes
rain mild high false yes
rain cool normal false yes
rain cool normal true no
overcast cool normal true yes
sunny mild high false no
sunny cool normal false yes
rain mild normal false yes
sunny mild normal true yes
overcast mild high true yes
overcast hot normal false yes
rain mild high true no

共14个实例,9个正例(yes),5个负例(no)。

这样当前数据的信息量(原始状态)用熵来计算就是:

info(play?)=info([9,5])=entropy(frac914,frac514) =frac914log2(frac914)frac514log2(frac514)=0.410+0.530=0.940

有了上面计算熵(信息)的基础,接下来看信息增益了。

 

2、信息增益(Info Gain)

信息增益,按名称来理解的话,就是前后信息的差值,在决策树分类问题中,即就是决策树在进行属性选择划分前和划分后的信息差值,即可以写成:

gain()=infobeforeSplit()infoafterSplit()

如上面的例子,通过使用Outlook属性来划分成下图:

image  
图1 使用Outlook属性划分决策树

在划分后,可以看到数据被分成三份,则各分支的信息计算如下:

info([2,3])=frac25log2(frac25)frac35log2(frac35)=0.971bits

info([4,0])=frac44log2(frac44)frac04log2(frac04)=0bits
,此处虽然( log_2(0) )没有定义,但( 0 times log_2(0) )仍然计算为0。

info([3,2])=frac35log2(frac35)frac25log2(frac25)=0.971bits

因此,划分后的信息总量应为:

info([2,3],[4,0],[3,2])=frac514times0.971+frac414times0+frac514times0.971=0.693bits

如果把上面的公式整理到一起的话,就是:

$$ info([2,3], [4,0], [3,2]) = frac{5}{14}times info([2,3]) + frac{4}{14}times info([4,0]) + frac{5}{14}times info([3,2])

= 0.347 + 0 + 0.347 = 0.694 bits $$

从上面可以看出,划分后的信息总量计算公式为:

info(S1,,Sn)=sumnifrac|Si||S|timesentropy(Si)

其中,n表示划分后的分支数目,( |S| )表示划分前的实例个数,( |S_i| )表示划分后某个分支的实例个数。

最后,信息增益

gain(outlook|play?)=infobeforeSplit()infoafterSplit() =info(play?)info([3,2],[4,0],[3,2])=0.9400.694=0.246bits

通过划分其他属性,可得到其他的树如下:

image  
图2 使用其他属性划分决策树

同样计算,

gain(Temperature|play?)=info([9,5])info([2,2],[4,2],[3,1]) =0.940(frac414timesinfo([2,2])+frac614timesinfo([4,2])+frac414timesinfo([3,1]))=0.028bits

gain(Humidity|play?)=0.152bits

gain(Windy|play?)=0.048bits

这样,算法会选择最大的信息增益属性来进行划分,在此处为Outlook属性。接下来在Outlook=sunny结点,按照同样的判断方法,选择其他属性进行划分,

image 
图3 继续划分决策树

计算如下:

infobeforeSplit()=info([2,3])=0.971bits
2个正例,3个负例,计算其熵

gain(Temperature|Outlook,Play?)=0.571bits

gain(Humidity|Outlook,Play?)=0.971bits

gain(Winday|Outlook,Play?)=0.020bits

因而可以得到下一个划分结点是Humidity属性。在这里的Temperature有三个值,因而其info([2,2,1])使用简便方法计算为:

info([0,2],[1,1],[1,0])=frac25timesinfo([0,2])+frac25timesinfo([1,1])+frac15timesinfo([1,0])=0.4bits

因此( gain(Temperature|Outlook, Play?) = 0.971 – 0.4 = 0.571 bits )。另外,由于要计算的是信息增益最大,在划分前信息总量( info_{beforeSplit}() )一定的情况下,我们完全可以直接求划分后信息量最小的特性即可。

 

3、信息增益率(Info Gain Ratio)

通过上面的例子,想必对于信息增益的计算步骤已经熟悉些了。那么下面来看信息增益存在的一个问题:假设某个属性存在大量的不同值,如ID编号(在上面例子中加一列为ID,编号为a~n),在划分时将每个值成为一个结点,这样就形成了下面的图:

image 
图4 信息增益偏向

最终计算得到划分后的信息量为:( info(S_1, …, S_n) = sum_{i=1}^n{frac{|S_i|}{|S|}times entropy(S_i)} = 0 ),因为( entropy(S_i) = info([1,0]) ) 或 ( info([0,1]) ),只含一个纯结点。这样决策树在选择属性时,将偏向于选择该属性,但这肯定是不正确(导致过拟合)的。因此有必要使用一种更好的方法,那就是C4.5中使用的信息增益率(Info Gain Ratio),其考虑了分支数量和尺寸的因素,使用称为内在信息(Intrinsic Information)的概念。

Gain ratio takes number and size of branches into account when choosing an attribute, and corrects the information gain by taking the intrinsic information of a split into account (i.e. how much info do we need to tell which branch an instance belongs to).

内在信息(Intrinsic Information),可简单地理解为表示信息分支所需要的信息量,其计算公式如下:

IntrinsicInfo(S,A)=sumfrac|Si||S|log2frac|Si||S|

则针对上图中的例子,

info([1,1,,1])=14times(frac114log2frac114)=3.807bits

信息增益率则计算如下:

gainratio(Attribute)=fracgain(Attribute)IntrinsicInfo(Attribute)

依然如上例:

gainratio(IDCode)=frac0.940bits3.807bits=0.246

实际上可以看出,属性的重要性会随着其内在信息(Intrinsic Information)的增大而减小。 信息增益率作为一种补偿(Compensate)措施来解决信息增益所存在的问题,但是它也有可能导致过分补偿,而选择那些内在信息很小的属性,这一点可以尝试:首先,仅考虑那些信息增益超过平均值的属性,其次再比较信息增益。

 

4、Gini Index

在CART里面划分决策树的条件是采用Gini Index,定义如下:

gini(T)=1sumnj=1p2j

其中,( p_j )是类j在T中的相对频率,当类在T中是倾斜的时,gini(T)会最小。

将T划分为T1(实例数为N1)和T2(实例数为N2)两个子集后,划分数据的Gini定义如下:

ginisplit(T)=fracN1Ngini(T1)+fracN2Ngini(T2)

然后选择其中最小的( gini_{split}(T) )作为结点划分决策树。

 

5、参考

本文大量地参考了如下资料:

[1] http://en.wikipedia.org/wiki/Entropy (EN), http://zh.wikipedia.org/wiki/%E7%86%B5 (CN)

[2] Data Mining examples: www.liacs.nl/home/joost/DM/mod_06_dec_tree_intro.ppt

[3] Data Mining – Practical Machine Learning Tools and Techniques with Java


quote:http://ziketang.com/2012/03/info-gain-and-gain-ratio-and-gini/

<think>嗯,用户想了解信息增益率、基尼指数的概念及计算方法,还有它们在决策树分类算法中的区别联系。首先,我得回忆一下决策树相关的知识。决策树常用的划分依据包括信息增益信息增益率基尼指数。信息增益是ID3算法用的,但可能存在偏向多值属性的问题,所以C4.5引入了信息增益率来调整。而基尼指数是CART算法用的,主要用于分类,也可以处理回归问题。 用户提到了信息增益率基尼指数,需要先分别解释这两个概念。信息增益率计算应该是信息增益除以分裂信息量,也就是特征的熵。这样可以惩罚多值特征,避免过拟合。基尼指数则是基于基尼不纯度,计算的是从一个数据集中随机抽取两个样本,其类别标签不一致的概率,基尼指数越小,数据纯度越高。 接下来,用户可能想知道它们的计算公式。信息增益率的话,先得写出信息增益,再除以分裂信息量的熵。基尼指数的话,计算每个类别的概率平方的补集。然后,要比较两者的区别,比如信息增益率用于C4.5,处理多分支,而基尼指数用于CART的二叉树,计算更简单。联系的话,都是用来衡量数据的不纯度,帮助选择最佳分裂特征。 另外,用户提供的引用中提到CART用基尼系数,而C4.5用信息增益率,并且CART是二叉树。需要确保这些点都涵盖进去。可能还需要提到计算步骤,比如信息增益率如何计算,基尼指数的具体例子。 还要注意用户可能的应用场景,比如在实际中如何选择这两种指标,或者它们的优缺点。比如信息增益率对多值属性更公平,但计算复杂;基尼指数计算高效,适合大数据。 需要检查是否有遗漏,比如是否有其他划分标准,但用户主要问的是这两个。最后,生成相关问题的时候,可以围绕它们的比较、应用场景、计算例子,以及在不同算法中的使用来提问。</think>### 信息增益率与基尼指数的概念及计算方法 #### 一、信息增益率 1. **概念** 信息增益率(Gain Ratio)是决策树算法(如C4.5)中用于特征选择的指标,通过引入分裂信息量(Split Information)来修正信息增益(Information Gain)对多值属性的偏向性[^2]。其核心是**用特征的熵对信息增益进行归一化**,避免因特征取值过多导致的信息增益虚高问题。 2. **计算公式** - **信息增益**: $$ \text{InfoGain}(D, A) = H(D) - \sum_{v=1}^V \frac{|D_v|}{|D|} H(D_v) $$ 其中,$H(D)$为数据集的熵,$H(D_v)$为特征$A$的第$v$个取值对应子集的熵。 - **分裂信息量**: $$ \text{SplitInfo}(D, A) = -\sum_{v=1}^V \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|} $$ - **信息增益率**: $$ \text{GainRatio}(D, A) = \frac{\text{InfoGain}(D, A)}{\text{SplitInfo}(D, A)} $$ 若分裂信息量为0(如特征仅一个取值),则增益率无意义。 #### 二、基尼指数 1. **概念** 基尼指数(Gini Index)是CART算法中用于分类的特征选择标准,基于**基尼不纯度**(Gini Impurity)衡量数据集的不确定性。其核心思想是:随机抽取两个样本,其类别标签不一致的概率越小,数据纯度越高[^3]。 2. **计算公式** - **基尼值**(单节点): $$ \text{Gini}(D) = 1 - \sum_{k=1}^K p_k^2 $$ 其中,$p_k$为数据集中第$k$类样本的比例。 - **基尼指数**(特征分裂后): $$ \text{GiniIndex}(D, A) = \sum_{v=1}^V \frac{|D_v|}{|D|} \text{Gini}(D_v) $$ 选择基尼指数最小的特征作为分裂节点。 #### 三、区别与联系 | **维度** | **信息增益率** | **基尼指数** | |-----------------|---------------------------------|---------------------------------| | **算法用途** | C4.5决策树 | CART决策树(分类任务) | | **计算复杂度** | 较高(需计算分裂信息量) | 较低(仅计算概率平方) | | **适用场景** | 处理多值特征,避免过拟合 | 高效处理大数据,支持二叉树结构 | | **归一化方式** | 通过分裂信息量归一化信息增益 | 直接衡量不纯度 | | **目标** | 最大化信息增益率 | 最小化基尼指数 | **联系**: 1. 两者均用于决策树特征选择,目标是提升数据划分的纯度。 2. 均可处理分类问题,但CART的基尼指数也适用于回归任务(通过方差最小化)[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值