Взаимная информация MATLAB Matrix

У меня есть квадратная матрица, которая представляет собой подсчет частот одновременного появления в наборе данных. Другими словами, строки представляют все возможные наблюдения признака 1, а столбцы - возможные наблюдения признака 2. Число в ячейке (x, y) - количество раз, когда объект 1 наблюдался как x, в то время как объект 2 был y.

Я хочу вычислить взаимную информацию, содержащуюся в этой матрице. MATLAB имеет встроенную функцию информации , но она принимает 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
6
задан gnovice 12 May 2017 в 05:00
поделиться