2016-07-07 19 views
5

根據維基百科,均勻分佈是「最大熵概率分佈」。因此,如果我有兩個序列(一個是均勻分佈的,一個是重複值的),都是長度爲k的,那麼我會期望均勻分佈的序列的熵高於重複值的序列。然而,這是在運行中的R下面的代碼時觀察到沒有什麼:爲什麼均勻分佈的熵低於R中的重複值?

require(entropy) 
entropy(runif(1024), method="ML", unit="log2") 
entropy(rep(1,1024), method="ML", unit="log2") 

第一輸出產生熵的周圍9.7比特,而第二產生熵的準確的10位(對數的1024 = 10基座2 )。爲什麼均勻分佈的熵不會超過10位?

+1

我認爲這可能是因爲實施。如果使用「MM」方法,除了重複值的熵取決於這些值之外,其行爲與預期相同,但不應該如此。 「ML」方法正確處理了這一點。 編輯:交叉驗證可能是一個更好的地方反正。直到你提出這個建議,我才知道它。 –

+0

如果是實現,則嘗試查看'getAnywhere(「entropy.empirical」)''''getAnywhere(「entropy.MillerMadow」)'和'getAnywhere(「entropy.plugin」)'。 – Laterow

+0

謝謝。我查看了源代碼,但我不確定爲什麼它的行爲如此。總之,它取得數據,將其與freqs函數一起分類,然後將日誌函數應用於它。 –

回答

3

我想你是誤解什麼第一個參數y,在entropy()代表。正如?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 

由於這些都是指相同的基本分佈,其中概率在可用符號中最大限度地展開,它們各自給出兩態信息源(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)) 

綜上所述,通過將y=說法1秒的長字符串,如entropy(rep(1, 1024)),你所描述是離散的信息源均勻分佈的模擬。從長遠來看,或者在一個非常長的消息中,它的1024個字母中的每一個預計會以相同的頻率出現,並且你不能得到比這更統一的信息!

+0

感謝您的幫助。我想要做的是測量數組的熵。數組中的每個元素都包含一個數字,該數字對應於該元素在內存中訪問的次數(用於安全性研究)。爲了正確測量熵,我需要首先將freqs函數應用於該數組嗎? –

+2

@AlphaBravo對不起,我將無法爲您提供任何有關如何將熵計算應用於特定應用程序的有用建議。由於'freqs.empirical()'規範化了交給它的任何數據(因此它們的頻率總和爲1),但是,不管你是將它交給原始計數還是已經歸一化的數據都沒有區別。 –