Matlab - 直方图熵的比较

Matlab - comparison of entropy of histograms

我正在尝试了解向量的熵。我首先从均值为 130、方差为 1 的正态分布生成大小为 1000000 的样本:

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

kk的imhist是:

熵结果为6.3686

然后我按照与之前相同的步骤从均值 130 和方差 1 的正态分布中生成了一个大小为 1000 的样本,以获得更嘈杂的分布,这是直方图:

熵为 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

这怎么可能?

您的结论 "the noisier the distribution the smaller the entropy" 是不正确的。对于高斯分布的随机变量,熵是其方差的函数;我猜你的第二个向量只是碰巧有略小的方差(从视觉上看也是如此),但除此之外它们的熵非常相似。

(查看 Bishop 第 52 页,图 1.30 以获得更全面的解释)

熵公式偏向于小向量:

例如:

我们生成一个 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.