最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解。

这个算法和Label Propagation 算法不同的是计算复杂度较高,对每个标签都确定了概率,但是准确性比Label Propagation算法好。

一、概念

相关概念不再累述,详情见前两篇文章

二、算法思路

首先建立一个标签集合,C={1,2,……n},n是节点的数量。标签概率向量Pi(1*n),Pi(c)=节点i对标签c的概率估计,迭代过程中每个节点的对标签c的概率估计等于其邻居节点对标签c的概率估计平均,详见公式(1)

有此可得n*n维标签概率矩阵P(i→j)=[p1,p2,...pn],迭代过程可以用矩阵乘法表示A*P,其中A是网络的邻接矩阵(01矩阵)。这个思路其实可以追溯到eigenvector Centrality算法1,文献1已证明P会收敛下来。就这样就完了吗?并没有看到如何传递标签或者选择标签?

作者做的就是不停地缩放P中元素,然后删除一些概率较小的标签从P中,不停地减少标签个数,知道每个节点的标签序列不再变化,迭代停止,拥有最大概率的标签就是节点所属的社区。具体流程见下

(1)Propagation

初始阶段,每个节点访问邻居概率皆相等,见公式(3),每次迭代即左乘上一阶段的P,得到本阶段节点对每个标签的预估概率

(2)Inflation

根据公式(2)不停地迭代,矩阵中0,计算复元素逐渐被取代,复杂度越来越高,流程(2)和(3)就是为减少复杂度而做的工作。首先利用公式(4)将矩阵中的元素极端处理,使值大的越来越大,值小的越来越小

(3)Cut off

这一阶段就是在公式(4)的基础上进行删除操作,将P中低于r的阈值全都置换成0,最终得到的P参与下一次迭代

(4)Explicit Conditional Update

减少算法的另一个途径就是满足某一条件的节点停止更新,具体操作就是如果节点的最大标签(对n个标签估计概率最高的那个标签)和他的邻居节点最大标签的吻合度高于q(提前给出,一般去0.7左右),那么这个节点就可以停止更新了

(5)Stop Criterion

每个节点的最大评估概率的标签不再变化,迭代停止,具有相同标签的节点归为一个社区

三、参考文献

[1]Poulin R, Boily M C, Mâsse B R. Dynamical systems to define centrality in social networks[J]. Social Networks, 2000, 22(3):187-220.

Dynamical systems to define centrality in social networks

[2]Xie J, Szymanski B K. LabelRank: A stabilized label propagation algorithm for community detection in networks[C]// Network Science Workshop. IEEE, 2013:138-143.

A Stabilized Label Propagation Algorithm for Community Detection in Networks

四、代码(matlab)

代码目前还有一点点问题,后期调试后再更新

function [R,count]=LabelR(A,in,r,q)
% LabelRank LabelRank: " A Stabilized Label Propagation
% Algorithm for Community Detection in Networks "
% Author: YY
% Created on 2017.05.09
% Inputs :
% A : adjacent matrix
% in : Inflation parameter
% : default =2
% q : Conditional Update parameter
% default = 0.7
% r : Cut off parameter
% : default = 0.1
% Output :
% R : community classfication
%%
% Step1 : Propagation
Aori=A;
A=A+eye(length(A));% add selfloop
k=repmat(sum(A,2),[1,length(A)]);
P0=A./k;
Ppre=A*P0;
a=1;
COM={};
count=0;
%%
% Step2: Inflation
while a
Pnow=A*Ppre;
Pin=Pnow.^in ;
k=repmat(sum(Pin,2),[1,length(A)]);
Pnow=Pin./k;
%%
% Step3: Cutoff
index= Pnow<r;
Pnow(index)=0;
%%
% Step4: Explicit Conditional Update
MaNow=max(Pnow,[],2);
MaPre=max(Ppre,[],2);
restart=[];
for i=1:length(A)
gain=0;
Nb=find( Aori(i,:));
MaxI=max(Pnow(i,:));
MaxI=find(Pnow(i,:)==MaxI);
MaxNb=MaNow(Nb);
for k=1:length(Nb)
MaxNbID=find(Pnow(Nb(k),:)==MaxNb(k));
if all(ismember(MaxI,MaxNbID));% 1,2和1;1和1,2;1,2和1,2,4或者1,3,4
gain=gain+1;
end
end
if gain>=q*length(Nb)
restart=[i,restart];
end
end
Pnow(restart,:)=Ppre(restart,:);
%%
% Step5: Stop Criterion
if all(ismember(find(Pnow(i,:)==MaNow(i)),find(Ppre(i,:)==MaPre(i))))
a=0;
end
Ppre=Pnow;
count=count+1;
end
R=Pnow;
end

  

LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)的更多相关文章

  1. A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问

    这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法.改进的地方在两个方面: (1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI ...

  2. Top Leaders社区发现算法(top leaders community detection approach in information networks)

    一.概念 复杂网络:现实生活中各种系统都可以看做成复杂网络,复杂网络构成包括节点和边,节点是网络中的基本组成单元,节点之间的联系或者关系是网络中的边.例如 电力网络:基站代表节点,基站之间是否互通表示 ...

  3. 社区发现算法问题&&NetworkX&&Gephi

    在做东西的时候用到了社区发现,因此了解了一下有关社区发现的一些问题 1,社区发现算法 (1)SCAN:一种基于密度的社团发现算法 Paper: <SCAN: A Structural Clust ...

  4. SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法

    其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...

  5. GNN 相关资料记录;GCN 与 graph embedding 相关调研;社区发现算法相关;异构信息网络相关;

    最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...

  6. 模块度与Louvain社区发现算法

    Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 模块度(Modularity) 模块度是评估一个社 ...

  7. 社区发现算法 - Fast Unfolding(Louvian)算法初探

    1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构. 在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏.其中 ...

  8. 采样方法(二)MCMC相关算法介绍及代码实现

    采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习   版权声明:本文为博主原创文章,遵循CC 4 ...

  9. 标签传播算法(Label Propagation Algorithm, LPA)初探

    0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...

随机推荐

  1. IntelliJ IDEA 2017版 编译器使用学习笔记(一) (图文详尽版);IDE快捷键使用;IDE多行代码同时编写

    IntellJ是一款强大的编译器,那么它有很多实用的功能 一.鼠标点击减少效率,快捷键实现各种跳转 (1)项目之间的跳转 快捷键位置: 操作:首先要有两个项目,然后,在不同窗口打开:如图: 然后使用快 ...

  2. Myeclipse2014的Preview乱码问题

    1.问题图样 2.问题探究:之前的版本没有这个问题,正常服务器部署也没有问题,而且改正了工程的编码设置 JSP的编码方式 3.问题解决:问题还是没有解决,最后找到了方法,似乎是跟本地编码反冲 选中pr ...

  3. SPSS—回归—二元Logistic回归案例分析

    数据分析真不是一门省油的灯,搞的人晕头转向,而且涉及到很多复杂的计算,还是书读少了,小学毕业的我,真是死了不少脑细胞, 学习二元Logistic回归有一段时间了,今天跟大家分享一下学习心得,希望多指教 ...

  4. python编码(四)

    一.预备知识 字符集 1, 常用字符集分类 ASCII及其扩展字符集作用:表语英语及西欧语言.位数:ASCII是用7位表示的,能表示128个字符:其扩展使用8位表示,表示256个字符.范围:ASCII ...

  5. Ubuntu安装教程(双系统)

    经常要重装还不如写个安装教程省的每次都要查 Ubuntu安装教程: win7下安装Linux实现双系统全攻略:https://jingyan.baidu.com/article/c275f6bacc3 ...

  6. SharpMap源代码解析

    1. 简介 SharpMap是基于.net2.0的GIS系统.支持多种.NET开发语言(C# C++ 等).使用属性数据作为注记.符合OpenGIS的简单要素规范(OpenGIS Simple Fea ...

  7. underscore chain

    //可以在面向对象或者函数的风格下使用Underscore_.map([1, 2, 3], function(n){ return n * 2; }); //一般习惯用这种 _([1, 2, 3]). ...

  8. Oracle财务系统常用标准报表

    http://erpoperator.blog.163.com/blog/static/17899637220111181121616/ Oracle财务系统常用标准报表 总账系统 系统报表名 中文译 ...

  9. Java位操作全面总结[ZZ]

    Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千 ...

  10. Alwayson--配置只读请求

    场景:有三台服务器SQLNode131,SQLNode132 ,SQLNode133: 1) 三台服务器加入域DCDemo.com 2) 三台服务器使用端口访问数据库 3) 三台服务器构建故障转移群集 ...