信息熵与信息增益的理解

一 信息熵

1948年香农提出了信息熵(Entropy)的概念。

假如事件A的分类划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn),那信息熵定义为公式如下:

吴军在《数学之美系列四--怎样度量信息?》中认为信息熵的大小指的的是了解一件事情所需要付出的信息量是多少,这件事的不确定性越大,要搞清它所需要的信息量也就越大,也就是它的信息熵越大。

 

Matrix67在《互联网时代的社会语言学:基于SNS的文本数据挖掘》认为信息熵衡量的是在你知道一个事件的结果后平均会给你带来多大的信息量。如果一颗骰子的六个面都是 1 ,投掷它不会给你带来任何新信息,因为你知道它的结果肯定是1,它的信息熵为 - log(1) = 0 。(log是以2为底,lg是以10为底)

 

两种解释在不同的应用上可以有不同的理解。例如在《文本分类入门(十一)特征选择方法之信息增益》可以看出在文本分类中对信息熵的理解是第二种。不过,两种理解其实都指出了信息熵的另一个作用,就是信息熵可以衡量事物的不确定性,这个事物不确定性越大,信息熵也越大

为何信息熵会有这样的作用?为何它的公式这样表示?所以还需要理解信息量这一的概念。香农用“比特”这个概念来度量信息量。也即信息量的多少就是比特的多少

拿吴军举的例子来讲,32只球队共有32种夺冠的可能性,用多少信息量才能包括这32个结果?按照计算机的二进制(只有1和0)表示法,我们知道2^5=32 ,也就是需要5符号的组合结果就可以完全表示这32个变化,而这里的符号通常称之为比特。既然是这样,那么当一件事的结果越不确定时,也就是变化情况越多时,那么你若想涵盖所有结果,所需要的比特就要越多,也就是,你要付出的信息量越大,也即信息熵越大。当然,每个变化出现的概率不同,因而在香农的公式中才会用概率,所以信息熵算的是了解这件事所付出的平均信息量。比如这个例子里假设32只球队夺冠可能性相同,即Pi=1/32 ,那么按照香农公式计算:

entropy(P1,P2,...,P32)=-(1/32)log(1/32)-(1/32)log(1/32)......-(1/32)log(1/32)

                                  =5/32+5/32...+5/32

                                  =(5*32)/32

                                  =5

 

二 信息增益(又称相对熵[relative entropy]、k-l散度[Kullback–Leibler divergence]、信息散度[information divergence])

在概率论和信息论中,信息增益是非对称的,用以度量两种概率分布P和Q的差异。信息增益描述了当使用Q进行编码时,再使用P进行编码的差异。通常P代表样本或观察值的分布,也有可能是精确计算的理论分布。Q代表一种理论,模型,描述或者对P的近似。

详细的应用实例可见这篇文章《信息增益》和《归纳决策树ID3(Java实现)

### 决策树算法中信息熵信息增益的定义、公式及应用 #### 定义概念 信息熵是一种衡量随机变量不确定性的指标。对于一个具有 \( k \) 种可能结果的离散随机变量,其每种结果的发生概率为 \( p_i (i=1,2,\dots,k) \),则信息熵可以表示为: \[ H(X) = -\sum_{i=1}^{k} p_i \log_2(p_i) \] 其中,\( H(X) \) 表示随机变量 \( X \) 的信息熵[^1]。 条件熵是在给定某些条件下,另一个随机变量的信息熵。假设已知随机变量 \( X \),求随机变量 \( Y \) 的条件熵,则条件熵公式为: \[ H(Y|X) = \sum_{i=1}^{n} P(x_i) H(Y|x_i) \] 其中,\( n \) 是随机变量 \( X \) 可能取值的数量,\( P(x_i) \) 是 \( X=x_i \) 发生的概率,\( H(Y|x_i) \) 是在 \( X=x_i \) 条件下的 \( Y \) 的信息熵信息增益用于评估某个特征对分类的作用大小,它是通过比较原始数据集的信息熵和基于某一特征划分后的条件熵来实现的。具体来说,信息增益可以通过以下公式计算得出: \[ IG(A) = H(D) - H(D|A) \] 其中,\( IG(A) \) 表示属性 \( A \) 对于数据集 \( D \) 的信息增益;\( H(D) \) 和 \( H(D|A) \) 分别代表整个数据集的信息熵和在属性 \( A \) 下的数据集条件熵[^1]。 #### 计算方法 为了更清楚地理解如何利用上述公式进行实际操作,下面给出具体的例子说明信息熵信息增益的具体计算过程。 假设有这样一个简单的二元分类问题,共有 8 个样本,分别属于两类 C1 和 C2 ,分布情况如下表所示: | 特征 | 类别C1数量 | 类别C2数量 | |------|------------|------------| | F1 | 3 | 1 | | F2 | 2 | 2 | 首先计算整体数据集的信息熵 \( H(D) \): 总样本数 N = 8,类别 C1 所占比例为 \( p(C1)=4/8=0.5 \), 同理得到 \( p(C2)=0.5 \). 所以, \[ H(D)=-p(C1)\cdot log_2{p(C1)}-p(C2)\cdot log_2{p(C2)} \] \[ H(D)=-0.5\times log_2(0.5)-0.5\times log_2(0.5)=1. \] 接着考虑按特征F1分割的情况: 当选择特征F1时, - 子集中有4个样本属于C1类,占比为 \( p(F1,C1)=3/4 \), - 剩余的一个样本属于C2类,即 \( p(F1,C2)=1/4 \), 那么子集内的信息熵为 \[ H(D|F1) = -(3/4)*log_2{(3/4)}-(1/4)*log_2{(1/4)}, \] 同理可得另一部分(对应F2)的信息熵表达式并加权平均即可获得总的条件熵 \( H(D|A) \)[^1]. 最后代入到信息增益公式里就可以完成相应数值上的运算. ```python import math def entropy(probabilities): """Calculate the information entropy given a list of probabilities.""" return sum(-p * math.log2(p) for p in probabilities if p != 0) # Example calculation based on provided data points probs_C1_F1 = [3 / 4, 1 / 4] entropy_C1_given_F1 = entropy(probs_C1_F1) print(f'Entropy when using feature F1: {entropy_C1_given_F1}') ``` 相问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值