Tengo una matriz cuadrada que representa los recuentos de frecuencia de co-ocurrencias en un conjunto de datos. En otras palabras, las filas representan todas las observaciones posibles de la característica 1, y las columnas son las posibles observaciones de la característica 2. El número en la celda (x, y) es el número de veces que se observó que la característica 1 era x al mismo tiempo la característica 2 era y.Información mutua de MATLAB Matrix
Quiero calcular la información mutua contenida en esta matriz. MATLAB tiene una función incorporada information
, pero toma 2 argumentos, uno para xy uno para y. ¿Cómo manipularía esta matriz para obtener los argumentos que espera?
Como alternativa, escribí mi propia función de información mutua que toma una matriz, pero no estoy seguro de su precisión. ¿Se ve bien?
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
Esta función devuelve los mismos valores que mi original, por lo que creo que son equivalentes. Aún así, el tuyo es más elegante. – Colin