社区发现SLPA算法

社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏。

设图G=G(V,E),所谓社区发现是指在图G中确定nc(>=1)个社区C={C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖。

若任意两个社区的顶点集合的交际均为空,则称C为非重叠社区(disjoint communities);否则称为重叠社区(overlapping communities)。

 

SLPA(Speaker-listener Label Propagation Algorithm)算法是一种社区发现算法,它是对LPA算法(标签传播算法)的拓展。

算法思想如下:

输入参数:迭代次数T,满足社区次数要求的阈值r

输出参数:每一个节点的社区分布

(1)首先,每一个节点的存储器中初始化一个唯一的标签。

(2)然后,重复进行以下步骤,直到达到最大迭代T:

  a. 选择一个节点作为监听器;

  b. 所选节点的每个邻居随机选择概率正比于该标签在其存储器中的出现频率的标签,把所选择的标签(speakervote)发送到听众(listener);

  c. 监听器增加接收到的最流行的标签到内存。

(3)最后,根据在存储器里的标签和阈值r,后处理被用于输出社区。

 1 public int speakerVote() {
 2         //Run through each element in the map to create a cumulative distribution
 3         Set<Integer> communityIds = communityDistribution.keySet();
 4         ArrayList<Integer> communities = new ArrayList<Integer>();
 5         ArrayList<Integer> cumulativeCounts = new ArrayList<Integer>();
 6         
 7         int sum=-1;
 8         for (Integer comm: communityIds) {
 9             sum += communityDistribution.get(comm);
10             communities.add(comm);
11             cumulativeCounts.add(sum);
12         }
13     
14         //Generate a random integer in the range [0,sum)
15         int rand = RandomNumGenerator.getRandomInt(sum+1);
16         
17         //Find the index of first value greater than rand in cumulativeCounts
18         int i=0;
19         for (i=0; i<cumulativeCounts.size(); i++) {
20             if (cumulativeCounts.get(i)>=rand) 
21                 break;
22         }
23             
24         //Return the corresponding community
25         return communities.get(i);
26     }
SpeakerVote
 1 public void updateLabels(Integer userId){
 2         Set<DefaultWeightedEdge> incomingEdges = userNodegraph.getGraph().incomingEdgesOf(userId);//获取所有该顶点的入度顶点
 3         Map<Integer, Integer> incomingVotes = new HashMap<Integer, Integer>();//所有speaker顶点投票情况
 4         
 5         //For each vertex V with an incoming edge to the current node
 6         for ( DefaultWeightedEdge edge: incomingEdges ) {
 7             int speakerId = userNodegraph.getGraph().getEdgeSource(edge);
 8             UserNode speakerNode = userNodegraph.getNodeMap().get(speakerId);
 9             
10             int votedCommunity = speakerNode.speakerVote();
11             int votedCommunitycount = 1;
12             if ( incomingVotes.containsKey(votedCommunity)){
13                 votedCommunitycount += incomingVotes.get(votedCommunity);
14             } 
15             incomingVotes.put(votedCommunity, votedCommunitycount);
16         }
17         
18         //Find the most popular vote
19         Iterator<Entry<Integer, Integer>> it = incomingVotes.entrySet().iterator();
20         int popularCommunity=-1;
21         int popularCommunityCount=0;
22         while ( it.hasNext()) {
23             Entry<Integer, Integer> entry = it.next();
24             if ( entry.getValue() > popularCommunityCount ) {
25                 popularCommunity = entry.getKey();
26                 popularCommunityCount = entry.getValue();
27             }
28         }
29         //Update community distribution of the current node by 1
30         UserNode currentNode = userNodegraph.getNodeMap().get(userId);
31         currentNode.updateCommunityDistribution(popularCommunity, 1);
32     }
listenerUpdateCommunity

 注:源代码请联系limin12891@163.com.

 

 

转载于:https://www.cnblogs.com/limin12891/p/5660350.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bucket sort sample sort 并行_MOOSE: 实现大规模并行多物理场仿真(二)

转载自wx公众号&#xff1a;CS guy来源于文章 MOOSE: Enabling massively parallel multiphysics simulation网址&#xff1a;https://www.sciencedirect.com/science/article/pii/S2352711019302973?via%3Dihub2.软件说明2.1 软件架构MOOSE旨在促进创建FEM工具&#xff0c;以…

iphone数据迁移到新iphone_Mac专业iPhone数据恢复软件----Omni Recover

Omni Recover mac是一个MacOS上的专业iPhone数据恢复软件&#xff0c;Omni Recover Mac版可以检索多达20多种类型的iOS数据&#xff0c;支持从iDevices恢复丢失的数据&#xff0c;轻松帮你找回数据&#xff0c;赶紧下载试试Omni Recove 激活版吧&#xff01;软件介绍Omni Recov…

文档根元素 project 必须匹配 doctype 根 null_快评:全新MG5上市6.49万起,但买它必须准备10万?...

原标题&#xff1a;快评&#xff1a;全新MG5上市万起&#xff0c;但买它必须准备10万&#xff1f;上汽荣威新推出了一款A级轿车——MG5&#xff0c;售价万。上市前&#xff0c;我曾经在网上见过这款车的造型图&#xff0c;很有好感。所以当看到它的最低售价只有万时&#xff0c…

关于oracle sql语句查询时表名和字段名要加双引号的问题

oracle初学者一般会遇到这个问题。用navicat可视化创建了表&#xff0c;可是就是不能查到&#xff01;后来发现②语句可以查询到①select * from user; 但是&#xff0c;我们如果给user加上双引号就可以查到了&#xff01; ②select * from "user"; 难道oracle跟mysq…

模拟退火算法(代码可直接运行)

模拟退火算法&#xff08;SA&#xff09; 模拟退火是很经典的算法&#xff0c;针对大多数模型、应用&#xff0c;受限于SA运行时间长等特点&#xff0c;已不能直接应用SA&#xff0c;这样的算法值得去改进&#xff0c;我试图找一些缩短运行时间的方法&#xff0c;已经在测试&a…

fedora 33 topbar_最新!新增确诊病例33例,其中本土病例1例

【最新&#xff01;新增确诊病例33例&#xff0c;其中本土病例1例】11月8日0-24时&#xff0c;31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例33例&#xff0c;其中境外输入病例32例(上海13例&#xff0c;陕西6例&#xff0c;广东4例&#xff0c;四川4例&#xff0…

javaweb基础(40)_jdbc框架

一、元数据介绍 元数据指的是"数据库"、"表"、"列"的定义信息。 1.1、DataBaseMetaData元数据 Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象。  DataBaseMetaData对象的常用方法&#xff1a; getUR…

matlab运动目标检测

matlab运动目标检测最近做了运动目标检测的程序和GUI实现&#xff0c;参考了挺多博客&#xff0c;很多都是对数据格式要求比较高或者存在一定的bug&#xff08;有些是因为版本不同&#xff09;&#xff0c;进行了一些修改。&#xff08;2014以后的matlab都能运行&#xff09;&a…

st-link v2怎么连接_三相交流电源的三角形和星形连接

相交流电是电能的一种输送形式&#xff0c;简称为三相电。三相交流电源&#xff0c;是由三个频率相同、振幅相等、相位依次互差120的交流电势组成的电源。我国发电厂和电力网生产、输送和分配的交流电都是三相交流电。1、三角形连接将三相电源的三个线圈&#xff0c;以一个线圈…

matlab程序聚类预测机器学习

matlabmatlab程序代做&#xff0c;数据挖掘&#xff0c;聚类&#xff0c;预测&#xff0c;分类&#xff0c;优化&#xff0c;建模。降重&#xff0c;降低重复率&#xff0c;24h出结果&#xff0c;最低1%重复。 机器学习&#xff0c;深度学习&#xff0c;神经网络代写&#xff0…

友益文书类似软件_团队成员分享 | 港中文翻译学姐:硬件不够,软件来凑;心之所愿,无所不能...

B学姐硬件不行的同学一定要努力提高自己对申请专业上的实习经验。饱腹诗书不够&#xff0c;也要有亲身实践后的体悟&#xff0c;这很加分。多对该行业背景现状进行思考&#xff0c;老师都喜欢有思想的学生&#xff0c;在后期面试也会给你带来惊喜。在读专业&#xff1a;港中文M…

iOS开发技巧,细节(二)

1.常量名称最好用static标识&#xff0c;例如下面的代码&#xff0c;包括其他一些只需要定义一次&#xff0c;之后不需要变化的变量也最好使用static static NSString *CellIdentifier "Cell"; 2.当设置视图控制器需要接受通知时&#xff0c;需要在dealloc取消监听 …

matlab支持向量机程序代做

matlab&#xff0c;支持向量机 回归&#xff0c;分类&#xff0c;都可以。另外决策树&#xff0c;神经网络都可以私人订制 **线性svm&#xff0c;二次svm&#xff0c;cubic svm

c++ qt5范例开发大全_使用yocto工具编译qt5.9.6总结

运行平台&#xff1a;OKMX6DL-C编译平台&#xff1a;Ubuntu 14.04.6 LTS编译工具&#xff1a;arm-poky-linux-gnueabi-gcc&#xff08;gcc version 5.3.0 (GCC) &#xff09;qt源码&#xff1a;qt-everywhere-opensource-src-5.9.6.tar.xz参考&#xff1a;嵌入式开发之Qt-5.9.6…

Android堆栈分析

在开发中&#xff0c;与界面跳转联系比较紧密的概念是Task&#xff08;任务&#xff09;和Back Stack&#xff08;回退栈&#xff09;。activity的启动模式会影响Task和Back Stack的状态&#xff0c; 进而影响用户体验。除了启动模式之外&#xff0c;Intent类中定义的一些标志&…

如何写一篇MBA论文-涉及matlab建模

如何写一篇MBA论文&#xff1f; 知乎 19 个回答方向&#xff0c;具体一点&#xff0c;不要太大。战略管理、薪酬管理、绩效考核、营销管理&#xff0c;客户关系管理、供应链管理、供应商选择与评价&#xff0c;库存问题。。论文模式第1章&#xff1a;绪论第2章&#xff1a;现状…

什么电脑的牌子好用_扬州诚招电动牙刷代理有什么牌子比较好用

扬州诚招电动牙刷代理有什么牌子比较好用&#xff0c;珈蓝电器实惠物美&#xff0c;为人类口腔事业的发展再创新贡献。扬州诚招电动牙刷代理有什么牌子比较好用&#xff0c; 很多人说电动牙刷是懒人神器&#xff0c; 但偷懒可以&#xff0c;口腔清洁效果可不能因此打折。电动牙…

360浏览器打不开网页_苹果移动端、PC端safari浏览器打不开网页的解决方案!

你还在为苹果自带的safari浏览器打不开网页而苦恼吗&#xff0c;接下来的答案会帮助你解决苦恼。苹果自带safari浏览器的设备分为两种&#xff1a;移动端、PC端。因此不同设备出现safari浏览器打不开网页的情况需要具体问题具体分析。最简单的问题往往最容易被我们忽视&#xf…

台式电脑如何截屏_买台式电脑如何避免成为被宰羔羊(一)

台式电脑的优点是很多的&#xff0c;比如价格便宜(和游戏本比起来)&#xff0c;比如性能发挥稳定(因为不受限于散热)&#xff0c;比如屏幕大看起来更舒服。但是和笔记本比起来&#xff0c;台式的水就非常深了&#xff0c;无论是线下实体店&#xff0c;还是线上网店&#xff0c;…