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
但是这个的熵小于kk1
和kk2
:
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 是对的:熵是(仅)其方差的函数,但仅当
.
我正在尝试了解向量的熵。我首先从均值为 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
但是这个的熵小于kk1
和kk2
:
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 是对的:熵是(仅)其方差的函数,但仅当 .