我有一个方形矩阵,它表示数据集中同时出现的频率计数。换言之,行表示特征1的所有可能观察,列是特征2的可能观察。单元格中的数字(x,y)是在特征2为y的同时观察到特征1为x的次数。
我想计算这个矩阵中包含的相互信息。MATLAB有一个内置的信息
函数,但它需要两个参数,一个用于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