2017-02-07 8 views
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)의 공식은 일반적인 공식과 다른 섀넌의 엔트로피 비율입니다 아이디 소스 용. 분자에 N_2L이 무엇이 될지 이해할 수 없습니까? 원래 질문 (업데이트 전) 배열 b의 길이는 N =5입니다. 따라서 엔트로피의 가치는 스칼라입니다. 그러나 식 (2), 나는 Shannons가 (내 경우 k=8에 대한) 고유의 문자 k 구성된 모든 순서를 들어 $의 N의 $ 및 2Limage of supplementary

을 기반으로 본 논문에서 엔트로피 있기 때문에, 그것을 구현하는 방법을하는 방법을 이해할 수 없다 식 (2)를 구현 하는가? 내 이해는 length(b) = N 예 : N = 20이면 L = 1의 경우 S_T로,의 경우 S_T, N=20의 경우 S_T까지 Eq (2)를 계산합니다. 그러나 엔트로피는 이원의 경우에 k=2 인 고유 기호의 수를 기반으로 계산되므로 혼란이 발생합니다.

답변

2

잘못하고있는 것은 p log (p)의 한계 p -> 0이 0이라는 것입니다. 따라서 p> 0에 대해서만 p * log (p)로 계산할 수 있습니다. p = 0의 경우, 이것은 0 * inf가됩니다. 이것은 NaN입니다 만, 0이됩니다. 이런 종류의

뭔가 도움이 될 것이다 : 도움이

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

희망을.

편집 : 귀하의 의견에 대한 응답으로 설명을 추가하는 시도에서 : 위의 공식은 N 문자를 방출하는 소스의 엔트로피를 계산은 확률이 N-이 볼 S1, ..., SN 말 th 기호 sn은 pn입니다.

소스가 바이너리를 방출하는 경우 확률 p와 1-p의 두 가지 기호, 즉 -1과 +1 만 있고이 소스의 엔트로피는 -p*log(p) - (1-p)*log(1-p)입니다. 이야기의 끝.

그러나 각 기호를 개별적으로 처리하면 소스의 엔트로피가됩니다. 소스가 많은 인접한 기호들로 구성된 코드 워드를 내고 코드 워드를 구성하는 L 기호의 열차를 보면 일단 소스의 실제 구조가 드러나도록하는 것이 좋습니다. 예를 들어, 자연 언어에서 텍스트를 문자로만 보았을 때 구조가 거의 보이지 않으면 (예를 들어, x가 더 자주 나옵니다.하지만 그 정도는 큽니다), 구조의 본질은 예를 들어, sc 뒤에 h가오고, 단어 나 단어의 순서와 같은 더 긴 구조가 뒤따라야합니다.

이것을 미러링하려면 L 연속 기호로 구성된 코드 워드의 엔트로피를 살펴볼 수 있습니다. 소스가 바이너리 인 경우 길이가 LN=2^L 개의 가능한 단어가 있습니다 (예 : L=2의 경우 L=3의 경우 8 개 등) 4 개의 코드 워드 (00, 01, 10, 11)가 있습니다. 각 단어는 확률과 연관 될 수 있으며, 엔트로피는 동일한 방식으로 계산됩니다 (HL = -sum(p(p>0).*log2(p(p>0)))).

확률을 분석적으로 알 수있는 방법이 없다면 긴 샘플을 관찰하고 N=2^L 코드 워드가 각각 얼마나 자주 나타나는지를 숫자로 파악할 수 있습니다. L이 길어질수록 코드 워드의 수가 매우 빠르게 증가하기 때문에 더 어렵습니다.

+0

죄송합니다. Shannons 수식의 방정식을 블록 길이에 따라 계산 된 특수 문제에 적용하는 데 막혔습니다. 어쩌면 내가 어떻게 답을 적용 할 수 있는지/답을 수정하여 엔트로피를 계산할 수 있는지 제안 해 주시겠습니까? 질문의 업데이트 부분을보실 수 있습니까? – SKM

+0

흠, 편집상의 질문은 원래의 질문과 매우 다릅니다. 또한, 나는 당신이 그 종이에서 복사 한 부분을 정말로 이해하지 못한다. 나는 약간의 문맥이 빠져 있다는 느낌을 가지고있다. 또한, 이것이 정말로 Matlab 질문인지 확신 할 수 없지만,이 특별한 상황에서 엔트로피를 이해하는 것에 대한 느낌이 더 많습니다 (위상 엔트로피? 엔트로피 비율?). 이러한 이유로 새로운 질문을하는 것이 좋습니다. – Florian

+0

귀하의 의견에 감사드립니다. 이 엔트로피가 계산되는 방식은 길이가 2L 인 시퀀스에 대한 것입니다. 시퀀스가 바이너리이면, 'N'은 길이가 2L 인 서로 다른 단어의 수입니다. 나는 당신의 답을 어떻게 적용하여 엔트로피를 계산할 수 있는지 알고 싶습니다. 이 수식을 적용하는 방법을 이해할 수 없습니다. 일반적으로, 메시지 A = 1011에 대한 섀넌의 엔트로피에 대한 수식은 S_T = -p_1 * log2 (p_1) - p_0 * log2 (p_0)'와 같습니다. 여기서 'L = 4'. 블록 길이 'L'을 결정하기 위해 엔트로피를 적용하는 방법에 대한 통찰력이나 올바른 방법을 제공 할 수 있다면 매우 유용 할 것입니다. – SKM