首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熵(信息论)计算

熵(信息论)计算
EN

Stack Overflow用户
提问于 2014-06-24 13:59:21
回答 2查看 156关注 0票数 0

我有一个关于计算分裂熵的基本问题。

假设我有一个包含两个类的集合,是和否。在这个集合中,我有3个样本是和2个样本否。

如果我计算这个集合的熵,我得到:

代码语言:javascript
复制
-(2/5)*(log(2/5)/log(2))-(3/5)*(log(3/5)/log(2))=0.9710

现在,这让我很困惑。如果熵为零,我将只有一个类别的样本。如果熵是0.5 (对于两个类别),我有50%的是和50%的否样本。接近1的值告诉我现在到底是什么?

一个指针,我觉得我在这里看不到明显的东西,但我不明白熵什么时候能达到1?

EN

回答 2

Stack Overflow用户

发布于 2014-07-20 07:38:32

在像你这样的二进制例子中,如果系统的熵完美地分布到每个可能的结果(10个样本,5个是,5个否),那么系统的熵将接近1。离这个均匀分布越远,越接近于0。你可以在wikipedia上看到二进制熵图。

更具体地说,熵和的完美分布是log2(numClasses)。所以对于2 == log2(2) == 1。

票数 0
EN

Stack Overflow用户

发布于 2018-01-16 02:10:39

当二项分布中成功概率为50%的观察值的数量接近无穷大时,熵为1。

例如,

代码语言:javascript
复制
c <- rbinom(100000,1,0.5)
freqsC <- table(c)/length(c)
entropyC <- -sum(freqsC * log2(freqsC))
entropyC
[1] 0.9999885

这是100000个观测值的熵值。

这是100000000个观测值的熵值。

代码语言:javascript
复制
f <- rbinom(100000000,1,0.5)
freqsF <- table(f) / length(f)
entropyF <- -sum(freqsF * log2(freqsF))
entropyF
[1] 1

这实际上是0.999999969120836,但是R给它的值是1。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24379307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档