泛运筹理论初探——LPA标签传播和三角计数简介

图论-图论算法之三角计数和LPA

图论经典算法简介之三角计数和标签传播
    在之前介绍图论的文章里,我们介绍了图的基本算法,主要是搜索类的算法,比如深度优先算法和广度优先算法,以及Dijkstra算法和Floyd算法。在本次文章里我们将会介绍挖掘图里面社区的算法,比如某某小团体等,在实际场景里,这种社区发现类的算法比较实用,因为大多数实际问题里的网络是小世界网络,也就是说每个点都有自己大概的一个圈子,圈子内部会有较强的连接性,而圈子之外的连接性则较为稀疏。在本次文章里,我们将会介绍triangle count数三角形算法和label propagation algorithm标签传播算法。
    首先介绍的是数三角形算法,也就是triangle count,其实这种算法不能完全算是社区发现系列的算法,因为这种算法给出的结果其实是计算每个点有多少个三角形,而不是给出这个点属于哪个社区,而介绍这种数三角形算法其实就是为了引出团伙的概念,因为最小的团伙理论上是三个点互相连接,形成三角形的。
    而数三角形算法,顾名思义其实就是计算每个点的三角形个数,而这个三角形的定义就是假设当前点是A,有两个和它直接连接的点是B和C,如果点B和点C也是直接连接的话,那么就给点A记录1个三角形的个数。从实际应用场景来考虑的话,这种三角形越多,其实就代表那个点的朋友比较多,并且圈子非常稳固,也代表这个点非常重要。
在这里插入图片描述
    然后再介绍一下LPA标签传播算法,这种算法其实就是不断地传播标签,直到最终的稳定状态或者达到了最大的迭代次数。这种算法的步骤其实就是先初始化将所有点的标签设为一个数字,比如有10个点,那么就是说有10个标签,可以设为1到10,然后开始遍历每个点,选取和当前点直接相邻点的标签的最多数那个作为当前点的新标签,如此循环遍历,直到最后的稳定状态或者达到了最大的迭代轮次。
    而在这个基础上,又有一个优化版本的标签传播算法,也就是所谓的SLPA算法,这个S可以认为是speaker ,该算法在标签传播的基础上,对于当前的点视为倾听者listener,周围直接相连的点视为speaker,对于每一个speaker会选取其出现最多的标签,然后进行汇总,选取最多出现标签认为是当前listener的标签并保存,然后遍历N轮次后,得到每个点都有N个标签,再选取出现次数最多的那个作为最终的标签即可。我们可以发现,这种SLPA比LPA算法要来的更为合理,因为它保存了历史的迭代标签,而LPA只是每次将标签进行覆盖,所以SLPA一般会相比LPA的结果要更好,这种标签的记忆功能也可以说是整个图不断迭代和传播的体现。
在这里插入图片描述
    总的来说,上文提到的数三角形算法和标签传播算法是比较简单的算法,主要是用到了点的基本结构信息,也就是度信息和周围点的信息。其实对于社区发现类的算法来说,在实际场景还是很实用的,希望初学者能掌握这些方法的原理和思路,为后续优化算法和实战应用打好基础。

猜你喜欢

转载自blog.csdn.net/qq_26727101/article/details/113058918