类标签和功能之间的相互信息。 MATLAB

时间:2017-09-14 08:15:27

标签: matlab feature-selection probability-density upperbound

我希望你能帮助我在这里找到问题。 我想实现基于互信息的最佳个人特征算法。作为算法的一部分,我需要计算每个 n 维度特征向量 f _j之间的互信息(MI),每个类别标签 w = {1,2 } ,可以写成:

  

我( 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 < / strong> _j)= -sum {w = 1:2} sum {i = 1:n} p(w | f_j,i)log2p(w | f_j,i)。

然后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)= sum(w = 1:2)p(f_j,i | w)P(w)。

可以使用Parzen Windows估算条件概率。

因此,我在MATLAB中使用KSDENSITY实现了以下代码来估计条件概率。

我需要知道它是否是WELL实现的,因为我的MI大于1的值,没有任何意义,因为H(w)= 1,(see here)然后是上限MI也应该是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 个答案:

没有答案