翻译:陈丹
校对:王雨桐
本文约4700字,建议阅读15分钟
本文为大家介绍了多种图挖掘工具,并运用Spark为大家展示了一个标签传播算法LPA构建图的实例。
本教程分为两部分:
第1部分:无监督学习图
(https://towardsdatascience.com/large-scale-graph-mining-with-spark-750995050656)
第2部分(就是本文!):
如何运用神奇的图。我们将讨论标签传播,Spark GraphFrame和结果。
下文可回顾示例图和笔记:
https://github.com/wsuen/pygotham2018_graphmining
在第1部分,我们看到了如何使用图来解决无监督的机器学习问题,因为社区是集群。我们可以利用节点之间的边作为相似性或相关性的指标,特征空间中的距离可用于其他类型的聚类。
本文将深入探讨社区检测的方式。我们构建和挖掘一个大型网络图,学习如何在Spark中实现标签传播算法(LPA)的社区检测方法。
通过标签传播检测社区
尽管有许多社区检测技术,但本文仅关注一种:标签传播。有关其他方法的概述,我推荐Santo Fortunato的“图形中的社区检测”(https://arxiv.org/pdf/0906.0612.pdf)。
Raghavan,Usha Nandini,RékaAlbert和Soundar Kumara“在大型网络中检测社区结构的近线性时间算法。”物理评论E 76.3(2007):036106
1、最初每个节点都始于其所在的社区。
2、每次迭代会随机遍历所有节点。用其大多数邻居的标签来更新每个节点的社区标签,随意打破任何联系。
3、如果现在所有节点都是用大多数邻居的标签标记的,则该算法已达到停止标准。如果不是,重复步骤2。
标签传播很直观。假设某个工作日,你的同事得了感冒并“传播”病毒,办公区中的每个人都会和周围的人一样病重。与此同时,FoobarCo的员工在街上感染并开始传播流感。你与FoobarCo之间的联系并不多,因此当每个社区的成员患上疾病时,“传播”就会停止,达到融合!虽然流鼻涕和头痛太糟糕了。
为什么使用LPA?
带标签的数据很好,但不是必需的。使LPA适用于我们的无监督机器学习用例。
参数调整非常简单。LPA使用max_iterations参数运行,并且使用默认值5就可以获得良好的结果。Raghavan和她的合作者针对几个标记的网络测试了LPA。他们发现至少有95%的节点在5次迭代中被正确分类。
集群的先验数量,集群的大小,不需要其他指标。如果你不希望图形具有特定的结构或层次结构,那么这一点至关重要。我没有关于网络图的网络结构、拥有数据的社区数量或这些社区的预期规模的先验假设。
接近线性运行时间。LPA的每次迭代均为O(m),与边数成线性。与此前某些社区检测解决方案的O(n log n)或O(m + n)相比,整个步骤的顺序接近线性时间。
可解释性。可以给别人解释为什么将节点分到某个社区。
比利时移动网络中的语言社区(红色=法语,绿色=荷兰语)。图片来自Blondel,Vincent D.等人。“大型网络中社区的快速发展。”统计力学杂志:理论与实验2008.10(2008):P10008
工具选择
首先对工具领域进行一个简要的分析。我