社區發現的3個評估指標:標準化互信息NMI,ARI指標,以及模塊度(modularity)

轉載請註明出處:http://www.cnblogs.com/bethansy/p/6890972.htmlhtml

1、已知真實社區劃分結果網絡

1.NMI指數,互信息和標準化互信息app

 

 

    具體公式和matlab代碼參見博客Python代碼參加C++代碼參見函數

function MIhat = nmi( A, B )
%NMI Normalized mutual information
% http://en.wikipedia.org/wiki/Mutual_information
% http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html
% Author: http://www.cnblogs.com/ziqiao/   [2011/12/15] 

if length( A ) ~= length( B)
    error('length( A ) must == length( B)');
end
if iscolumn(A)
    A=A';
end
if iscolumn(B)
    B=B';
end
total = length(A);
A_ids = unique(A);
A_class = length(A_ids);
B_ids = unique(B);
B_class = length(B_ids);
% Mutual information
idAOccur = double (repmat( A, A_class, 1) == repmat( A_ids', 1, total )); %獲得節點社區矩陣N*C
idBOccur = double (repmat( B, B_class, 1) == repmat( B_ids', 1, total ));
idABOccur = idAOccur * idBOccur';
Px = sum(idAOccur') / total;
Py = sum(idBOccur') / total;
Pxy = idABOccur / total;
MImatrix = Pxy .* log2(Pxy ./(Px' * Py)+eps);
MI = sum(MImatrix(:));
% Entropies
Hx = -sum(Px .* log2(Px + eps),2);
Hy = -sum(Py .* log2(Py + eps),2);
%Normalized Mutual information
MIhat = 2 * MI / (Hx+Hy);


% MIhat = MI / sqrt(Hx*Hy); another version of NMI

end

 重疊社區NMI指數可參照博客工具

2.ARI指數ui

文獻來源:【2015浙江大學博士】複雜網絡節點影響力模型及其應用_王益文lua

       ARI原理介紹,ARI MATLAB代碼下載 ,ARI評估指數包含在EDA工具箱中,EDA工具箱介紹.net

   ARI的評估函數在EDA的工具箱中,調用函數甚多,就不貼出來了。本身下載EDA工具箱,放在matlab\toolbox文獻夾下,設置完路徑便可調用adjrand()3d

2、不知道真實社區劃分狀況orm

1.模塊度Q(社區內的邊儘量多,而社區之間的邊儘可能地少)

 

 

     Q就是模塊度,模塊度越大則代表社區劃分效果越好。Q值的範圍在[-0.5,1),論文表示當Q值在0.3~0.7之間時,說明聚類的效果很好

具體推導流程參見博客,這篇博客推導流程很是詳細,並且使用矩陣運算減小了運算複雜度。

    代碼以下,A是圖的鄰接矩陣, a是n*1的向量,即每一個節點所屬社區。例如[1 2 1 1 2],表示節點一、三、4屬於社區1,節點二、5屬於社區5

 

function [Q1]=modul(A,a)
one = 1:length(A);
a = [one' a];
%  創建節點社區矩陣
a = accumarray(a,1);
a = a(:,any(a));%  刪除A中全0的列
%  進行網絡A模塊度Q1運算
m = sum(sum(A))/2;
k = sum(A,2);
B = A - (repmat(k,[1,size(A,1)]) .* repmat(k',[size(A,1),1])) / (2*m);
Q1 = 1/(2*m) .* trace(a'*B*a);
end
相關文章
相關標籤/搜索