繁体   English   中英

通过删除节点(顶点)实现几乎集群图的图集群

[英]Graph Clustering for almost Clustered Graph by removing nodes(vertices)

我想在具有数百万个边和节点的巨大无向图中进行图聚类。 图几乎是由仅由某些节点(可能与多个群集相关的模糊节点)连接在一起的不同群集组成的群集。 两个簇之间几乎没有或几乎没有边缘 这个问题几乎与查找图的顶点割集相似,唯一的例外是图需要划分为许多组件(其数量未知)。(请参阅此图片https://docs.google.com/file/d / 0B7_3zLD0X​​dtAd3ZwMFAwWDZuU00 / edit?pli = 1

它几乎就像不同的强连接组件在它们之间共享几个节点一样,我应该删除那些节点以分离那些强连接组件。 边被加权了,但是这个问题更像是在图中找到结构,因此边的加权将不相关。 (考虑该问题的另一种方法是可视化实体球体在某些点相互接触,其中球体是那些紧密连接的组件,而接触点是那些模糊的节点)

我正在做一些原型设计,所以请安静一点时间自己挑选图聚类算法并选择最佳方法。 另外,我需要一种可以削减节点而不减少边缘的解决方案,因为在我的情况下,不同的群集共享节点而不减少边缘。

是否有研究论文,博客解决了这个问题或一些相关问题? 或者任何人都可以想出解决此问题的方法,无论它多么肮脏。

由于涉及数百万个节点和边缘,因此我需要该解决方案的MapReduce实现。 任何输入,也有链接吗?

我现在可以直接使用MapReduce中的任何开源实现吗?

我认为此问题类似于通过删除顶点在在线社交网络中查找社区。

您的问题不是那么简单。 恐怕它与集团问题有关,NP问题是完整的,因此除非您以某种方式量化“集群之间几乎没有边缘”的陈述,否则您的问题可能仍然非常棘手。 但是我会试着尝试一种肮脏,贪婪的方法,即将节点视为以下一种准神经网络:

我认为每个顶点都有输入,输出和一个S型激活函数,可将输入值(输入之和)转换为输出值。 我认为这很重要,它的输出值不会被克隆并发送给所有邻居,而是在邻居之间平均分配。 除此之外,我将定义神经元活动的对数衰减(自我抑制,自身抑制连接),该衰减由网络的全局衰减参数定义。

现在,我将开始模拟所有神经元,这些神经元从活动0.5(活动范围为0到1)开始,具有非常高的衰减参数,这将导致所有神经元迅速稳定在0状态。 然后,我将逐渐减小衰减参数,直到稳态结果产生第一个具有非零稳定活动的团。

问题是下一步该怎么做。 一种可能性是从图中减去找到的集团,然后再次运行相同的过程,直到找到所有集团。 如果您的图的行为确实与您所说的一样好(实际上几乎是群集的),那么这种贪婪的方法可能会成功,但否则可能会导致意外的结果。 另一种可能性是为找到的群体提供独特的群体气味,该气味将排斥其他群体(相互抑制),重新运行该算法,直到找到第二个群体,再赋予其他所有其他群体排斥的群体气味,直到每个节点为止。有自己指定的气味。

我认为这将和我对此有很多大想法。

关键是,由于在一般情况下(可能是NP完整)可能无法解决此问题,因此您需要利用图形具有的任何特殊属性。 这意味着您需要使用一段时间,直到算法解决了您遇到的99%的情况。 我认为,如果不对遇到的实际数据集进行长时间的试验,就不可能给出精确数字答案。

由于涉及数百万个节点和边缘,因此我需要该解决方案的MapReduce实现。 任何输入,也有链接吗?

以我的经验,我怀疑在此使用Map / Reduce是否会真正具有优势。 前10 ^ 6个节点的顺序实际上并没有那么大(在非超连接图中也是如此,因为您正在考虑聚类),以及使用Map / Reduce的开销[除非您已经设置了硬件/软件为此],因为您的问题将不值得。

Map / Reduce可以更好地工作,一旦您解决了聚类问题,然后希望使用相似的分析来处理每个聚类。 基本上,当您可以将任务分解为相对独立的子任务时,可以并行执行这些子任务。 当然,这可以级联为几层。

在相对类似的情况下,我个人首先将图形建模到图形数据库中(我使用Neo4J,并且会强烈推荐它),然后对它进行分析和查询。 您会惊讶于该解决方案对白板的友好程度,甚至大规模连接和连接的查询都将几乎立即执行,尤其是在只有几百万个节点的规模上。 例如,您可以根据分离度进行过滤分析,然后列出公用物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM