如何实际测量文件的熵?


9

我现在正在尝试测量文件中包含的许多非冗余(实际)信息。有人称这为熵的量。

当然有标准的p(x)log {p(x)},但我认为Shannon只是从通过信道传输的角度考虑它。因此,公式需要一个块大小(以位为单位,通常为8)。对于大文件,这种计算是相当无用的,忽略了符号之间的短距离到长距离的相关性。

有二叉树方法和Ziv-Lempel方法,但这些方法在本质上似乎具有很高的学术性。

可压缩性也被认为是熵的量度,但是对于压缩程度似乎没有下限。对于我的文件hiss.wav,

  • 原始的hiss.wav = 5.2 MB
  • 通过香农公式的熵= 4.6 MB
  • hiss.zip = 4.6 MB
  • hiss.7z = 4.2 MB
  • hiss.wav.fp8 = 3.3 MB

是否有某种合理可行的方法来测量hiss.wav中存在多少熵?


1
我不明白您所说的“高度学术化”。
David Richerby

死了。我本来以为,随着全球研究费用的规模最大化用于最大化数据传输和存储,将有一种更加成熟的方法来估算您实际处理的衣服数量。在可能的范围之内,我不会想到会有文件实用程序传递给一些输出理论熵估计的数据。电信和磁盘制造商在玩什么?
保罗·乌萨克

Answers:


9

熵是随机变量的特征。给定文件的熵为零,因为它是常数。在没有通道的许多情况下,熵是有意义的,您可以将其应用于从给定源生成的WAV文件的随机集合中。在这种情况下,您的整个 WAV文件。X

可以认为实际的WAV文件(不包括标题)是由某些Markovian源生成的。此源按顺序产生声音振幅(“样本”),每个振幅取决于其之前的振幅。在运行了很长时间之后,每个样本的熵(更准确地说,就是前面给出的样本的条件熵)变得非常接近某个极限值,我们将其定义为源的熵。样本的熵是该数字的N倍(在极限内;同样,更准确地说,我们正在测量条件熵)。Lempel和Ziv表明,如果样本熵为H位,则他们的算法会将N个样本压缩为H N + oññHñ位,概率很高(概率超过样本)。Lempel-Ziv压缩在实践中非常流行,例如以流行格式使用。Hñ+Øñgzip

由于Lempel和Ziv的结果,可以通过使用Lempel-Ziv算法压缩较长的样本序列来近似源的熵。这不会估计特定样本的熵,这不是一个明确定义的概念(恒定序列的熵为零),而是生成它的源的熵。

一个相关的概念是算法熵,也称为Kolmogorov复杂度。它是生成文件的最短程序的长度。对于单个文件,此数量确实有意义。对于由随机源生成的文件,Lempel-Ziv定理表明,文件的算法熵很有可能受其香农熵的限制。不幸的是,算法熵是不可计算的,因此它更多是一个理论概念。

为了使图片更完整,我建议您阅读Shannon的有关印刷英语的预测和熵的论文,以另一种方法估算源的熵。


我有。还有Schurmann和Grassberger的论文。根据他们对英语的估计熵,似乎我们可以得到的最佳熵估计是通过使用诸如fp8的PAQ8变体进行压缩。我的成绩与莎士比亚散文相得益彰。
保罗·乌萨克

问题似乎在于,尽管我本来以为源的熵必须有一个有限的理论值。通过压缩确定仅反映了压缩算法的效率。根据经验,您的gzip不错,但7z更好。如我的问题所示,fp8更好。我能否在不久的将来使用fp12000时发现hiss.wav仅包含10个字节的总熵?
保罗·乌萨克

熵不是文件的属性;它不是文件的属性。每个单独的文件的熵为零。而是,熵是随机源的属性。适用于特定文件的随机性度量是Kolmogorov复杂度(也称为算法熵),但不幸的是,该度量不可计算。
Yuval Filmus

当压缩文件以估计源的熵时,您使用一个定理来保证源生成的数据的压缩率接近源的熵。但是,实际的压缩实用程序并没有应用普通的Lempel-Ziv算法,而是应用了更实用的版本。如果您想估计熵,也许您应该牢记这一目标重新实现该算法。
Yuval Filmus

我删除了一个没有建设性的讨论;评论不用于冗长的讨论,只是改善现有职位。如果您想诚实地讨论熵问题,请创建一个聊天室。记住要保持文明。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.