python隶属关系图模型:基于模型的网络中密集重叠社区检测方法
隶属关系图模型 是一种生成模型,可通过社区联系产生网络。下图描述了一个两方社区隶属关系图和一个网络的示例(图1)。
- 图1.左:两方社区关系图(圆形节点表示三个社区,正方形节点代表网络的节点),右:AGM生成的网络,社区关系图在左侧
当我们使用适合于实际网络的 合成网络时,合成网络具有与真实网络非常相似的特征(图2)。
- 图2.边缘概率是Orkut网络中常见社区成员数量的函数 。
进行社区检测
如果用户指定了用户要检测的社区数量,则 会找到相应的社区数量。如果用户未假定某个概率,则 使用(1 / N ^ 2),其中N是图中的节点数。
例子
我们展示了一些由隶属关系图模型和基础网络检测到的社区的示例。
图创建
如何创建和使用有向图的示例:
# create a graph PNGraph G1 = snap.TNGraph.New() G1.AddNode(1) G1.AddNode(5) G1.AddNode(32) G1.AddEdge(1,5) G1.AddEdge(5,1) G1.AddEdge(5,32)
用于保存和加载图形的 代码如下所示:
# generate a network using Forest Fire model G3 = snap.GenForestFire(1000, 0.35, 0.35) # save and load binary FOut = snap.TFOut("test.graph") G3.Save(FOut) FOut.Flush() FIn = snap.TFIn("test.graph") G4 = snap.TNGraph.Load(FIn) # save and load from a text file snap.SaveEdgeList(G4, "test.txt", "Save as tab-separated list of edges") G5 = snap.LoadEdgeList(snap.PNGraph, "test.txt", 0, 1)
- 悲惨世界中的人物网络中的社区。不共享社区的两个节点之间的边缘概率设置为0.01,以检测更紧凑的社区。
- NCAA橄榄球队网络中的社区(通过将两个不共享社区的节点的边缘概率设置为0.1的5个试验的最佳结果。圆形区域表示检测到的社区,节点颜色表示NCAA会议。):
下载资料
我们提供6个数据集,每个数据集都有一个网络和一组真实的社区。真实社区是可以从数据中定义和标识的社区。每个数据集的网页都描述了我们如何识别数据集中的真实社区。
数据集:
| 类型 | 节点数 | 边缘 | 社区 | 描述 |
| 无向,社区 | 3,997,962 | 34,681,189 | 664,414 | LiveJournal在线社交网络 |
| 无向,社区 | 65,608,366 | 1,806,067,135 | 1,620,991 | Friendster在线社交网络 |
| 无向,社区 | 3,072,441 | 117,185,083 | 15,301,901 | Orkut在线社交网络 |
| 无向,社区 | 1,134,890 | 2,987,624 | 16,386 | YouTube在线社交网络 |
| 无向,社区 | 317,080 | 1,049,866 | 13,477 | DBLP协作网络 |
| 无向,社区 | 334,863 | 925,872 | 271,570 | 亚马逊产品网络 |
如果您有任何疑问,请在下面发表评论。