Matlab - 直方图熵的比较

时间:2016-09-16 12:37:29

标签: matlab entropy

我试图了解矢量的熵。我开始从正态分布生成大小为1000000的样本,平均值为130,方差为1:

<button ng-click="bulkMode = !bulkMode">

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

enter image description here

熵结果为6.3686

然后我从正态分布生成大小为1000的样本,平均值为130,方差1遵循与之前相同的步骤以获得更大的分布,这里是直方图:

enter image description here

熵是6.2779。所以分布越嘈杂,熵就越小。我计算了具有相同均值和方差的正态分布的其他样本大小的熵,并且它根据此变化。但我是对的吗?这是比较直方图分布的熵的正确方法吗?

[版]

之后,obchardon说我调查了一下。这个分布:

imhist

给了我更大的熵:

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

但是这个熵小于kk2=normrnd(130,20,1000000,1);%entropy=6.3686 kk1

kk2

这怎么可能?

2 个答案:

答案 0 :(得分:2)

熵公式偏向于小向量:

例如:

我们生成一个10x1正态分布矢量:

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

答案 1 :(得分:0)

你的结论是“嘈杂的分布,熵越小”是不正确的。对于高斯分布随机变量,熵是其方差的函数;我猜你的第二个矢量恰好有一个稍小的方差(在视觉上似乎也是如此),但除此之外他们的熵非常相似。

(请查看Bishop p.52,图1.30以获得更全面的解释)