2016-07-07 96 views
5

根据维基百科,均匀分布是“最大熵概率分布”。因此,如果我有两个序列(一个是均匀分布的,一个是重复值的),都是长度为k的,那么我会期望均匀分布的序列的熵高于重复值的序列。然而,这是在运行中的R下面的代码时观察到没有什么:为什么均匀分布的熵低于R中的重复值?

require(entropy) 
entropy(runif(1024), method="ML", unit="log2") 
entropy(rep(1,1024), method="ML", unit="log2") 

第一输出产生熵的周围9.7比特,而第二产生熵的准确的10位(对数的1024 = 10基座2 )。为什么均匀分布的熵不会超过10位?

+1

我认为这可能是因为实施。如果使用“MM”方法,除了重复值的熵取决于这些值之外,其行为与预期相同,但不应该如此。 “ML”方法正确处理了这一点。 编辑:交叉验证可能是一个更好的地方反正。直到你提出这个建议,我才知道它。 –

+0

如果是实现,则尝试查看'getAnywhere(“entropy.empirical”)''''getAnywhere(“entropy.MillerMadow”)'和'getAnywhere(“entropy.plugin”)'。 – Laterow

+0

谢谢。我查看了源代码,但我不确定为什么它的行为如此。总之,它取得数据,将其与freqs函数一起分类,然后将日志函数应用于它。 –

回答

3

我想你是误解什么第一个参数y,在entropy()代表。正如?entropy中提到的那样,它给出了一个计数向量。这些数字共同给出了这个“离散的信息源”上的消息所组成的每个符号的相对频率。看看这个简单的例子,看看只有两个符号的二进制信息源(1/0,开/关,A/B,你有什么)。在这种情况下,以下所有的将给予熵对于其中两个符号的相对频率是相同的源极(即一半的码元是A S和一半B S):

entropy(c(0.5, 0.5)) 
# [1] 0.6931472 
entropy(c(1,1)) 
# [1] 0.6931472 
entropy(c(1000,1000)) 
# [1] 0.6931472 
entropy(c(0.0004, 0.0004)) 
# [1] 0.6931472 
entropy(rep(1,2)) 
# [1] 0.6931472 

由于这些都是指相同的基本分布,其中概率在可用符号中最大限度地展开,它们各自给出两态信息源(log(2) = 0.6931472))的最高可能熵。

当你这样做,而不是entropy(runif(2)),你提供从均匀分布中随机选择的两个符号的相对概率。除非这两个随机选择的数字完全相等,否则您告诉entropy()您有一个信息源,其中包含两个用于不同频率的符号。因此,您总是会得到低于log(2)的计算熵。下面是一个简单的例子来说明我的意思:

set.seed(4) 
(x <- runif(2)) 
# [1] 0.585800305 0.008945796 
freqs.empirical(x) ## Helper function called by `entropy()` via `entropy.empirical()` 
# [1] 0.98495863 0.01504137 

## Low entropy, as you should expect 
entropy(x) 
# [1] 0.07805556 

## Essentially the same thing; you can interpret this as the expected entropy 
## of a source from which a message with 984 '0's and 15 '1's has been observed 
entropy(c(984, 15)) 

综上所述,通过将y=说法1秒的长字符串,如entropy(rep(1, 1024)),你所描述是离散的信息源均匀分布的模拟。从长远来看,或者在一个非常长的消息中,它的1024个字母中的每一个预计会以相同的频率出现,并且你不能得到比这更统一的信息!

+0

感谢您的帮助。我想要做的是测量数组的熵。数组中的每个元素都包含一个数字,该数字对应于该元素在内存中访问的次数(用于安全性研究)。为了正确测量熵,我需要首先将freqs函数应用于该数组吗? –

+2

@AlphaBravo对不起,我将无法为您提供任何有关如何将熵计算应用于特定应用程序的有用建议。由于'freqs.empirical()'规范化了交给它的任何数据(因此它们的频率总和为1),但是,不管你是将它交给原始计数还是已经归一化的数据都没有区别。 –