I was well beaten myself,and i am better for it.
我自己也被被打败过,但我因此变得更好。
更新:社区检测中重叠模块度计算方法详解及其 Python 实现
社团检测度量指标
假设对于图 G ( V , E ) G(V,E) G(V,E)有两种划分 X = ( X 1 , X 2 , . . . , X n X ) X=(X_1,X_2,...,X_{n_X}) X=(X1,X2,...,XnX)和 Y = ( Y 1 , Y 2 , . . . , Y n Y ) Y=(Y_1,Y_2,...,Y_{n_Y}) Y=(Y1,Y2,...,YnY), n X , n Y n_X,n_Y nX,nY分别是划分 X , Y X,Y X,Y得到的社团的个数。用 n i X , n j Y n_i^X,n_j^Y niX,njY表示社团 X i , Y j X_i,Y_j Xi,Yj中顶点的数量, n i j n_{ij} nij表示社团 X i , Y j X_i,Y_j Xi,Yj中重叠的顶点个数: n i j = ∣ X i ∩ Y j ∣ n_{ij}=|X_i\cap Y_j| nij=∣Xi∩Yj∣
根据不同的计算方法,社团检测指标大概可以分为以下三类:
- 基于成对计数(Based on pair counting)
- 基于聚类匹配(Based on cluster matching)
- 基于信息论(Based on information theory)
基于成对计数指标
基于成对计数度量取决于两种划分 X , Y X,Y X,Y中将顶点对划分在同一个社团的顶点对的数量。符号 a 11 a_{11} a11表示两种划分中顶点对在同一个社团中的顶点对的数量, a 01 ( a 10 ) a_{01}(a_{10}) a01(a10)表示在顶点对在划分 X X X中在同一个社团中但是在划分 Y Y Y中在不同社团中的顶点对的数量, a 00 a_{00} a00表示两种划分中顶点对都不在同一个社团中顶点对的数量。
Wallace 提出两种指标
W I = a 11 ∑ k n k X ( n k X − 1 ) / 2 ; W I I = a 11 ∑ k n k Y ( n k Y − 1 ) / 2 W_I=\frac{a_{11}}{\sum_kn_k^X(n_k^X-1)/2} ;W_{II}=\frac{a_{11}}{\sum_kn_k^Y(n_k^Y-1)/2} WI=∑knkX(nkX−1)/2a11;WII=∑knkY(nkY−1)/2a11
W I , W I I W_I,W_{II} WI,WII表示划分 X X X中顶点对在同一个社团并且在划分 Y Y Y中也在同一个社团中的概率,反之亦然。这两种指标是对称的但是数值不同,一般使用 W I , W I I W_I,W_{II} WI,WII的平均值作为度量标准。
兰德指数(Rand Index)
兰德指数 是两种划分 X , Y X,Y X,Y中顶点对正确分类的数量(顶点对在同一个社团中或者在不同的社团中)与总的顶点对的数量的比值,可以使用下式表示:
R I ( X , Y ) = a 11 + a 00 a 11 + a 01 + a 10 + a 00 = a 11 + a 00 C 2 n G RI(X,Y)=\frac{a_{11}+a_{00}}{a_{11}+a_{01}+a_{10}+a_{00}}=\frac{a_{11}+a_{00}}{C_2^{n_G}} RI(X,Y)=a11+a01+a10+a00a11+a00=C2nGa11+a00
其中 C 2 n G C_2^{n_G} C2nG是图中可以组成的总顶点对对数,RI取值范围为[0,1],值越大意味着两种划分结果越吻合。
对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度:
A R I = R I − E [ R I ] m a x ( R I ) − E [ R I ] ARI=\frac{RI-E[RI]}{max(RI)-E[RI]} ARI=max(RI)−E[RI]RI−E[RI]
可参考Wiki上详细的ARI计算公式 ,ARI取值范围为[−1,1],值越大意味着两种划分结果越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。
杰卡德指数(Jaccard Index)
杰卡德指数是两种划分 X , Y X,Y X,Y中都在同一个社团中顶点对的数量和顶点对至少在一种划分的社团中的比值,可以使用下式来表示:
J ( X , Y ) = a 11 a 11 + a 01 + a a 10 J(X,Y)=\frac{a_{11}}{a_{11}+a_{01}+a_{a_{10}}} J(X,Y)=a11+a01+aa10a11
对于其改进形式可以参考这篇论文Comparing clusterings—an information based distance
基于聚类匹配指标
基于类匹配的度量方法是找出不同划分中社团的重叠性。
分类错误率(Classification Error)
计算公式定义如下:
H ( X , Y ) = 1 − 1 n max π ∑ k = 1 n X n k π ( k ) H(X,Y)=1-\frac{1}{n}\max_\pi\sum_{k=1}^{n_X}n_{k\pi(k)} H(X,Y)=1−n1πmaxk=1∑nXnkπ(k)
其中 π \pi π是 X → Y {X}\rightarrow {Y} X→Y的单射函数,其中 m a x max max是考虑到所有的单射函数集合 π {\pi} π,按照这种计算方式就可以考虑到两种划分的最大的重叠性。具体定义信息可以参考论文An Experimental Comparison of Model-Based Clustering Methods
Normalized Van Dongen Metric
计算公式定义如下:
D ( X , Y ) = 1 − 1 2 n [ ∑ k = 1 n X max k ′ n k k ′ + ∑ k ′ = 1 n Y max k n k k ′ ] D(X,Y)=1-\frac{1}{2n}[\sum_{k=1}^{n_X}\max_{k^{'}}n_{kk^{'}}+\sum_{k^{'}=1}^{n_Y}\max_{k}n_{kk^{'}}] D(X,Y)=1−2n1[k=1∑nXk′maxnkk′+k′=1∑nYkmaxnkk′]
上面公式是对分类错误率公式的改进,具体信息可以参考论文Performance criteria for graph clustering and Markov cluster experiments
基于信息论指标
基于信息论的度量指标根据香农信息熵理论进行计算不同划分之间的相关性。下面只简单介绍标准化信息,具体计算标准可以参考论文Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance
互信息(Mutual Information)
互信息(Mutual Information)是用来衡量两个数据分布的吻合程度。假设 X X X与 Y Y Y是对N个顶点的划分情况,则两种划分的熵(熵表示的是不确定程度)分别为:
H ( X ) = − ∑ i = 1 ∣ X ∣ P ( i ) l o g ( P ( i ) ) ; H ( Y ) = − ∑ j = 1 ∣ Y ∣ P ′ ( j ) l o g ( P ′ ( j ) ) H(X)=-\sum_{i=1}^{|X|}P(i)log(P(i));H(Y)=-\sum_{j=1}^{|Y|}P^{'}(j)log(P^{'}(j)) H(X)=−i=1∑∣X∣P(i)log(P(i));H(Y)=−j=1∑∣Y∣P′(j)log(P′(j))
其中 P ( i ) = ∣ X i ∣ / N , P ′ ( j ) = ∣ Y j ∣ / N P(i)=|X_i|/N,P^{'}(j)=|Y_j|/N P(i)=∣Xi∣/N,P′(j)=∣Yj∣/N.
那么 X , Y X,Y X,Y之间的互信息 M I MI MI可以定义如下:
M I ( X , Y ) = ∑ i = 1 ∣ X ∣ ∑ j = 1 ∣ Y ∣ P ( i , j ) l o g ( P ( i , j ) P ( i ) P ′ ( j ) ) MI(X,Y)=\sum_{i=1}^{|X|}\sum_{j=1}^{|Y|}P(i,j)log(\frac{P(i,j)}{P(i)P^{'}(j)}) MI(X,Y)=i=1∑∣X∣j=1∑∣Y∣P(i,j)log(P(i)P′(j)P(i,j))
其中 P ( i , j ) = ∣ X i ∩ Y j ∣ / N P(i,j)=|X_i\cap Y_j|/N P(i,j)=∣Xi∩Yj∣/N.上式可以用集合的形式表示如下:
M I ( X , Y ) = ∑ i = 1 ∣ X ∣ ∑ j = 1 ∣ Y ∣ ∣ X i ∩ Y j ∣ N l o g ( N ∣ X i ∩ Y j ∣ ∣ X i ∣ ∣ Y j ∣ ) MI(X,Y)=\sum_{i=1}^{|X|}\sum_{j=1}^{|Y|}\frac{|X_i\cap Y_j|}{N}log(\frac{N|X_i\cap Y_j|}{|X_i||Y_j|}) MI(X,Y)=i=1∑∣X∣j=1∑∣Y∣N∣Xi∩Yj∣log(∣Xi∣∣Yj∣N∣Xi∩Yj∣)
标准化互信息(Normalized Mutual Information)
标准化信息定义如下:
N M I ( X , Y ) = M I ( X , Y ) H ( X ) H ( Y ) 或 者 N M I ( X , Y ) = 2 M I ( X , Y ) H ( X ) H ( Y ) NMI(X,Y)=\frac{MI(X,Y)}{\sqrt{H(X)H(Y)}}或者NMI(X,Y)=\frac{2MI(X,Y)}{H(X)H(Y)} NMI(X,Y)=H(X)H(Y)MI(X,Y)或者NMI(X,Y)=H(X)H(Y)2MI(X,Y)
具体计算过程可以参考我的另一篇博客:标准化互信息NMI计算步骤及其Python实现
调整的互信息(Adjusted Mutual Information)
与 A R I ARI ARI调整方法相似, A d j u s t e d I n d e x = I n d e x − E x p e c t e d I n d e x M a x I n d e x − E x p e c t e d I n d e x AdjustedIndex=\frac{Index-ExpectedIndex}{MaxIndex-ExpectedIndex} AdjustedIndex=MaxIndex−ExpectedIndexIndex−ExpectedIndex,那么调整的互信息可以表示为如下形式:
A M I = M I − E [ M I ] m a x ( H ( X ) , H ( Y ) ) − E [ M I ] AMI=\frac{MI-E[MI]}{max(H(X),H(Y))-E[MI]} AMI=max(H(X),H(Y))−E[MI]MI−E[MI]
具体计算形式可以参考Wikipedia上Adjusted mutual information
其它相关指标
以上度量指标适用于人工生成的数据集,对于真实网络的数据集一般采用以下两种度量指标:
非重叠社团划分质量的模块度函数Q
模块度的主要介绍可以参考Wiki上Modularity networks,以下写出主要的理解。
设 A A A为网络的邻接矩阵, c v , c w c_v,c_w cv,cw分别为点 v , w v,w v,w所在的两个社团,社团内部的边数和网络中总边数的比例为:
∑ v w A v w δ ( c v , c w ) ∑ v w A v w = 1 2 m ∑ v w δ ( c v , c w ) \frac{\sum_{vw}A_{vw}\delta(c_v,c_w)}{\sum_{vw}A_{vw}}=\frac{1}{2m}\sum_{vw}\delta(c_v,c_w) ∑vwAvw∑vwAvwδ(cv,cw)=2m1vw∑δ(cv,cw)
函数 δ \delta δ为克罗内克函数,m为网络中的总边数。
模块度的大小定义如下:社团内部的总边数和网络中的总边数的比例减去一个期望值,该期望值是将网络设定为随机网络时同样的社团分配所形成的社团内部的总边数和网络中总边数的比例的大小,模块度计算公式定义如下:
Q = 1 2 m ∑ v w [ A v w − k v k w 2 m ] δ ( c v , c w ) Q=\frac{1}{2m}\sum_{vw}[A_{vw}-\frac{k_vk_w}{2m}]\delta(c_v,c_w) Q=2m1vw∑[Avw−2mkvkw]δ(cv,cw)
其中, k v k_v kv表示节点 v v v的度。设 e i j e_{ij} eij表示社团 i i i和社团 j j j内部边数目的和与总边数的比例, a i a_i ai表示社团 i i i内部的点所关联的所有边的数目与总边数的比例,可以用一下公式来表示:
e i j = 1 2 m ∑ v w A v w δ ( c v , i ) δ ( c w , j ) ; a i = 1 2 m ∑ v k v δ ( c v , i ) e_{ij}=\frac{1}{2m}\sum_{vw}A_{vw}\delta(c_v,i)\delta(c_w,j);a_i=\frac{1}{2m}\sum_vk_v\delta(c_v,i) eij=2m1vw∑Avwδ(cv,i)δ(cw,j);ai=2m1v∑kvδ(cv,i)
可以根据上述定义简化Q的计算,假设网络分为n个社团,Q的计算公式可以进一步推导:
Q = 1 2 m ∑ v w [ A v w − k v k w 2 m ] δ ( c v , c w ) Q=\frac{1}{2m}\sum_{vw}[A_{vw}-\frac{k_vk_w}{2m}]\delta(c_v,c_w) Q=2m1∑vw[Avw−2mkvkw]δ(cv,cw)
= ∑ i [ 1 2 m ∑ v w A v w δ ( c v , i ) δ ( c w , i ) − 1 2 m ∑ v k v δ ( c v , i ) 1 2 m ∑ w k w δ ( c w , i ) ] =\sum_i[\frac{1}{2m}\sum_{vw}A_{vw}\delta(c_v,i)\delta(c_w,i)-\frac{1}{2m}\sum_vk_v\delta(c_v,i)\frac{1}{2m}\sum_wk_w\delta(c_w,i)] =∑i[2m1∑vwAvwδ(cv,i)δ(cw,i)−2m1∑vkvδ(cv,i)2m1∑wkwδ(cw,i)]
= ∑ i ( e i i − a i 2 ) =\sum_i(e_{ii}-a_i^2) =∑i(eii−ai2)
在进行每次划分的时候计算Q值,Q取值最大的时候则是此网络较理想的划分。Q值的范围在0-1之间,Q值越大说明网络划分的社区结构准确度越高,在实际的网络分析中,Q值的最高点一般出现在0.3-0.7之间。
重叠社团划分质量的模块度函数 EQ
由模块度改进的指标EQ可用于度量重叠社团的划分结果,具体推导过程可以参考论文Extending the definition of modularity to directed graphs with overlapping communities,以下给出具体的定义公式:
E Q = 1 2 m ∑ i ∑ u ∈ c i , v ∈ c i 1 Q u Q v [ A u v − k u k v 2 m ] EQ=\frac{1}{2m}\sum_i\sum_{u\in c_i,v\in c_i}\frac{1}{Q_uQ_v}[A_{uv}-\frac{k_uk_v}{2m}] EQ=2m1i∑u∈ci,v∈ci∑QuQv1[Auv−2mkukv]
其中 Q u Q_u Qu表示节点u所属的社团, A A A为网络的邻接矩阵, k u k_u ku为节点 u u u的度, m m m表示网络中的总边数。