社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
来源:互联网 发布:天阳宏业怎么样知乎 编辑:程序博客网 时间:2024/06/06 00:58
原文地址:
一、已知真实社区划分结果
1.NMI指数,互信息和标准化互信息
具体公式和matlab代码参见博客,Python代码参加,C++代码参见
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
2.ARI指数
文献来源:【2015浙江大学博士】复杂网络节点影响力模型及其应用_王益文
ARI原理介绍,ARI MATLAB代码下载 ,ARI评估指数包含在EDA工具箱中,EDA工具箱介绍
ARI的评估函数在EDA的工具箱中,调用函数甚多,就不贴出来了。自己下载EDA工具箱,放在matlab\toolbox文献夹下,设置完路径即可调用adjrand()
二、不知道真实社区划分情况
1.模块度Q(社区内的边尽可能多,而社区之间的边尽量地少)
Q就是模块度,模块度越大则表明社区划分效果越好。Q值的范围在[-0.5,1),论文表示当Q值在0.3~0.7之间时,说明聚类的效果很好
具体推导流程参见博客,这篇博客推导流程非常详细,而且使用矩阵运算减少了运算复杂度。
代码如下,A是图的邻接矩阵, a是n*1的向量,即每个节点所属社区。例如[1 2 1 1 2],表示节点1、3、4属于社区1,节点2、5属于社区5
1
2
3
4
5
6
7
8
9
10
11
12
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
阅读全文
0 0
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
- 社区发现评估指标-NMI
- 社团划分结果评估指标:Q、ARI、NMI
- 社区发现中模块度(Modularity )的计算方法(转)
- 标准化互信息NMI的实现源码。
- NMI(标准化互信息) python实现
- 聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)
- 标准化互信息NMI计算步骤及其Python实现
- 评估指标
- 学习笔记(4)-社区发现评价指标
- 评估酒店营销效果的12个重要KPI指标
- 可靠度及其评估指标
- 发现几个不错的指标
- ARI聚类效果评价指标
- 不平衡学习算法的评估指标
- 【总结】分类、聚类的评估指标
- 【复杂网络系列】模块度(Modularity )的计算方法
- spark 评估指标
- OpenCV-Python教程(10、直方图均衡化)
- JZOJ 100035【NOIP2017提高A组模拟7.10】区间
- Session共享的几种不同实现方案
- 排序算法——折半插入排序
- 关于Sql Server JDBC 4.0驱动在maven中引入失败的问题
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
- Android Studio SDK Manager 无法更新
- Kibana(五):调试模式无法启动的解决办法
- Unity 开发日记/教程 俄罗斯方块 (二) 搭建方块UI和生成方块.
- pykafka简单应用
- Ubuntu16.04 和 Win7 双系统启动顺序更改
- 文件copy
- 数据结构之栈的定义及python实现
- 线性表之顺序存储