首页 文章

Shannon熵用于块中符号的非等概率出现

提问于
浏览
0

我试图理解香农熵的概念并决定码长 . 在第一种情况下, b 是一个包含5个符号的数组 . 通常, b 中可以有1到8之间的任何整数值 . 为此,Shanneon的熵= NaN .

clear all
b = [1,3,2,6,1];
p_1 = sum(b==1)/length(b);
p_2 = sum(b==2)/length(b);
p_3 = sum(b==3)/length(b);
p_4 = sum(b==4)/length(b);
p_5 = sum(b==5)/length(b);
p_6 = sum(b==6)/length(b);
p_7 = sum(b==7)/length(b);
p_8 = sum(b==8)/length(b);

ShEntropy =  -p_1 * log2(p_1) - (p_2) * log2(p_2) - p_3 * log2(p_3) -p_4 * log2(p_4) -p_5 * log2(p_5) -p_6 * log2(p_6)...
    -p_7 * log2(p_7) -p_8 * log2(p_8)
%codelength
L = max(- log2(p_1), -log2(p_2), -log2(p_3), -log2(p_4), -log2(p_5), -log2(p_6), -log2(p_7), -log2(p_8))

UPDATE:

附件是图表的屏幕截图,其允许确定从静止的遍历源生成的相关序列的字长 L . (pubmedcentralcanada.ca/pmcc/articles/PMC4736934/bin/rsos150527supp1.pdf)他们已经显示了字长的计算 . 在图中,由于在L = 8时实现最大熵,因此字长为8 .

问题:方程(2)中的公式是香农的熵率,它与iid来源的通常公式不同 . 我无法理解分子中的 N_2L 是什么?在原始问题(更新前)中,数组 b 的长度为 N =5 . 因此,熵的值是标量 . 但是在Eq(2)中,我无法理解如何实现它,因为本文中的Shannons熵基于$ N $和 2L
image of supplementary

对于由唯一符号组成的任何序列 k (对于我的情况 k=8 ),如何实现Eq(2)?我的理解是,如果 length(b) = N 例如 . N = 20 ,然后我将Eq(2)计算为 L = 1 的S_T, L=2 的S_T,依此类推至 N=20 的S_T . 然而,我的困惑之所以产生,是因为熵是基于唯一符号的数量来计算的,在二进制的情况下,熵是 k=2 .

1 回答

  • 2

    你所犯的错误是p log(p)的极限p-> 0为0.因此,只有p> 0才能将其计算为p * log(p) . 对于p = 0,这将是0 * inf,即NaN,但它应该为零 .

    这种东西会有所帮助:

    entropy = @(p) -sum( p(p>0) .* log2(p(p>0)) );
    

    希望有所帮助 .

    edit :尝试根据您的评论添加说明:上面的公式计算发出 N 符号的源的熵,比如s1,...,sN那里有可能看到第n个符号sn是pn .

    如果你有一个发出二进制的源,那么你只有两个符号,比如-1和1,概率为p和1-p,这个源的熵是 -p*log(p) - (1-p)*log(1-p) . 故事结局 .

    但是,如果我们分别处理每个符号,这只是源的熵 . 这可能是因为源发出由多个相邻符号组成的码字,并且只有在我们查看构成码字的列车时才会显示源的真实结构 . 作为一个例子,在自然语言中,如果你只看到文本出现的字母,你会看到很少的结构(e会比较频繁,比如x,但就是这样),结构的真实性质 . 只有在你看到符号列表时,语言才会变得有吸引力,例如,sc可能后跟h,甚至更长的结构,如单词和单词序列 .

    为了反映这一点,我们可以看一下 L 连续符号形成的码字的熵 . 如果您的源是二进制的,则 N=2^L 可能的长度为 L 的单词(例如,对于 L=2 ,有四个代码字(00,01,10,11),对于 L=3 ,有八个,依此类推) . 每个单词可以与概率相关联,并且熵以相同的方式计算, HL = -sum(p(p>0).*log2(p(p>0))) .

    如果你无法通过分析知道概率,你可以尝试通过观察一个长样本并计算每个 N=2^L 代码字的出现频率来数字化 . 由于码字数量增长非常快,因此越长越难 .

相关问题