0

我有一个有向图(实际上它是一个超图,但暂时可以忽略它)。

从这个图中,我选择了各种子图,并且我正在寻找一个函数,它可以根据它们的“集群质量”对各种此类子集进行排名。

当子集的成员之间存在大量链接时,“集群质量”应该很高

当从子集的许多成员到子集或从子集外部存在大量链接时,“集群质量”应该很低。

我的问题是:

  • “集群质量”的正确术语是什么?

  • 在这种情况下确实存在哪些相关算法/功能?

  • JVM 上存在哪些实现。首选 Scala,但任何可从 java 调用的东西都可以吗?

背景:这个想法是从源代码(类和方法名称或其片段)中提取单词,并通过查找“良好集群”使用的单词,从而找到那些可能最好地描述应用程序的单词,从而可能代表代码中的一些知识概念。

4

1 回答 1

2

关于与聚类分析相关的算法/功能,有几个。图中的聚类与图划分密切相关,图划分最近成为一个活跃的研究领域,尤其是随着 Facebook 和 Twitter 等在线社交网络的出现,其底层结构自然地由(社交)图表示。

话虽如此,根据我的经验,我想到了两种聚类措施。一个是模块化,它基本上将子图(集群)与边缘随机分布的子图的外观进行比较。

另一个是电导率,它衡量随机游走在集群候选者上收敛到某个均匀分布的速度。

另一个更宽松的衡量标准是查看聚类系数,它衡量图形中三角形(3 个循环)的数量与可能存在的三角形数量的关系。

总而言之,有很多与这个主题相关的算法(和学术论文),我上面提到的三个是更通用的用例。

关于 JVM 上的实现,我所知道的库中没有包含此类算法的库,但流行的 Scala 图形库是 Scala 的 Graph(将来将合并到 Scala 扩展核心库中)和Cassovary,由 Twitter 发布。

于 2012-09-10T06:52:25.120 回答