2016-09-16 281 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