首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB矩阵的互信息

MATLAB矩阵的互信息
EN

Stack Overflow用户
提问于 2011-05-28 05:44:08
回答 1查看 5.7K关注 0票数 6

我有一个方阵,表示数据集中共现的频率计数。换言之,行表示特征1的所有可能的观测值,列是特征2的可能观测值。单元格(x,y)中的数字是在特征2为y的同时,特征1被观察为x的次数。

我想计算包含在这个矩阵中的互信息。MATLAB有一个内置的information函数,但是它有两个参数,一个是x,一个是y,我该如何操作这个矩阵来获得它期望的参数呢?

或者,我编写了自己的互信息函数,它接受一个矩阵,但我不确定它的准确性。它看起来对吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-28 12:27:33

我不知道MATLAB中有什么内置的互信息函数。也许你拿到了来自MathWorks File Exchange或某个other third-party developer code的提交

我认为你计算pXpY的方式可能有问题。此外,您可以向量化您的操作,而不是使用for循环。下面是您要尝试的另一个版本的函数:

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6158015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档