Взаимная информация между метками классов и функциями. MATLAB

Я надеюсь, что вы можете помочь мне найти проблему здесь. Я хочу реализовать алгоритм взаимной информации на основе лучшей индивидуальной функции. Как часть алгоритма мне нужно вычислить Взаимную информацию (MI) между каждым n вектором пространственных объектов f_j с каждой меткой класса w = {1,2}, которая может быть записана как:

I (f_j: w) = H (w) -H (w |f_j),

где H(w)=- сумма P(w)log2P(w) и условная энтропия

H (w |f_j) = - сумма {w=1:2} p (w |f_j)log2p(w |f_j) = -сумма {w=1:2} сумма {i=1:n}p(ш |f_j, я)log2p(ш |f_j, я).

Тогда p(w|f_j,i) можно вычислить по Байесу:

p(w|f_j,i) = (p (f_j, i | w) P (w)) / p (f_j, i),

где p (f_j, i) = сумма (w=1:2)p(f_j,i|w)P(w).

Условная вероятность может быть оценена с помощью Parzen Windows.

Итак, я реализовал следующий код в MATLAB, используя KSDENSITY для оценки условной вероятности.

Мне нужно знать, реализован ли он ХОРОШО, поскольку у меня значения для ИМ больше 1, что не имеет смысла, поскольку H(w)=1 ( см. Здесь), тогда верхняя граница ИМ также должна быть 1, право?

Пожалуйста, любая ошибка в коде, который вы найдете, может быть очень полезна

Лучший,

N=length(labels);
nf=size(features,2);
nC1=sum(labels);
nC2=N-nC1;
priors=[nC1 nC2]/N;

%class entropy
Hw=-sum(priors.*log2(priors));
%conditional probability p(fji|w), 
%where fji is the jth feature value at ith trial
%Estimation based on gaussian parzen windows.
target=features(labels==1,:); %fj |w==1 (in columns)
nontarget=features(labels~=1,:);%fj |w~=1 (in columns)

for j=1:nf
 for i=1:N

cp1 = ksdensity(target(:,j),features(i,j));
cp2= ksdensity(nontarget(:,j),features(i,j));

%% feature probability p(fji) or marginal likelihood
pf=sum(cp1*priors(1)+cp2*priors(2));
%% conditional probability by bayes rules
pwf1=(cp1*priors(1))/pf;
pwf2=(cp2*priors(2))/pf;
%% conditional Entropy

Hwf=-sum(pwf1*log2(pwf1+eps)+ pwf2*log2(pwf2+eps));
%% Mutual Inf
dMI(i)=Hw-Hwf;
       end
MI(j)=nansum(dMI(:));
end

0 ответов

Другие вопросы по тегам