2016-09-16 45 views
2

我試圖理解矢量的熵。我開始通過用平均130,方差爲1從正態分佈產生大小百萬的樣品:Matlab - 直方圖熵的比較

kk=normrnd(130,20,1000000,1); 
kk=uint8(kk);%did this or else the result was 0 
entropy(kk) 

KK的imhist是:

enter image description here

熵結果是6.3686

然後我從平均值爲130和方差爲1的正態分佈中生成一個大小爲1000的樣本,按照與之前相同的步驟獲得噪聲分佈,這裏是直方圖:

enter image description here

而且熵是6.2779。所以看起來分佈越嘈雜,熵越小。我計算了具有相同均值和方差的正態分佈的其他樣本量的熵,並且根據此變化。但我對嗎?這是比較直方圖分佈的熵的正確方法嗎?

[版]

什麼obchardon說我研究多一點之後。這種分佈:

kk1=normrnd(130,75,1000000,1);%entropy=7.6983 

給我比一個更大的熵:

kk2=normrnd(130,20,1000000,1);%entropy=6.3686 

但是這一次的熵比kk1kk2較小:

kka2=normrnd(130,150,100000,1);%entropy=6.1660 

這怎麼可能?

回答

2

熵公式被偏置爲小的矢量:

例如:

我們通常生成一個10×分佈式向量:

n = 10 

kk=normrnd(130,20,n,1); 
kk=uint8(kk); 

現在我們計算熵:

kk = im2double(kk); 
P = hist(kk(:), linspace(0, 1, 256)); 
P = P(:); P = P(P(:)>0); %we need to delete the value where P = 0, because log(0) = Inf. 
P = P/n; 
E = -sum(P.*log2(P)) 

所以在這個例子中,熵永遠不會高於-sum(n*(1/n)*log2(1/n))= 3.32! (每個kk值都是不同的最差情況)

所以@TasosPapastylianou是對的:熵是(僅)它的方差的函數,但只有當n-->inf

maximumentropyvalue

enter image description here

+0

好點。我被整個「高斯與噪聲高斯」比較拋棄了,並且忽略了矢量離散本質的影響。絕對熵與微分熵的重要區別之一!感謝您的支持。 (另外,我想你的意思是說' - (n *(1/n)* log2(1/n))' –

+0

好吧,所以我嘗試了你在各種發行版中說的話。熵值隨着方差的增加而降低,但只有當均值周圍的邊高於0時纔會降低。否則,這使得熵值上升,因爲有些值具有相同的概率0(或者如果我們談論直方圖)。這是正確的嗎? – user2952272

+1

在這個特殊情況下,如果方差增加很多,熵會下降,因爲你應用這條線'kk = uint8(kk)',當然如果你的方差= 1000(例如)幾乎所有的值都將= 0或= 255(所以熵值人爲減少)!所以我建議你使用另一個可以考慮值<0和值> 255的公式,這次如果方差增加,熵總是會增加的。 – obchardon

0

你的結論是「噪聲越大,熵越小」是不正確的。對於高斯分佈的隨機變量,熵是其方差的函數;我猜你的第二個矢量恰好有略小的方差(這在視覺上似乎也是如此),但除此之外它們的熵非常相似。

(看看Bishop第52頁,圖1.30更完整的說明)

+0

PS。這不是1的方差。 –

+1

我可能是錯的,但我認爲矢量的長度對熵值有影響。 (參考我的答案) – obchardon