社区发现图法

社区发现算法思路


社区划分问题大多基于这样一个假设:同一社区内部的节点连接较为紧密,社区之间的节点连接较为稀疏。因此,社区发现本质上就是网络中结构紧密的节点的聚类。

从这个角度来说,这跟聚类算法一样,社区划分问题主要有两种思路:

       (1)凝聚方法(agglomerative method):添加边
       (2)分裂方法(divisive method):移除边

另一方面,我们也可以认为同一个社区内的节点,之所以能够聚集在一起,是因为它们有相似性。因此只要我们能够将一个节点很好地表示,成为一个向量,那么同样可以用相似性大法来寻找社区聚集,不过这点上需要向量对节点的描述足够好和足够完备。

GN算法据说是社区发现领域的第一个算法,或者说它开启了这个领域的研究。下面我们来分别介绍这个领域及其算法是如何演化的。

GN算法

  1. 计算每一条边的边介数
  2. 删除边界数最大的边;
  3. 重新计算网络中剩下的边的边阶数;
  4. 重复(3)和(4)步骤,直到网络中的任一顶点作为一个社区为止。
      
    GN算法的R分析代码
// An highlighted block
> library("igraph")
> karate  <-  graph.famous("Zachary")
> ebc <- edge.betweenness.community(karate)
> ebc
Graph community structure calculated with the edge betweenness algorithm
Number of communities (best split): 5 
Modularity (best split): 0.4012985 
Membership vector:
 [1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> modularity(ebc)
[1] 0.4012985
> membership(ebc)
 [1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> plot(ebc,karate)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值