MATLAB矩阵的相互信息

问题描述

| 我有一个正方形矩阵,表示数据集中同时出现的频率计数。换句话说,行代表特征1的所有可能观察,列代表特征2的可能观察。单元格(x,y)中的数字是同时观察到特征1为x的次数。特征2是y。 我想计算此矩阵中包含的相互信息。 MATLAB具有内置的
@R_777_4045@ion
函数,但它带有2个参数,一个用于x,一个用于y。我将如何处理此矩阵以获取期望的参数? 另外,我编写了自己的采用矩阵的互信息函数,但是不确定其准确性。看起来合适吗?
function [mutualinfo] = mutual@R_777_4045@ion(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
    

解决方法

        我不知道MATLAB中有任何内置的互信息功能。也许您掌握了MathWorks File Exchange或其他一些第三方开发人员提交的文件之一? 我认为您计算
pX
pY
可能有问题。另外,您可以向量化操作,而不必使用for循环。这是您要试用的功能的另一个版本:
function mutualInfo = mutualInformation(counts)

  pXY = counts./sum(counts(:));
  pX = sum(pXY,2);
  pY = sum(pXY,1);

  mutualInfo = pXY.*log(pXY./(pX*pY));
  mutualInfo = sum(mutualInfo(:));

end