我有一个关于计算分裂熵的基本问题。
假设我有一个包含两个类的集合,是和否。在这个集合中,我有3个样本是和2个样本否。
如果我计算这个集合的熵,我得到:
-(2/5)*(log(2/5)/log(2))-(3/5)*(log(3/5)/log(2))=0.9710现在,这让我很困惑。如果熵为零,我将只有一个类别的样本。如果熵是0.5 (对于两个类别),我有50%的是和50%的否样本。接近1的值告诉我现在到底是什么?
一个指针,我觉得我在这里看不到明显的东西,但我不明白熵什么时候能达到1?
发布于 2014-07-20 07:38:32
在像你这样的二进制例子中,如果系统的熵完美地分布到每个可能的结果(10个样本,5个是,5个否),那么系统的熵将接近1。离这个均匀分布越远,越接近于0。你可以在wikipedia上看到二进制熵图。
更具体地说,熵和的完美分布是log2(numClasses)。所以对于2 == log2(2) == 1。
发布于 2018-01-16 02:10:39
当二项分布中成功概率为50%的观察值的数量接近无穷大时,熵为1。
例如,
c <- rbinom(100000,1,0.5)
freqsC <- table(c)/length(c)
entropyC <- -sum(freqsC * log2(freqsC))
entropyC
[1] 0.9999885这是100000个观测值的熵值。
这是100000000个观测值的熵值。
f <- rbinom(100000000,1,0.5)
freqsF <- table(f) / length(f)
entropyF <- -sum(freqsF * log2(freqsF))
entropyF
[1] 1这实际上是0.999999969120836,但是R给它的值是1。
希望能有所帮助。
https://stackoverflow.com/questions/24379307
复制相似问题