信息增益、信息增益比、基尼指数的比较

ID3、C4.5和CART三种经典的决策树模型分别使用了信息增益、信息增益比和基尼指数作为选择最优的划分属性的准则来构建决策树。以分类树来说,构建决策树的过程就是从根节点(整个数据集)向下进行节点分裂(划分数据子集)的过程,每次划分需要让分裂后的每个子集内部尽可能包含同一类样本。信息增益和信息增益比都是和香农信息熵有关的衡量信息不确定度的量,因此下面首先介绍一下香农信息熵。

香农信息熵

说到信息熵和香农就想起了当年被《信息论》支配的恐惧,但是香农真的很帅哈哈!言归正传,信息熵是香农从热力学的“熵”借鉴过来用来衡量信息不确定度的一个物理量。决策树种将信息熵拿来衡量集合中样本混乱程度,西瓜书中用的“纯度”一词,其实也就是集合中样本类别数越少,样本越属于同一类别,集合的纯度越高,混乱程度(信息熵)越低。
对于集合 \(D\),包含的类别数为 \(K\),则集合的信息熵这样计算:

\[Ent(D)=-\sum_{k=1}^{K}p_{k}log_2p_k \tag{1}
\]

其中 \(|C_k|\) 表示 \(D\)中第 \(k\) 类样本的数量,\(p_k = \frac{|C_k|}{|D|}\) 表示集合 \(D\)中第 \(k\) 类样本的比例。\(Ent(D)\) 越小则集合 \(D\) 的纯度越高, 注意到\(Ent(D)\)总是大于等于0的。

信息增益

ID3使用信息增益来选择最优划分属性,也就是选择某个属性,使得通过此属性对数据集进行划分后,信息增益最大。信息增益定义如下

\[Gain(D, a)=Ent(D)-\sum_{v=1}^{V}\frac{\left|D^v\right|}{|D|}Ent(D^v) \tag{2}
\]

式中 \(a\) 表示用来划分数据集的属性,有 \(V\) 个不同的离散值(注意:这里包括后面信息增益率和基尼指数只讨论离散特征的情况,连续特征最后面会讲到)。上式表达的物理意义就是:对于属性 \(a\),按照不同的取值进行划分,将数据集 \(D\) 分成 \(V\) 个不同的子集,用数据集 \(D\) 的信息熵减去划分后所有子集信息熵的加权和(权重为每个子集样本数占总集合的比例)得到的差值。ID3决策树想要找到使得式(2)信息增益最大的属性 \(a\) 对数据集进行划分。
怎么理解呢?上面提到,信息熵用来衡量信息的纯度,我们的目的是让划分后每个子集的纯度尽可能大(也就是让式(2)中减数项尽量小),由于集合 \(D\) 的纯度是确定的,那么让式(2)中减数项尽量小也就是让 \(Gain(D, a)\) 尽量大。
这里我其实一直有个疑问——既然集合 \(D\) 的纯度是确定的,划分的时候只需要让 \(\sum_{v=1}^{V}\frac{\left|D^v\right|}{|D|}Ent(D^v)\)这一项尽量小就可以了,为什么要多此一举计算一下信息增益?可能“增益”这个词更能表达我们做某个决策给我们带来的收益?(胡乱猜想)
缺点:通过信息增益来选择特征会偏好取值较多的特征,一个极端情况的例子就是如果对于某个特征所有样本在此特征上的取值都不相同,这样通过这个特征计算得到的信息增益式最大的,可以计算一下 \(Ent(D^v)\) 是等于0的。

信息增益率

C4.5决策树每次分裂的时候选择信息增益率最大的特征进行划分。信息增益率提出就是为了解决上面所说的缺点,定义如下:

\[Gain\_ratio(D, a)=\frac{Gain(D, a)}{H(a)} \tag{3}
\]

其中

\[{H(a)}=-\sum_{v=1}^{V}\frac{\left|D^v\right|}{|D|}\log_2 \frac{\left|D^v\right|}{|D|} \tag{4}
\]

\({H(a)}\) 称为数据集 \(D\) 关于 \(a\) 的取值熵或固有值。属性 \(a\) 的取值数目越多 \({H(a)}\) 越大,因此将原有的信息增益除以 \({H(a)}\) 相当于对其进行了惩罚,避免了信息增益偏好取值较多特征的问题。
缺点:信息增益率朝着信息增益相反的方向发展,偏好于取值较少的特征。
关于C4.5使用信息增益比来选择特征知乎有个讨论贴,有大佬数学证明了一下,还有大佬贴出来原作者的解释了,链接放在文末了有兴趣的可以去围观一波。

基尼指数(Gini index)

基尼指数的数学计算

基尼制数是衡量数据集纯度的另一种方式,定义如下:

\[Gini(D)=\sum_{k=1}^{K} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}}=1-\sum_{k=1}^{K} p_{k}^{2} \tag{5}
\]

其中 \(p_k=\frac{|C_k|}{|D|}\) 表示数据集中 \(k\) 类样本的比例,因此

\[Gini(D)=1-\sum_{k=1}^{K} \frac{|C_k|}{|D|} \tag{6}
\]

基尼指数的物理意义就是从数据集 \(D\) 中随机抽取两个样本,他们类别不一样的概率,因此基尼指数越小表明数据集 \(D\) 的中同一类样本的数量越多, 其纯度越高。这样,将数据集按属性 \(a\)进行划分后的基尼指数为

\[Gini(D,a)=\sum_{v=1}^{V} \frac{|D^v|}{|D|}Gini(D^v) \tag{7}
\]

CART树的划分方式

不同于ID3和C4.5,CART树是一种二叉树,也就是说每次分裂节点的时候,仅将当前节点的数据集合分成两部分,分别进入左右子树。那么怎么划分呢?这里先说离散特征。
对于离散特征 \(a\),有 \(V\) 个不同的取值,当以取值 \(v\) 划分时,基尼指数这样计算:

\[Gini(D,a,v)=\frac{|D^v|}{|D|}Gini(D^v)+ \frac{|\widetilde{D}^v|}{|D|}Gini(\widetilde{D}^v)\tag{8}
\]

其中 \(\widetilde{D}^v\) 表示数据集 \(D\) 中特征 \(a\) 取值不为 \(v\) 的样本集合。这样,遍历所有的特征和特征的取值,选择使得 \(Gini(D,a,v)\) 最小的 \(a\)\(v\) 进行划分,将数据集合划分为在特征 \(a\) 上等于 \(v\) 和不等于 \(v\) 的两部分,进入左右子树。

三种划分方式的差异

适用情况

上面分别对三种划分准则进行了梳理,其中信息增益和信息增益率通常用于离散型的特征划分,ID3和C4.5通常情况下都是多叉树,也就是根据离散特征的取值会将数据分到多个子树中;而CART树为二叉树,使用基尼指数作为划分准则,对于离散型特征和连续行特征都能很好的处理。

连续特征的处理

《百面机器学习》一书中最后总结部分说ID3只能处理离散型变量,而4.5和CART都可以处理连续型变量。我个人不太认同这个说法,CART可以处理连续变量是毋庸置疑的,只需要对所有特征取值进行排序,然后取每两个相邻值的平均值作为切分点进行切分计算当前划分方式下的基尼指数,最后取基尼指数最小的特征和切分点进行划分即可,和上面的离散特征类似。那么,采用信息增益和信息增益率的时候也可以这样对连续特征进行划分得到最优分割特征和最优划分点。

参考资料

西瓜书
《百面机器学习》
c4.5为什么使用信息增益比来选择特征?