超详细的信息熵、信息增益、信息增益比、基尼系数

本文深入解析信息熵和信息增益的概念,探讨其在决策树算法中的应用,通过实例说明如何利用信息增益选择最佳分组变量,同时介绍信息增益率和基尼系数,对比它们在模型构建中的优劣。

一、信息

在开始解释信息熵和信息增益之前,我们先来解释一下什么是信息:能消除不确定性的内容才能叫信息,而告诉你一个想都不用想的事实,那不叫信息。

比如数据分析师的工作经常是要用数据中发现信息,有一天上班你告诉老大从数据中发现我们的用户性别有男有女。。。(这不废话吗?)这不叫信息,但是如果你告诉老大女性用户的登录频次、加购率,浏览商品数量远高于男性,且年龄段在25岁~30岁的女性用户消费金额最多,15-20岁最少,那么我相信你老大会眼前一亮的!!!

1.1 信息的传递

首先来我们来弄明白信息是如何传递的。信息传递是由一个信源、信道、信宿三部分组成的信息传递系统实现的。其中,信源是信息的发送端,信宿是信息的接收端。

信息传递存在于一个随机干扰的环境中,因此传递系统对信息的传递是存在随机误差的。如果将发送的信息记为U,接收的信息记为V,那么信道可记为信道模型,记为P(U|V)。

信道模型是一个条件概率矩阵P(U|V),成为信道传输概率矩阵,记为:

\begin{bmatrix} P(u_{1}|v_{1}) & P(u_{2}|v_{1}) & \cdots & P(u_{r}|v_{1})\\ P(u_{1}|v_{2}) & P(u_{2}|v_{2}) & \cdots & P(u_{r}|v_{2})\\ \vdots & \vdots & & \vdots \\ P(u_{1}|v_{q}) & P(u_{2}|v_{q}) & \vdots & P(u_{r}|v_{q}) \end{bmatrix}

P(u_{i}|v_{j})表示信宿收到信息v_{j}而信源发出信息u_{i}的概率。

在实际通信之前,信宿不可能确切了解信源究竟会发出什么样的确切信息,也不可能判断信源处于什么状态,这种情形称为信宿都信源具有不确定性。因为这种不确定性是通信之前的,所以称为先验不确定性;实际通信以后,信宿收到信源发来的信息,先验不确定性才能被消除或减少。如果干扰很小,不会对传递的信息产生任何可察觉的影响,信源发出的信息被信宿全部收到,信宿的不确定性就被完全消除。但在一般情况下,干扰总会对信源发出的信息造成某种破坏,使信宿收到的信息不完全,因此,先验不确定新不能被完全消除,只能部分被消除。即通信结束后,信宿仍然具有一定程度的不确定性,称为后验不确定性

如果后验不确定性等于先验不确定性,表示信宿完全没有接收到信息,如果后验不确定性等于0,表示接收到了全部的信息。可见,信息是用来消除不确定性的。

1.2 信息的定义

如何衡量信息量?1948年有一位科学家香农从引入热力学中的熵概念,得到了信息量的数据公式:

{\color{Red} I(u_{i})=log_{2}\frac{1}{P(u_{i})}=-log_{2}P(u_{i})}

P(u_{i})代表信息发生的可能性,发生的可能性越大,概率越大,则信息越少,通常将这种可能性叫为不确定性,越有可能则越能确定则信息越少;比如中国与西班牙踢足球,中国获胜的信息量要远大于西班牙胜利(因为这可能性实在太低~~)。

以下是P(u_{i})I(u_{i})的关系图,横坐标为P(u_{i}),纵坐标为I(u_{i}),可以看到概率越大,信息越少。

二、信息熵

信息熵是信息量的数学期望,是信源发出信息前的先验不确定性,也成先验熵,信息熵的数学定义为:

{\color{Red} Ent(U)= \sum_{i}P(u_{i})I(u_{i})= \sum_{i}P(u_{i})log_{2}\frac{1}{P(u_{i})}=-\sum_{i}P(u_{i})log_{2}P(u_{i})}

可见,如果信息熵等于0,表示只存在唯一的信息发送可能,即P(u_{i})=1,没有发送的不确定性;如果信源的k个信号有相同的发送概率,即所有的u_{i}P(u_{i})=1/k,即信息熵达到最大,不确定性最大。所以P(u_{i})差别越小,信息熵越大,平均不确定性最大。P(u_{i})差别越大,信息熵就越小,平均不确定性越小。

假设有两个信源u_{1}u_{2},则有P(u_{1})=1-P(u_{2}),以下是P(u_{1})Ent(U)的关系图,P(u_{1})是横坐标,Ent(U)是纵坐标:

三、信息增益

当已知信号U的概率分布P(U)且收到信号V=v_{j},发出信号的概率变为P(U|v_{j}),于是信源的不确定性变为:

{\color{Red} Ent(U|v_{j})= \sum_{i}P(u_{I}|v_{j})I(u_{i}|v_{j})= \sum_{i}P(u_{i}|v_{j})log_{2}\frac{1}{P(u_{i}|v_{j})}=-\sum_{i}P(u_{i}|v_{j})log_{2}P(u_{i}|v_{j})}

称为后验熵,表示信宿收到v_{j}后对发出信号U的度量值。由于收到信号v_{j}是个随机变量,后验熵的期望为:

{\color{Red} Ent(U|V)= \sum_{j}P(v_{j})Ent(U|v_{j})=- \sum_{j}P(v_{j})(\sum_{i}P(u_{i}|v_{j})log_{2}P(u_{i}|v_{j}))}

称为条件熵,表示信宿收到所有V后,对发出信号U任然存在的不确定性(后验不确定性),这是由随机干扰引起的。

通常Ent(U|V)<Ent(U),于是{\color{Red} Gains_{ent}(U,V)=Ent(U)-Ent(U|V)}就称为信息增益,反映的是信息消除随机不确定性的程度。

四、信息熵和信息增益的例子

信息熵和信息增益用的最多的就是决策树了,在决策树中,我们会找到信息增益最大的输入变量作为最佳分组变量,例如我们有两个输入变量性别和年龄段,输出变量是客户是否购买。

性别(F1)11010000101100
年龄段(F2)BAACBBCCCABAAC
是否购买11101111001001

决策树会把输出变量当做信源U,输入变量看做信宿接受到的一系列信息V。在实际通信之前,也就是决策树建立之前,输出变量对信宿来说是完全随机的,其平均不确定性为:

Ent(U)=-\sum_{i}P(u_{i})log_{2}P(u_{I}) =-\frac{9}{14}log_{2}(-\frac{9}{14})-\frac{5}{14}log_{2}(-\frac{5}{14})=0.940

而在实际通信中,也就是决策树建立过程中,随着信宿接收到信息,也就是考察了输入变量(例如F2年龄段),则条件熵为:

Ent(U|F2)=- \sum_{j}P(v_{j})(\sum_{i}P(u_{i}|v_{j})log_{2}P(u_{i}|v_{j}))=\frac{5}{14}(-\frac{2}{5}log_{2}(-\frac{2}{5})-\frac{3}{5}log_{2}(-\frac{3}{5}))+\frac{4}{14}(-\frac{4}{4}log_{2}(-\frac{4}{4})-\frac{0}{4}log_{2}(-\frac{0}{4}))+\frac{5}{14}(-\frac{3}{5}log_{2}(-\frac{3}{5})-\frac{2}{5}log_{2}(-\frac{2}{5}))=0.694

于是,信息增益为:

Gains(U,F2)=Ent(U)-Ent(U|F2)=0.940-0.694=0.246

同理,还可以计算F1性别的信息增益为:Gains(U,F1)=0.048

容易理解,此时应选择信息增益最大的输入变量F2年龄段作为最佳分组变量,因为它消除信宿对信源的平均不确定性的能力最强。或者说,由此进行的样本分组,输出变量在两个组内部取值的趋同程度最高,即各组内部的P(u_{i})差别大,这当然是人们所期望的结果。

五、信息增益率

从上面的例子应该看到,这个选择标准以信息增益值的大小为标准。事实上,这种方式存在一定的问题,主要表现为类别之多的输入变量比类别值少的输入变量有更多的机会称为当前最佳分组变量。

如F2年龄段比F1性别具有作为最佳分组变量的“先天”优势。为了有助理解,将上面的例子F2年龄段的取值进行调整,将A拆成A1和A2,相当于增加了一个分类:

性别(F1)11010000101100
年龄段(F2)BA1A2CBBCCCA1BA1A2C
是否购买11101111001001

由此得到的信息增益:

Gains(U,F2)=Ent(U)-Ent(U|F2)=0.940-0.687=0.253

可见这个结果比数据调整前增大了。

为了解决这个问题,不仅考虑信息增益的大小程度,还兼顾考虑为获得信息增益所付出的“代价”:信息增益率的数据定义为:

{\color{Red} GainsR(U,V)=Gains(U,V)/Ent(V)}

可见,如果输入变量V有较多的分类值,则它的信息熵会偏大,而信息增益率会因此降低,进而消除了类别数目所带来的影响。

例如,第四章表中F2的信息增益率为:GainsR(U,F2)=Gains(U,V)/Ent(F2)=0.246/1.577=0.156,而在本章F2年龄段的信息增益率为:GainsR(U,F2)=Gains(U,V)/Ent(F2)=0.2531/1.924=0.132,信息增益率没有增大。

而F1性别的信息增益率为GainsR(U,F1)=Gains(U,V)/Ent(F1)=0.048/0.985=0.049,F1性别的信息增益率仍然小于F2年龄段,还应选择F2年龄段作为当前最佳分组变量。

六、基尼系数

与信息熵和信息增益类似,先验基尼系数为:

{\color{Red}Gini(U)= \sum_{i}P(u_{i})(1-P(u_{i}))= 1-\sum_{i}P(u_{i})^{2}}

后验基尼系数为:

{\color{Red}Gini(U|v_{j})= \sum_{i}P(u_{i}|v_{j})(1-P(u_{i}|v_{j}))= 1-\sum_{i}P(u_{i}|v_{j})^{2}}

后验基尼系数的期望,也就是条件基尼系数为:

{\color{Red}Gini(U|V)= \sum_{j}P(v_{j})\sum_{i}P(u_{i}|v_{j})(1-P(u_{i}|v_{j}))= \sum_{j}P(v_{j})(1-\sum_{i}P(u_{i}|v_{j})^{2})=1-\sum_{j}P(v_{j})\sum_{i}P(u_{i}|v_{j})^{2}}

基尼增益为:

{\color{Red} Gains_{Gini}(U,V)=Gini(U)-Gini(U|V)}

总结

基尼系数和信息熵没有谁优谁劣的说法,在实际模型中效果基本不相上下,但是由于基尼系数的计算公式比较简单,不需要log,所以计算速度会更快。

在机器学习中,信息增益(Information Gain)基尼系数(Gini Index)是两个用于决策树构建过程中特征选择的重要指标。它们分别基于信息统计学原理,用于衡量数据集的纯度以及特征对数据集划分的有效性。 ### 信息增益 信息增益是基于信息熵(Entropy)的概念来定义的。信息熵用于衡量一个系统的不确定性,熵越大,系统的不确定性越高。对于分类任务,熵可以用来衡量一个数据集的纯度,如果一个数据集的所有样本都属于同一类别,则其熵为0;如果样本均匀分布在各个类别中,则熵最大。 信息增益定义为划分数据集前后信息熵的减少量: $$ \text{Gain}(A) = H(A) - H(A|F^{(j)}=f) $$ 其中,$ H(A) $ 是划分前数据集的信息熵,$ H(A|F^{(j)}=f) $ 是在特征 $ F^{(j)} $ 上取值为 $ f $ 的条件下数据集的信息熵信息增益越大,说明使用该特征进行划分后数据集的不确定性减少得越多,即该特征对分类越有帮助。 信息增益的一个问题是它偏向于选择具有较多取值的特征。为了解决这个问题,引入了信息增益率(Gain Ratio),它通过引入分裂信息(Split Information)对信息增益进行归一化处理。 ```python def entropy(y): from collections import Counter import math counts = Counter(y) total = len(y) ent = 0 for count in counts.values(): p = count / total ent -= p * math.log2(p) return ent def information_gain(X, y, feature_index): original_entropy = entropy(y) values = set(X[:, feature_index]) weighted_entropy = 0 for value in values: subset_indices = [i for i, x in enumerate(X) if x[feature_index] == value] subset_y = [y[i] for i in subset_indices] weight = len(subset_y) / len(y) weighted_entropy += weight * entropy(subset_y) return original_entropy - weighted_entropy ``` ### 基尼系数 基尼系数是另一种衡量数据集纯度的指标,其定义为: $$ \text{Gini}(A) = 1 - \sum_{k=1}^{K} p_k^2 $$ 其中 $ p_k $ 表示第 $ k $ 类样本在数据集中所占的比例。基尼系数越小,表示数据集的纯度越高。在决策树中,使用基尼系数来选择划分特征时,会选择使划分后的基尼系数最小的特征。 基尼系数的计算公式可以扩展为: $$ \text{Gini}(A, F^{(j)}=f) = \frac{|A_1|}{|A|} \cdot \text{Gini}(A_1) + \frac{|A_2|}{|A|} \cdot \text{Gini}(A_2) $$ 其中 $ A_1 $ $ A_2 $ 是根据特征 $ F^{(j)} $ 的取值 $ f $ 划分后的子集。最终选择使 $ \text{Gini}(A, F^{(j)}=f) $ 最小的特征作为划分特征。 ```python def gini(y): from collections import Counter counts = Counter(y) total = len(y) impurity = 1 for count in counts.values(): prob = count / total impurity -= prob ** 2 return impurity def gini_index(X, y, feature_index): values = set(X[:, feature_index]) weighted_gini = 0 for value in values: subset_indices = [i for i, x in enumerate(X) if x[feature_index] == value] subset_y = [y[i] for i in subset_indices] weight = len(subset_y) / len(y) weighted_gini += weight * gini(subset_y) return weighted_gini ``` ### 信息增益基尼系数的区别 - **计算方式**:信息增益基于信息熵,而基尼系数基于平方概率之。 - **偏向性**:信息增益偏向于具有较多取值的特征,而基尼系数则没有这种明显的偏向性。 - **计算复杂度**:基尼系数的计算通常比信息增益更简单,因为它不需要对数运算。 - **应用场景**:在C4.5决策树中使用信息增益率进行特征选择,而在CART(分类与回归树)中使用基尼系数进行特征选择。 ### 决策树中的作用 在决策树的构建过程中,信息增益基尼系数都用于选择最佳的特征进行划分。通过递归地选择信息增益最大或基尼系数最小的特征,决策树能够逐步将数据集划分为更纯净的子集,从而提高分类的准确性。信息增益基尼系数的选择会影响决策树的结构性能,因此在实际应用中需要根据具体问题选择合适的指标。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值