我迟到了两年的回答,所以尽管只有少数赞成票,但请考虑一下。
简短的回答:使用下面我的第一个和第三个粗体等式来了解大多数人在说文件的“熵”时的想法。如果你想要香农的 H 熵,它实际上是熵/符号,只使用第一个方程,正如他在他的论文中所说的 13 次大多数人都不知道的那样。一些在线熵计算器使用这个,但香农的 H 是“特定熵”,而不是“总熵”,这引起了很多混乱。如果您想要 0 和 1 之间的归一化熵/符号的答案,请使用第 1 和第 2 等式(它不是位/符号,而是通过让数据选择自己的对数基数来对数据的“熵性质”进行真正的统计测量)而不是任意分配 2、e 或 10)。
有4 种类型的熵文件(数据),长度为 N 个符号,具有 n 个唯一类型的符号。但是请记住,通过了解文件的内容,您就知道它所处的状态,因此 S=0。准确地说,如果您有一个可以生成大量您可以访问的数据的源,那么您可以计算该源的预期未来熵/特征。如果您在文件上使用以下内容,则更准确地说它正在估计来自该源的其他文件的预期熵。
- 香农(特定)熵H = -1*sum(count_i / N * log(count_i / N))
其中 count_i 是符号 i 在 N 中出现的次数。
如果 log 为底数,则单位为比特/符号,nats/符号如果自然对数。
- 归一化比熵:H / log(n)
单位是熵/符号。范围从 0 到 1。1 表示每个符号出现的频率相同,接近 0 表示除 1 之外的所有符号仅出现一次,而一个非常长的文件的其余部分是另一个符号。日志与 H.
- 绝对熵S = N * H
如果 log 为底数,则单位为位,如果 ln()),则为 nats。
- 归一化绝对熵S = N * H / log(n)
单位是“熵”,从 0 到 N 不等。日志与 H 的基数相同。
尽管最后一个是最真实的“熵”,但第一个(香农熵 H)是所有书籍所称的没有(恕我直言)限定的“熵”。大多数人没有澄清(像香农所做的那样)它是位/符号或每个符号的熵。将 H 称为“熵”太松散了。
对于每个符号的频率相等的文件:S = N * H = N。这是大多数大文件的情况。熵不对数据进行任何压缩,因此完全不知道任何模式,因此 000000111111 与 010111101000 具有相同的 H 和 S(两种情况下都有 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 个标准差内的可能状态。
一个小数学给出了文件的归一化扩展熵的更短形式:
S=N * H / log(n) = sum(count_i*log(N/count_i))/log(n)
这个单位是“熵”(这不是一个真正的单位)。它被归一化为比 N * H 的“熵”单位更好的通用度量。但在没有澄清的情况下也不应该将其称为“熵”,因为正常的历史惯例是错误地将 H 称为“熵”(这与香农文本中的澄清)。