- 数据压缩入门
- (美)柯尔特·麦克安利斯 亚历克斯·海奇
- 863字
- 2020-08-29 00:38:21
第3章 突破熵
3.1 理解熵
由于没有更好的方法,因此香农博士将一个数对应的LOG2函数值称为该数的熵,也就是表示这个数所需要的最少二进制位数。他进一步将熵的概念(既然已经提出了这一术语了,为什么不重复利用呢……)扩展到整个数据集,也就是表示整个数据集所需要的最少二进制位数。他完成了所有这方面的数学工作,并给出了下面这个优美的公式来计算一个集合的熵注1:
注1香农决定借用玻尔兹曼H定理中的符号(即大写的希腊字母eta)来表示熵。
这个公式乍看起来可能有些吓人,因此我们将它拆开来分析。
熵(名词)
一个热力学量,表示的是一个系统中无法转换为机械功的热能的量,通常被解释为该系统的无序度或随机度(物理学中的解释)。
无序或缺乏可预测性,逐渐退化为混乱(H. P. Lovecraft)。
对在特定的消息或语言中信息传输速度的一种对数度量(信息论中的解释)。
更实际具体一些,我们先来看一组字母,例如:
首先,计算这个数据分组中所包含的元素集合(这里所说的“集合”是数学意义上的集合,即集合中的每个元素只出现一次,且元素之间的顺序无关紧要)。
这就是中所包含的不同的符号的集合。
下一步,计算集合中的每个符号在数据分组中出现的概率,其计算公式为
这个计算公式是说,一个符号出现的频率或概率,等于这个符号在数据分组中出现的次数(也就是公式中的)除以数据分组的长度。
为了将数学转化为图表,我们来计算中每一个符号出现的概率。因为中共有10个符号,所以等于10,因此每个符号的概率都等于0.1的倍数。
既然已经计算出了每一个符号出现的概率,下面就可以进一步计算香农所定义的数据分组的熵。现在再回过头来看上面那个优美的公式,相信你已经不觉得它吓人了,因为它要比你想的简单得多:
第一步,对于每个符号,将其出现的概率乘以此概率以2为底的对数;然后,将第一步所得的数相加求和,再取其相反数,这样就得到了这一数据分组的熵。
下面来计算前面所举的示例的熵,如下表所示。
对最后一列求和,得到–1.8455(允许有些小误差)。求熵公式的最前面还有一个负号(即求和符号∑前面的那个负号),因此得出结论:表示这组数据每个符号平均约需要1.8455个二进制位。搞定!