计算变量熵的正确方法是什么?
What's the correct way of calculate the entropy of a variable?
示例:
如果 a 有一个变量 X=[1 2 2 0],计算熵的正确方法是什么?
我的尝试(使用 MATLAB):
p(1) = 1/4; % probably of occur 1
p(2) = 2/4; % probably of occur 2
p(0) = 1/4; % probably of occur 0
H = -(1/4*log2(1/4)+2/4*log2(2/4)+1/4*log2(1/4))
= 1.5
问题和我的困惑是,我应该考虑 X 的零值吗?
使用 MATLAB 的 entropy
函数我得到相同的值。
谢谢。
你的问题的答案取决于你试图做什么。
如果 X
表示与灰度图像关联的数据,那么 entropy function 就是您要查找的内容:
X = [1 2 2 0];
H = entropy(X); % 0.811278124459133
但是您的 X
变量和预期结果 (1.5
) 均未指向该解决方案。在我看来,您似乎只是在尝试计算随机值向量上的香农熵。因此,您必须使用不同的方法:
X = [1 2 2 0];
% Build the probabilities vector according to X...
X_uni = unique(X);
X_uni_size = numel(X_uni);
P = zeros(X_uni_size,1);
for i = 1:X_uni_size
P(i) = sum(X == X_uni(i));
end
P = P ./ numel(X);
% Compute the Shannon's Entropy
H = -sum(P .* log2(P)); % 1.5
P
必须总和为 1
并且等于零的概率(不是值)必须排除在计算之外(使用上面的代码,不可能产生这样的概率,所以没有必要来处理它们)。
为什么结果不同?这很容易解释。在第一个示例中(使用 entropy function 的示例),Matlab 被迫将 X
视为灰度图像(其值介于 0
和 1
之间的矩阵或范围从 0
到 255
)。由于X
的底层类型是double
,变量通过函数im2uint8
进行内部变换,使得他的所有值都落在灰度图的正确范围内……从而得到:
X = [255 255 255 0];
这会产生不同的概率向量,等于:
P = [0.25 0.75];
产生的香农熵指数等于 0.811278124459133
。
示例:
如果 a 有一个变量 X=[1 2 2 0],计算熵的正确方法是什么?
我的尝试(使用 MATLAB):
p(1) = 1/4; % probably of occur 1
p(2) = 2/4; % probably of occur 2
p(0) = 1/4; % probably of occur 0
H = -(1/4*log2(1/4)+2/4*log2(2/4)+1/4*log2(1/4))
= 1.5
问题和我的困惑是,我应该考虑 X 的零值吗?
使用 MATLAB 的 entropy
函数我得到相同的值。
谢谢。
你的问题的答案取决于你试图做什么。
如果 X
表示与灰度图像关联的数据,那么 entropy function 就是您要查找的内容:
X = [1 2 2 0];
H = entropy(X); % 0.811278124459133
但是您的 X
变量和预期结果 (1.5
) 均未指向该解决方案。在我看来,您似乎只是在尝试计算随机值向量上的香农熵。因此,您必须使用不同的方法:
X = [1 2 2 0];
% Build the probabilities vector according to X...
X_uni = unique(X);
X_uni_size = numel(X_uni);
P = zeros(X_uni_size,1);
for i = 1:X_uni_size
P(i) = sum(X == X_uni(i));
end
P = P ./ numel(X);
% Compute the Shannon's Entropy
H = -sum(P .* log2(P)); % 1.5
P
必须总和为 1
并且等于零的概率(不是值)必须排除在计算之外(使用上面的代码,不可能产生这样的概率,所以没有必要来处理它们)。
为什么结果不同?这很容易解释。在第一个示例中(使用 entropy function 的示例),Matlab 被迫将 X
视为灰度图像(其值介于 0
和 1
之间的矩阵或范围从 0
到 255
)。由于X
的底层类型是double
,变量通过函数im2uint8
进行内部变换,使得他的所有值都落在灰度图的正确范围内……从而得到:
X = [255 255 255 0];
这会产生不同的概率向量,等于:
P = [0.25 0.75];
产生的香农熵指数等于 0.811278124459133
。