2012-09-10 58 views
0

我有一个有向图(实际上它是一个超图,但它可以忽略这一刻)。排名集群的质量

从这张图我挑选各种子图,我正在寻找一个函数,通过它们的“群集质量”来排列各种这样的子集。

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

“集群质量”应该是低的,当从所述子集中的许多成员或从该子集之外存在很多链接。

我的问题是:

  • 什么是 '集群质量' 正确的说法?

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

  • JVM上存在哪些实现。斯卡拉首选,但从Java可以调用的东西很好?

背景:这个想法是提取从源代码字(类&方法名称或其片段),并找到那些可能通过查找那些由“好簇”,从而可能代表用来更好地描述该应用程序代码中的一些知识概念。

回答

2

关于与聚类分析相关的算法/函数,有几个。图中的聚类与图分区密切相关,图分区最近一直是活跃的研究领域,特别是随着Facebook和Twitter等在线社交网络的出现,其基础结构自然由(社交)图表表示。

这就是说,根据我的经验,两个聚类措施浮现在脑海。一种是模块化,其基本上将子图(群集)与如果边缘随机分布的情况下的子图形相比较。

另一个是电导,它测量聚类候选者上随机游走将收敛到某种均匀分布的速度。

另一个更松散的测量方法是查看聚类系数,该系数测量图中三角形(3个周期)的数量与可能存在的可能三角形的数量。总而言之,有很多关于这个主题的算法(和学术论文),我上面提到的三个是更一般的用例。

关于JVM上的实现,我没有意识到与这些算法一起使用的库,但Scala的流行图库是Graph for Scala(将被合并到Scala Extended Core Library中未来)以及Twitter发布的Cassovary。