泛运筹理论初探——HANP和BMLPA以及DCLP简介

图论-图论算法之HANP和BMLPA以及DCLP

图论经典算法简介之HANP算法与BMLPA算法以及DCLP算法
    在图论介绍的文章里,关于标签传播的算法我们在上一次的文章里已经介绍过了,在本次文章里我们将会介绍效果更好的社区发现类算法,也就是HANP算法、BMLPA算法,以及借鉴了HANP算法的DCLP算法。
    HANP算法是在2009年被提出的,它的核心思想是在标签传播算法LPA算法的基础上,考虑了各个标签其他的特征,比如度的信息,距离信息等。因为标签传播本质上就是看当前点的周围neighbor邻居点谁的标签更多,本质上没有考虑附近点的结构特征信息,所以在实际场景的效果经常会无法稳定或是得到过大的社区。而HANP则考虑了各种图上的结构信息和边信息,在传播的时候,引入了衰减因子,防止两个距离较远的社团互相影响,而通过综合考虑度信息、距离信息、权重信息(有权图)来构造一个综合得分score进行传播,周围点的score值最大的那个标签是设定为当前点的标签,当分数衰减小于等于0的时候停止传播,这样可以防止过度传播导致的不平衡问题发生。
    而BMLPA算法则是在2012年被提出的,该算法的核心在于balance平衡,它将各个点的标签进行概率化处理,而不是直接设定为某个标签,可以认为这个算法是广义的标签传播,但是它更注重周围点的标签的概率组合,是一种更为合理的投票思路。BMLPA算法的步骤是先设置一个过滤阈值,防止概率较低的标签影响最终结果,在这个基础上,对于周围的直接相连的点进行概率加和,取最大的概率值作为第一次归一化的分母,进行归一化后使用阈值进行过滤,然后再进行一次归一化操作即可,按照这个步骤进行迭代,直到最终所有的点都有自己的标签和对应的概率,可以取最大的概率对应的标签作为整个BMLPA算法传播的结果。而这个算法的步骤如下:
    1)初始化设置阈值是0.7,假设当前点X周围有三个点,分别是U点、V点和W点,它们内部的标签分别是U(A,1/2;B,1/2)、V(A,1/2;B,1/6;C;1/3)、V(C,1) ,也就是点的标签和对应的概率。
    2)进行第一次计算,得到A=1/2+1/2=1 ,B=1/2+1/6=4/6 ,C=1+1/3=4/3 ,显然C的值最大,将其作为分母进行归一化,得到PF(A)=3/4 ,PF(B)=1/2,PF©=1 ,由于阈值是0.7,所以过滤掉B,因为它的组合概率值小于阈值0.7,然后保留结果A和C
    3)再一次把A和C进行直接归一化,得到P(A)=3/7,而P©=4/7,所以当前点X的标签是X(A,3/7;C,4/7)
    下面再介绍DCLP和SDCLP算法,这两种算法其实都是HANP算法的简化,因为它们不考虑点位其他的特征信息(度信息、权值等),而是只考虑了距离的衰减,通过一个衰减系数去控制,防止最终的社团巨大,可以更好地得到一些互相独立的社团,在实际问题中较为实用。而SDCLP算法是DCLP的一种优化或者说是一种策略技巧,因为SDCLP算法通过picked_bound来进行过滤,在每一次迭代的时候,都会使用这个参数进行检测,如果超过这个界线,将会停止这个社区过大,这个思路的好处是可以防止过大的社团产生,同时又让小社团进行充分传播。
在这里插入图片描述
    总的来说,本文提及的HANP算法、DCLP算法、SDCLP算法、BMLPA算法都是比较经典和实用的社区发现算法,它们比传统的LPA标签传播算法更为合理,并且在实际场景是比较实用的,能够解决一些问题,希望初学者能掌握这些方法的原理和思路,为后续解决此类问题打好基础。

猜你喜欢

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