社区发现算法问题&&NetworkX&&Gephi
在做东西的时候用到了社区发现,因此了解了一下有关社区发现的一些问题
1,社区发现算法
(1)SCAN:一种基于密度的社团发现算法
Paper: 《SCAN: A Structural Clustering Algorithm for Networks》 Auther: Xiaowei Xu, Nurcan Yuruk, Zhidan Feng, Thomas A. J. Schweiger Conference: SIGKDD 2007
主要概念:
- 节点相似度定义为两个节点共同邻居的数目与两个节点邻居数目的几何平均数的比值(这里的邻居均包含节点自身)。
- 节点的 ϵ - 邻居定义为与其相似度不小于 ϵ 的节点所组成的集合
- 核节点是指 ϵ 邻居的数目大于 μ 的节点。
- 节点 w 是核节点 v 的 ϵ 邻居,那么称从 v 直接可达 w.
- 节点 v 可达 w ,当且仅当存在一个节点链 v1,…,vn∈V,v1=v,vn=w,使得 vi+1 是 从vi 直接可达的。
- 若核节点u可达节点v和节点w,则称节点v和节点w相连.
具体算法:
- 对于每个未分配社团的节点 v ,检查 v 是否是核节点,是核节点则将其直接可达节点分配到一个社团中(社团标号记为该节点),并将其ϵ-邻居放进队列中,重复进行1步骤(类似于对直接可达节点进行DFS)。
- 若 v 不是核节点则将其标志为non-member。
- 最后检查所有的non-menber节点,若其相邻节点存在于两个及以上的社团中,则将其标为hub节点,否则标为outlier。
ALGORITHM SCAN(G=<V, E>, ε, μ) // all vertices in V are labeled as unclassified;
for each unclassified vertex v ∈ V do
// STEP 1. check whether v is a core;
if COREε,μ(v) then
// STEP 2.1. if v is a core, a new cluster is expanded;
generate new clusterID;
insert all x ∈ Nε (v) into queue Q;
while Q ≠ do
y = first vertex in Q;
R = {x ∈ V | DirREACHε,μ(y, x)};
for each x ∈ R do
if x is unclassified or non-member then
assign current clusterID to x;
if x is unclassified then
insert x into queue Q;
remove y from Q;
else
// STEP 2.2. if v is not a core, it is labeled as non-member
label v as non-member;
end for.
// STEP 3. further classifies non-members
for each non-member vertex v do
if (∃ x, y ∈ Γ(v) ( x.clusterID ≠ y.clusterID) then
label v as hub
else
label v as outlier;
end for.
end SCAN.
(2)复杂网络社区结构发现算法-基于python networkx clique渗透算法
Paper: G. Palla, I. Derényi, I. Farkas, and T. Vicsek, “Uncovering the overlapping community structure of complex networks in nature and society,” Nature, vol. 435, pp. 814-818, 2005.
clique渗透算法简介:
对于一个图G而言,如果其中有一个完全子图(任意两个节点之间均存在边),节点数是k,那么这个完全子图就可称为一个k-clique。
进而,如果两个k-clique之间存在k-1个共同的节点,那么就称这两个clique是“相邻”的。彼此相邻的这样一串clique构成最大集合,就可以称为一个社区(而且这样的社区是可以重叠的,即所谓的overlapping community,就是说有些节点可以同时属于多个社区)。下面第一组图表示两个3-clique形成了一个社区,第二组图是一个重叠社区的示意图。
2.NetWorkX安装使用和示例
NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。这里主要介绍clique渗透算法,
(1)安装
首先是软件的下载地址, https://pypi.python.org/pypi/networkx/,我下载的是whl文件
接着就是安装whl文件,具体安装过程网上有好多可以参考这个 windows7下怎样安装whl文件(python),
接着安转完就是看如何执行算法了,我使用了pycharm IDE,我执行的是clique渗透算法,下边是这个算法的主要实现
"""Find k-clique communities in graph using the percolation method. A k-clique community is the union of all cliques of size k that can be reached through adjacent (sharing k-1 nodes) k-cliques.
Parameters: k (int) – Size of smallest clique
cliques (list or generator) – Precomputed cliques (use networkx.find_cliques(G)) Return type: Yields sets of nodes, one for each k-clique community.
"""
import networkx as nx
import sys
import time
def find_community(graph,k):
return list(nx.k_clique_communities(graph,k))
G = nx.Graph()
##testFile=open("F://2.txt","r") ##2-6
testFile=open("F://21.txt","r") ##5,10
for line in testFile:
a=line.strip('\n').split(",")
G.add_edge(a[0],a[1]) for k in range(5,10):
print ("############# k值: %d ################" % k)
start_time = time.clock()
rst_com = find_community(G,k)
end_time = time.clock()
print ("计算耗时(秒):%.3f" % (end_time-start_time))
print ("生成的社区数:%d" % len(rst_com))
print(rst_com)
其中文件的格式是
a,b
c,d
a,c
a,d
3.gephi
Gephi是一款开源免费跨平台基于JVM的复杂网络分析软件, 其主要用于各种网络和复杂系统,动态和分层图的交互可视化与探测开源工具。
参考文献:http://blog.csdn.net/DawnRanger/article/details/51108433
社区发现算法问题&&NetworkX&&Gephi的更多相关文章
- 社区发现算法 - Fast Unfolding(Louvian)算法初探
1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构. 在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏.其中 ...
- 模块度与Louvain社区发现算法
Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 模块度(Modularity) 模块度是评估一个社 ...
- SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法
其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...
- GNN 相关资料记录;GCN 与 graph embedding 相关调研;社区发现算法相关;异构信息网络相关;
最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...
- Top Leaders社区发现算法(top leaders community detection approach in information networks)
一.概念 复杂网络:现实生活中各种系统都可以看做成复杂网络,复杂网络构成包括节点和边,节点是网络中的基本组成单元,节点之间的联系或者关系是网络中的边.例如 电力网络:基站代表节点,基站之间是否互通表示 ...
- LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)
最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 这个算法和Label Propagation 算法不 ...
- 社区发现(Community Detection)算法 [转]
作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现 ...
- 社区发现(Community Detection)算法(转)
作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现 ...
- 社区发现SLPA算法
社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定nc(>=1)个社区C={C1,C2,..., ...
随机推荐
- 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#
#10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...
- Linux下配置Java环境变量
今天开始简单的学习了一下在Linux下安装jdk 写下来总结一下以便后来的查找和复习 首先下载Linux版的jdk我这里使用的jdk1.7:http://download.oracle.com/otn ...
- jquery插件开发规范
一.请给你的代码加上注释 这个世界不存在百分百的完美的jquery插件,注释不止是给别人看.更重要的是给自己看. 你应该把注释当做你代码的一部分,养成随手加注释的习惯,尤其是编写javascript的 ...
- 【Linux】gdb调试core文件
编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场.有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是, ...
- Codeforces Round #198 (Div. 1) B,C 动态规划
比赛时,开了大号去做,算了半天发现不会做A,囧.于是跑去看B,发现很水?于是很快敲完了,但是A不会,没敢交.于是去看C,一直找规律啊,后来总算调了出来,看了一下榜,发现还是算了吧,直接去睡觉了.第二天 ...
- Matlab的GUI参数传递方式总结
MATLAB GUI传递方式 1.全局变量: 2.作为函数的参数传递: 3.利用控件的userdata数据: 4.为handles结构体添加新字段: 5.setappdata函数为句柄添加数据: 6. ...
- nginx二级域名配置
CentOs下nginx二级域名配置 域名配置文件 命名规则:XXX.域名信息.conf 配置文件路径:etc/nginx/conf.d/xxxx.conf 配置文件内容:server { liste ...
- Bootstrap,导航栏点击效果修复(补)
前言: 昨天晚上休息,忘记发博客了.对于学习这件是,还是需要坚持的.想想自建一个Jekyll博客模版还是很兴奋的,话不多说,看正文吧! 关于开发: 先看个Demo吧,点这里.你会发现,点击是没有效果 ...
- Ionic之顺带APP
1:Ionic简介 官方:我们设计ionic来帮助 web 开发人员能够像开发网站一样开发出强大的移动APP应用. ionic是一个html5开发APP的框架,在开发运行效率可以说是最好的H5框架,把 ...
- AndroidTestCase简单使用
1.根据需求创建TestCase类,实现测试用例.此类需继承AndroidTestCase类 public class TestCase extends AndroidTestCase { @Over ...