社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
原文地址:
一、已知真实社区划分结果
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
|
社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)相关推荐
- 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)...
转载请注明出处:http://www.cnblogs.com/bethansy/p/6890972.html 一.已知真实社区划分结果 1.NMI指数,互信息和标准化互信息 具体公式和matlab代码 ...
- 社团划分评估-标准化互信息NMI的Python实现
标准化互信息nmi是评估社团划分质量的一项重要指标,我在网上找了很久没有找到能用的,干脆自己参照公式写了一个,如果对你有帮助,请一键三连. 首先附上论文地址 NMI的公式定义如下: 最后附上代码: # ...
- 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现
标准化互信息NMI计算步骤 Python 实现 代码: ''' 利用Python实现NMI计算''' import math import numpy as np from sklearn impor ...
- 标准化互信息NMI计算步骤及其Python实现
Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 原文地址:https://dreamhomes ...
- python计算互信息_标准化互信息NMI计算步骤及其Python实现
Excellence is a continuous process and not an accident. 卓越是一个持续的过程而不是一个偶然事件. 标准化互信息NMI计算步骤及其Python实现 ...
- 【复杂网络】社团划分结果评估指标:Q、ARI、NMI
社团划分结果评估指标:Q.ARI.NMI 一.模块度Q(Modularity) 模块度也称模块化度量值,是目前常用的一种衡量网络社区结构强度的方法,最早由Mark NewMan提出了.模块度的定义为: ...
- 【机器学习】聚类算法、社区发现
目录 前言 聚类和社区发现 社区发现 聚类算法 聚类-评估指标 社区发现-模块度 前言 最近方向是团案挖掘,关于聚类算法和社区发现,其实之前不怎么了解,最近得补补了. 聚类和社区发现 首先要先明白这两 ...
- 社区发现评价指标Q和NMI讲解、代码实现
社区发现评价指标Q和NMI讲解.代码实现 文章目录 社区发现评价指标Q和NMI讲解.代码实现 模块度Q 标准化互信息NMI 代码实现 参考文献 模块度Q 2004年Newman等人提出了模块度Q,之后 ...
- 【图算法】社区发现算法——Fast unfolding
[图算法]社区发现算法--Fast unfolding 1. 社区划分问题的定义: 2. 社区划分的评价标准: 3. Fast unfolding算法: 3.1 Fast Unfolding算法的基本 ...
最新文章
- HuaWeiCloud_model_arts
- 砸钱抢人抢项目,腾讯字节血拼游戏
- 设置 Linux 的 LD_LIBRARY_PATH 变量
- option标签selected=selected属性失效的问题
- win7系统的CMD窗口切换目录--小计
- linux内存管理方式,简要概括Linux内存管理的方式
- PS—制作 抖音 图标
- 计算机网络原理笔记精整理(汇总)
- windows系统c++/VS2019编译gRPC
- 程序员才是真正的段子手
- forward() takes 2 positional arguments but 3 were given
- 笔记本跑python 90多度会坏吗_cpu温度多高才安全?90度会烧坏吗??
- VmatrixOJ--解码游戏
- 数字版权资源价值日益凸显
- 成都java培训好习惯的养成
- 双心一键获取winsxs的写入权限,解决VC运行库安装error1935错误
- 安卓天天练练(一)不讨巧的绝对布局
- 已解决note: This is an issue with the package mentioned above,not pip.
- 企业用什么留住人才?
- [Django1.5]two-scoops-django-best-practics 笔记四