在 Matlab 中从 co-occurence 矩阵计算熵
Calculating entropy from co-occurence matrix in Matlab
我正在尝试从 co-occurence Matlab 中具有零项的矩阵中提取熵。根据 co-occurence 矩阵的熵定义:
必须计算,其中 cij 代表 (i,j) co-occurence 矩阵的条目。因此在我看来,如果只有一个零条目,熵将是不确定的。当 x = 0 时,你是否为 log(x) 设置了某种下限,或者你如何处理它?
Link 到带有 GLCM 熵定义的 pdf:http://www.code.ucsd.edu/pcosman/glcm.pdf
编辑:感谢您提供有关如何处理 log(0) 的建议,但该等式实际上需要评估 0*log(0),无论如何它都是 0。如果我可以使用公式会更容易解释,但也许我的问题更数学化,因此出现在错误的论坛上。
如果我不想在记录某些内容时出现 -Inf,我总是这样做。
设置一个非常非常小的 epsilon,然后像这样处理矩阵 C
e = 1e-99;
C = C + e;
那么你可以 运行 你的旧代码,答案不会是 -Inf。
感谢@CrisLuengo 在评论中的有用建议
我通常使用以下解决方法来避免此问题:
X = C .* log2(C + (C == 0));
entropy = -sum(X(:));
对于 C
(共现矩阵)的条目 0
,对数函数的自变量是 1
,因为表达式 (C == 0)
是评估为 1
.
我正在尝试从 co-occurence Matlab 中具有零项的矩阵中提取熵。根据 co-occurence 矩阵的熵定义:
必须计算,其中 cij 代表 (i,j) co-occurence 矩阵的条目。因此在我看来,如果只有一个零条目,熵将是不确定的。当 x = 0 时,你是否为 log(x) 设置了某种下限,或者你如何处理它?
Link 到带有 GLCM 熵定义的 pdf:http://www.code.ucsd.edu/pcosman/glcm.pdf
编辑:感谢您提供有关如何处理 log(0) 的建议,但该等式实际上需要评估 0*log(0),无论如何它都是 0。如果我可以使用公式会更容易解释,但也许我的问题更数学化,因此出现在错误的论坛上。
如果我不想在记录某些内容时出现 -Inf,我总是这样做。
设置一个非常非常小的 epsilon,然后像这样处理矩阵 C
e = 1e-99;
C = C + e;
那么你可以 运行 你的旧代码,答案不会是 -Inf。
感谢@CrisLuengo 在评论中的有用建议
我通常使用以下解决方法来避免此问题:
X = C .* log2(C + (C == 0));
entropy = -sum(X(:));
对于 C
(共现矩阵)的条目 0
,对数函数的自变量是 1
,因为表达式 (C == 0)
是评估为 1
.