gpt4 book ai didi

r - 为什么均匀分布的熵低于 R 中的重复值?

转载 作者:行者123 更新时间:2023-12-04 20:34:33 25 4
gpt4 key购买 nike

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

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

第一个输出产生大约 9.7 位的熵,而第二个输出正好产生 10 位的熵(1024 的对数基数 2 = 10)。为什么均匀分布的熵不超过 10 位?

最佳答案

我想你误解了第一个论点,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 s,如 entropy(rep(1, 1024)) ,您所描述的信息源是 均匀分布的离散模拟 .从长远来看,或者在很长的消息中,它的 1024 个字母中的每一个都预计会以相同的频率出现,而且没有比这更统一的了!

关于r - 为什么均匀分布的熵低于 R 中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com