背景:调研了一些信息熵相关的知识,整理成博客。如有错误,欢迎留言/私信指正。
定义
信息熵由信息论之父香农于1948年提出,定义为:
$$ H = -\Sigma p \cdot \log_2(p) $$
上式中,p是概率/频率,H是信息熵。
(信息熵在小时百科中的简介:https://wuli.wiki/online/InfoEn.html,小时百科是博主无意间发现的一个wiki网站,觉得很有趣,支持一下。)
理解
很显然,光看这个干巴巴的公式很难理解信息熵的含义。而实际上,根据不同使用场景,我们可以从不同方面来理解,以下介绍三个方面的理解:
1、信息熵用来表征信息量,信息量越多,信息熵就越大
举一个例子,金毛和二哈各说了一句话,金毛说:二哈是我的好朋友,二哈说:汪汪汪汪汪汪汪汪
现在我们算一下每句话的信息熵,这里把每句话中每个字出现的频率作为p代入公式。
金毛说了八个字,每个字都不一样:“二”的频率是 \( \frac{1}{8} \),“哈”的频率是 \( \frac{1}{8} \),“是”的频率是 \( \frac{1}{8} \)...,每个字的频率都是\( \frac{1}{8} \)。
再看二哈,二哈的句子也包含八个字,但是每个字都一样,都是“汪”,所以“汪”字出现的频率是\( \frac{8}{8} = 1 \)
代入信息熵的公式,金毛和二哈说的信息熵就分别是3和0:
让我们理解一下这个例子,金毛和二哈的句子长度都一样,都是八个字,但因为金毛说的句子包含的不同的字更多,便比二哈的只由一个“汪”字组成的句子拥有了更多的信息量,所以金毛句子的信息熵便大于二哈的句子。
2、信息熵表征集合的纯度,集合纯度越低,信息熵就越小
实际上,上述的例子,一个句子我们也可以把它认为是一个由汉字组成的集合。
从集合的角度出发来理解,那么:
金毛句子的集合就是:{“二”,“哈”,“是”,“我”,“的”,“好”,“朋”,“友”}
二哈句子的集合就是:{“汪”,“汪”,“汪”,“汪”,“汪”,“汪”,“汪”,“汪”}。
我们可以看到,二哈句子集合的“纯度”非常高,只有一个字,一点也不混乱,所以纯度很高,而金毛句子集合的纯度就比较低了。
把汉字替换成数字、字母、或者别的任何东西组成的集合,比如下面这个水果集合:
什锦果篮集:{苹果、草莓、香蕉、葡萄、梨子、芒果、桃子、西瓜}
苹果果篮集:{苹果、苹果、苹果、苹果、苹果、苹果、苹果、苹果}
显然,什锦果篮集中有8个不同的水果,信息熵是3,集合很不纯,苹果果篮集中只有一种水果,信息熵是0,集合很纯。
3、信息熵用来表征不确定程度,不确定程度越高,信息熵就越大
用信息熵表征不确定程度,这里博主引用吴军的《数学之美》中的一个例子:
世界杯比赛结束了,一共有32支球队参加。我没有看比赛,但想知道哪支队伍是冠军,于时询问一个观看过比赛的观众,他不愿意直接告诉我,而是让我猜,并且我每猜一次他要收一块钱才告诉我是否猜对了,那么我要付多少钱才能知道答案呢?
我可以把球队编号,然后问“冠军在1-16号球队吗?”,如果他说“对的”,那么我就可以继续问“冠军在1-8号球队吗?”这样只需要猜 \( \log_2(32) = 5 \) 次,我就可以知道哪支球队是冠军,也就是说谁是世界杯冠军这条消息值5块钱。
然而,实际上可能也不需要猜5次,因为像西班牙、巴西、德国这样的球队更有可能获胜。每支球队获胜的概率各不相同,那么用 \( p\cdot\log_2(p)\) 便可以表示信息量了,而当每支球队获胜的概率相等时,信息熵便是5,概率均等时,不确定度最高,信息熵最大。
再回到定义
以上介绍了三种理解信息熵的方式,实际上都是利用了信息熵这个表达式的性质。它的性质,如果用一种粗略的说法表达就是:各个p的差异越小,H越大。
我们先看一个p只有两项的情况,即只有\( p_1 \)、\( p_2 \)两项时,那么:
$$ H = -(p_1 \cdot \log_2(p_1) + p_2 \cdot \log_2(p_2)) $$
注意,因为p是概率,所以实际上这里有个隐含条件,就是所有的p相加等于1,也就是 \( p_1 + p_2 = 1 \)
我们把\( p_2 \)写成\( 1 - p_1 \),再带入到信息熵的公式里,那么信息熵就能写成下面这个式子:
$$ H = -(p_1 \cdot \log_2(p_1) + (1-p_1) \cdot \log_2(1-p_1)) $$
这时H就只有\( p_1 \)这一个变量,绘制出H关于\( p_1 \)变化的图像,便是下图:
(图像采用Desmos图形计算器绘制:https://www.desmos.com)
可以看出,当 \( p_1 = 0.5 \) 时,也即 \( p_1 = p_2 = 0.5\) 时,H最大。
如果我们将p从两项扩展到n项:
$$ H = -(p_1 \cdot \log_2(p_1) + p_2 \cdot \log_2(p_2) + ... + p_n \cdot \log_2(p_n)) $$
其中,
$$ p_1 + p_2 + ... + p_n = 1 $$
那么,仍然是当所有p都相等(也就是 \(p_1 = p_2 = ... = p_n\)) 时,信息熵达到最大值。
这时,因为所有的p都相等,而所有的p相加又等于1,所以每个p的值就是\( \frac{1}{n} \),那么信息熵就是:
$$ \begin{align*} H &= -( \frac{1}{n} \cdot \log_2(\frac{1}{n}) + \frac{1}{n} \cdot \log_2(\frac{1}{n}) + ... + \frac{1}{n} \cdot \log_2(\frac{1}{n})) \\ &= - n \cdot \frac{1}{n} \cdot \log_2(\frac{1}{n}) \\ &= - \log_2(\frac{1}{n}) \\ &= log_2(n) \end{align*} $$
这也正是信息熵要写成定义中那个形式的原因,它的本意是:
1、如果n个可能都是等概率的,那么要从这n个可能性中明确一种结果,所需要的信息量就是\( \log_2(n) \)个比特;
2、如果n个可能性有差异,有的可能性大,有的可能性小,那么所需要的信息量便会小于 \( \log_2(n) \) 个比特,具体的比特数就是\( -\Sigma p \cdot \log_2(p)\) 个;
3、特殊的,如果情况是确定的,也即 p = 1,那么需要的比特数就是\( - 1 \cdot \log_2(1) = 0\),意思是说,一个确定的情况就不再需要信息量来明确结果了。
一个应用:熵权法
熵权法是一种利用信息熵确定指标权重的方法,它纯粹从数据的离散程度来考量一个指标的重要性,数据越离散,权重越高。
下面我们直接从一个例子出发,看看熵权法是怎样使用的。
有5只狗狗去参加“萌宠PK大赛”,狗狗分别做一小段表演,再由3个评委打分,得分最高的可以获得“年度最萌”称号。现在评委们对狗狗的打分如下:
评委小帅 | 评委小美 | 评委大壮 | |
---|---|---|---|
选手金毛 | 95 | 98 | 85 |
选手二哈 | 90 | 98 | 80 |
选手柴柴 | 80 | 98 | 80 |
选手萨摩 | 85 | 98 | 85 |
选手柯基 | 75 | 98 | 80 |
那么,哪位选手可以拔得头筹呢?
如果我们直接把3位评委的打分求平均,然后选出平均分最高的狗狗,这当然不失为一种方法。
但有些时候,可能有些评委并不专业,打的分数并不能反映狗狗的真实表现,于是我们想,能不能给每位评委加一个权重项,比较专业的评委给他的打分乘以一个较高权重,而不太专业的就乘以较低的权重。这样的结果可能更能反映真实。
那么,该如何确定每个评委的权重呢?熵权法便是一个可以量化确定权重的方法。
熵权法是基于信息熵的每个p越接近,H值越大这个特点而设计的一个计算权重的方法。
具体的步骤是:
第一步,计算每个样本在当前指标中的占比:
$$ p = \frac{x}{\Sigma x} $$
这一步是把指标中每个样本的数值占比当作p,对于我们的例子:
评委小帅 | 评委小美 | 评委大壮 | |
---|---|---|---|
选手金毛 | \( \frac{95}{95+90+80+85+75} \approx 0.22\) | \( \frac{98}{98+98+98+98+98} = 0.20\) | \( \frac{85}{85+80+80+85+80} \approx 0.21\) |
选手二哈 | \( \frac{90}{95+90+80+85+75} \approx 0.21\) | \( \frac{98}{98+98+98+98+98} = 0.20\) | \( \frac{80}{85+80+80+85+80} \approx 0.20\) |
选手柴柴 | \( \frac{80}{95+90+80+85+75} \approx 0.19\) | \( \frac{98}{98+98+98+98+98} = 0.20\) | \( \frac{80}{85+80+80+85+80} \approx 0.20\) |
选手萨摩 | \( \frac{85}{95+90+80+85+75} \approx 0.20\) | \( \frac{98}{98+98+98+98+98} = 0.20\) | \( \frac{85}{85+80+80+85+80} \approx 0.21\) |
选手柯基 | \( \frac{75}{95+90+80+85+75} \approx 0.18\) | \( \frac{98}{98+98+98+98+98} = 0.20\) | \( \frac{80}{85+80+80+85+80} \approx 0.20\) |
第二步,计算每个指标归一化的信息熵值:
$$ H_{norm} = - \frac{1}{log_2(n)} \cdot \Sigma p \cdot \log_2(p) $$
注意这里计算的信息熵是归一化的。
对于我们的例子,为了阐述得更详细,我们先一步步来,先直接套用信息熵公式,计算每个评委的信息熵:
评委小帅的信息熵:\( H_{小帅} = -(0.22 \cdot \log_2(0.22) + 0.21 \cdot \log_2(0.21) +0.19 \cdot \log_2(0.19) + 0.20 \cdot \log_2(0.20) + 0.18 \cdot \log_2(0.18) ) \approx 2.3169 \)
评委小美的信息熵:\( H_{小美} = -(0.22 \cdot \log_2(0.22) + 0.21 \cdot \log_2(0.21) +0.19 \cdot \log_2(0.19) + 0.20 \cdot \log_2(0.20) + 0.18 \cdot \log_2(0.18) ) \approx 2.3219 \)
评委大壮的信息熵:\( H_{大壮} = -(0.22 \cdot \log_2(0.22) + 0.21 \cdot \log_2(0.21) +0.19 \cdot \log_2(0.19) + 0.20 \cdot \log_2(0.20) + 0.18 \cdot \log_2(0.18) ) \approx 2.3213 \)
然后,再把每个评委的信息熵归一化到0到1之间。
上文我们讲过,当p有n项时,信息熵的最大值是\( \log_2(n) \),对于我们这个例子,每个指标的p都是5项,所以我们直接把信息熵除以它的最大值\( \log_2(5) \)便可将信息熵归一化到0到1之间:
评委小帅归一化后的信息熵:\( H_{小帅norm} = H_{小帅} / \log_2(5) \approx 0.9978 \)
评委小美归一化后的信息熵:\( H_{小美norm} = H_{小美} / \log_2(5) = 1.0 \)
评委大壮归一化后的信息熵:\( H_{大壮norm} = H_{大壮} / \log_2(5) \approx 0.9997 \)
第三步,计算各指标的权重:
$$ W = \frac{1-H_{norm}}{\Sigma (1-H_{norm})} $$
熵权法想要得到的结果是,数据越离散权重越高,即p越不接近,权重越高,而p与信息熵的关系恰好是反着的(p越接近,信息熵越高)。所以,我们用1减去归一化后的信息熵,这样得到的数值便是我们想要的:p越不相近,权重越高。
对于我们的例子:
评委小帅:\( 1 - H_{小帅norm} \approx 0.0022\)
评委小美:\( 1 - H_{小美norm} = 0.0\)
评委大壮:\( 1 - H_{大壮norm} \approx 0.0003\)
然后将这个值转化成占比,便是最终的权重,对于我们的例子:
评委小帅的权重:\( W_{小帅} = \frac{1-H_{小帅norm}}{(1-H_{小帅norm}) + (1-H_{小美norm}) + (1-H_{大壮norm})} \approx \frac{0.0022}{0.0022 + 0.0 + 0.0003} \approx 0.89 \)
评委小美的权重:\( W_{小美} = \frac{1-H_{小美norm}}{(1-H_{小帅norm}) + (1-H_{小美norm}) + (1-H_{大壮norm})} \approx \frac{0.0}{0.0022 + 0.0 + 0.0003} \approx 0.0 \)
评委大壮的权重:\( W_{大壮} = \frac{1-H_{大壮norm}}{(1-H_{小帅norm}) + (1-H_{小美norm}) + (1-H_{大壮norm})} \approx \frac{0.0003}{0.0022 + 0.0 + 0.0003} \approx 0.11 \)
最后,我们根据每个评委的权重,计算每只狗狗的加权平均分,便可得到一个考虑了“评委打分水准”的得分。
这个例子中,因为小帅的打分有高有低,所以用熵权法计算得到他的权重最高,而由于小美给每只狗狗都打了同样的分,虽然每只都很高,但最终的权重是0,也就是说小美的打分对最终结果没有丝毫贡献。
注意,当使用熵权法的时候,我们一定要注意它的局限性:它仅从数据的角度出发考虑指标权重,与业务毫不相干。
当然,信息熵的使用当然不仅限于算权重,一旦我们理解了信息熵的含义和特点,也可以将它灵活使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。