의 첫 번째 인수 인 y
이 오해하고 있다고 생각합니다. ?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
때문에 이들 모두는 동일한 기본 분포를 지칭하며, 확률은 이용 가능한 심볼들 사이에서 최대한으로 퍼져 나가며, 이들은 각각 2- 상태 정보 소스 (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))
요약
이 entropy(rep(1, 1024))
에서와 같이 y=
인수를 1
의 긴 문자열을 전달하여, 당신은 이산 인 정보 소스를 기술하고 있습니다 : 여기가 무슨 뜻인지 설명하기 위해 간단한 예입니다 균일 한 분포의 아날로그. 장기적으로 또는 매우 긴 메시지에서 1024 자의 문자가 모두 동일한 빈도로 발생해야하며, 그 이상의 유니폼을 얻을 수 없습니다!
구현 때문일 수도 있다고 생각했습니다. "MM"메서드를 사용하는 경우 반복되는 값의 엔트로피가 해당 값에 따라 달라진다는 점을 제외하고는 예상대로 작동합니다. "ML"방법은이를 올바르게 처리합니다. 편집 : 교차 유효성 검사가 더 나은 장소 일 수 있습니다. 네가 제안 할 때까지 나는 그것을 알지 못했다. –
구현의 경우,'getAnywhere ("entropy.empirical")','getAnywhere ("entropy.MillerMadow")'및'getAnywhere ("entropy.plugin")'를보십시오. – Laterow
감사합니다. 소스 코드를 살펴 봤지만 왜 그렇게 행동하는지 잘 모르겠습니다. 요약하면, 데이터를 취해 freqs 함수로 저장 한 다음 로그 함수를 적용합니다. –