我的回答迟到了两年,所以尽管投票数不多,但请考虑一下。
简短答案:使用下面的第一和第三大胆公式,可以了解大多数人以比特为单位对文件“熵”的看法。如果您想让香农的H熵实际上是熵/符号,正如他在论文中13次指出的那样(大多数人都不知道),则仅使用第一个方程。一些在线熵计算器使用这一函数,但是Shannon的H是“特定熵”,而不是“总熵”,它引起了很多混乱。如果希望答案在0和1之间,则使用1st和2nd等式,这是归一化的熵/符号(不是位/符号,而是通过让数据选择其自己的对数基数来对数据的“熵性质”进行真正的统计度量而不是任意分配2,e或10)。
N个符号的文件(数据)有4种类型的熵,其中n种具有唯一的符号类型。但是请记住,通过了解文件的内容,您可以知道文件所处的状态,因此S = 0。准确地说,如果您拥有一个可以访问大量数据的数据源,则可以计算该数据源的预期未来熵/字符。如果在文件上使用以下内容,则更准确地说是从该来源估计其他文件的预期熵。
- 香农(特定)熵H = -1 * sum(count_i / N * log(count_i / N))
,其中count_i是符号i在N中出现的次数。
如果log是2,nats / symbol,单位是位/符号。如果自然日志。
- 归一化比熵:H / log(n)
单位是熵/符号。范围从0到1。1表示每个符号均等次出现,而接近0则是除1以外的所有符号都只出现一次,而很长文件的其余部分则是另一个符号。日志与H的底数相同。
- 绝对熵 S = N * H
如果log是2,单位是位,如果ln()),单位是位。
- 归一化绝对熵S = N * H / log(n)
单位是“熵”,范围从0到N。对数与H具有相同的底数。
尽管最后一个是最真实的“熵”,但第一个(香农熵H)却是所有书都称为“熵”的,而没有(需要IMHO)资格。大多数人并没有像香农一样澄清它是每个符号的比特/符号还是熵。称H为“熵”的话太松散了。
对于每个符号频率相等的文件:S = N * H =N。对于大多数大的位文件,情况就是如此。熵不对数据进行任何压缩,因此完全不了解任何模式,因此000000111111的H和S与010111101000相同(两种情况下均为6 1和6 0)。
就像其他人所说的那样,使用诸如gzip之类的标准压缩例程并在前后进行分割将更好地度量文件中预先存在的“顺序”量,但是这会偏向于更适合压缩方案的数据。没有可用于定义绝对“顺序”的通用完美优化压缩机。
要考虑的另一件事:如果更改数据表示方式,则H会更改。如果您选择不同的位组合(位,半字节,字节或十六进制),则H将不同。因此,除以log(n),其中n是数据中唯一符号的数量(二进制为2,字节为256),H的范围为0到1(这是标准化的密集香农熵,以每个符号的熵为单位) 。但是从技术上讲,如果256种字节中只有100种出现,则n = 100,而不是256。
H是“强”熵,即它是每个符号,类似于物理学中的特定熵,即每千克或每摩尔的熵。类似于物理学S的文件的规则“广义”熵为S = N * H,其中N是文件中的符号数。H将完全类似于理想气体体积的一部分。从更深的意义上讲,信息熵不能简单地完全等于物理熵,因为物理熵允许“有序的”以及无序的排列:物理熵比完全随机的熵(例如压缩文件)更多。不同的一个方面对于理想的气体,有一个额外的5/2因子可以解决这个问题:S = k * N *(H + 5/2)其中H =每个分子可能的量子态=(xp)^ 3 / hbar * 2 * sigma ^ 2,其中x =盒子的宽度,p =系统中总的非方向动量(根据动能和每个分子的质量计算),sigma = 0.341,符合不确定性原理,仅给出1 std开发内的可能状态。
进行一些数学运算即可得出文件的归一化广义熵的较短形式:
S = N * H / log(n)=总和(count_i * log(N / count_i))/ log(n)
这个单位是“熵”(实际上不是单位)。它被归一化为比N * H的“熵”单位更好的通用度量。但是,在没有澄清的情况下也不应称为“熵”,因为正常的历史惯例是错误地将H称为“熵”(这与Shannon案文中的澄清)。