You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

igraph重叠社区聚类clique.community函数参数k的含义与输入要求

igraph重叠社区聚类函数clique.community的k参数说明

该自定义函数实现的是经典的派系过滤(CPM)重叠社区检测算法,函数代码如下:

clique.community <- function(graph, k) {
   clq <- cliques(graph, min=k, max=k)
   edges <- c()
   for (i in seq_along(clq)) {
     for (j in seq_along(clq)) {
       if ( length(unique(c(clq[[i]], clq[[j]]))) == k+1 ) {
         edges <- c(edges, c(i,j)-1)
       }
     }
   }
   clq.graph <- simplify(graph(edges))
   V(clq.graph)$name <- seq_len(vcount(clq.graph))
   comps <- decompose.graph(clq.graph)

   lapply(comps, function(x) {
     unique(unlist(clq[ V(x)$name ]))
   })
}

参数核心作用

k是CPM算法的核心阈值,定义了构建社区的基础单元规模:

  • 函数运行第一步会提取网络中所有大小恰好为k的完全子图(即k-派系:子图内任意两个节点都存在直接连边)
  • 后续连通判断规则为:两个k-派系如果共享k-1个公共节点(代码中判断两个派系合并后总节点数为k+1,和“共享k-1个节点”完全等价),就判定为连通,所有互相连通的k-派系最终聚合为一个社区。这种聚合方式允许节点同时归属多个社区,实现重叠聚类的效果。

合理取值范围

  • 取值下限:最小为3。如果取k=2,对应的2-派系就是网络中的普通边,算法最终会把整个连通分量识别为单个社区,和直接计算网络连通子图的结果没有区别,完全失去社区划分的意义。
  • 取值上限:不能超过输入网络中存在的最大派系的节点数。如果k设置得比网络里最大完全子图的规模还大,第一步提取k-派系就会返回空结果,无法得到有效社区划分。
  • 经验取值:实际分析中常用取值区间为3~6。k取值越小,识别出的社区规模越大、社区间节点重叠度越高;k取值越大,识别出的社区内部连接越紧密、规模越小,更偏向识别网络中连接高度稠密的核心群组。使用时可以结合研究场景、社区划分效果指标灵活调整。

输入类型要求

k必须传入单个正整数,不能传入向量、小数、字符串等其他类型值,否则底层调用的cliques()函数会直接抛出错误。
补充说明:函数的第一个参数graph必须是igraph包构建的网络对象,邻接矩阵、边列表等常见网络数据格式需要先转为igraph对象才能传入运行。

测试示例

可以用如下随机生成的小世界网络快速测试函数运行效果:

library(igraph)
# 生成包含50个节点的小世界测试网络
test_net <- sample_smallworld(dim = 1, size = 50, nei = 3, p = 0.1)
# 设置k=3运行重叠社区检测
community_res <- clique.community(test_net, k = 3)
# 输出识别到的社区总数
length(community_res)

内容的提问来源于stack exchange,提问作者user13822027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:27:18