www.gusucode.com > K聚类分析源码程序 > K聚类分析源码程序/code/mutualinfo.m

    function I = mutualinfo(L1,L2)
%MUTUALINFO Mutual information.
% I = MUTUALINFO(L1,L2) returns the mutual information shared by two N-by-1
% integer arrays of classification data, L1 and L2. 
%
% Copyright (2009) Sandia Corporation. Under the terms of Contract 
% DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains 
% certain rights in this software.

N = length(L1);
k1 = unique(L1);
k2 = unique(L2);
I = 0;

% loop over the unique elements of L1
for i = 1:size(k1,1)
    % loop over the unique elements of L2
    for j = 1:size(k2,1)
        % the mutual probability of two classification indices occurring in
        % L1 and L2
        pij = sum((L1 == k1(i)).*(L2 == k2(j)))/N;
        % the probability of a given classification index occurring in L1
        pi = sum(L1 == k1(i))/N;
        % the probability of a given classification index occurring in L2
        pj = sum(L2 == k2(j))/N;
        if (pij > 0)
            I = I + pij*log(pij/(pi*pj));
        end
    end
end