我有一个表示数据集中共存频率计数的方阵。换句话说,行代表特征1的所有可能观察结果,列代表特征2的可能观察结果。单元格(x, y)中的数字是特征1被观察到为x,并且特征2也被观察到为y的次数。
我想计算这个矩阵中包含的相互信息。MATLAB有一个内置的
或者,我编写了自己的互信息函数,它接受一个矩阵,但我不确定它的准确性。它看起来正确吗?
我想计算这个矩阵中包含的相互信息。MATLAB有一个内置的
information
函数,但它需要2个参数,一个是x,一个是y。我该如何操作此矩阵,使其符合该函数的参数要求?或者,我编写了自己的互信息函数,它接受一个矩阵,但我不确定它的准确性。它看起来正确吗?
function [mutualinfo] = mutualInformation(counts)
total = sum(counts(:));
pX = sum(counts, 1) ./ total;
pY = sum(counts) ./ total;
pXY = counts ./ total;
[h, w] = size(counts);
mutualinfo = 0;
for row = 1:h
for col = 1:w
mutualinfo = mutualinfo + pXY(row, col) * log(pXY(row, col) / (pX(row)*pY(col)));
end;
end;
end