本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示。
标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点。在算法开始时,数据点的子集(通常只占很小一部分)有标签(或分类)。在整个算法过程中,这些标签会传播到未标记的点。
在复杂的网络中,真实的网络往往具有社区结构。标签传播是寻找社区的一种算法。 与其他算法相比,标签传播在运行时间和关于网络结构所需的先验信息量方面具有优势(不需要预先知道参数)。缺点是它不会产生唯一的解决方案,而是产生许多解决方案的集合。
注意:该算法是概率性的,并且发现的社区可能因执行的不同而不同
算法的思想:
在用一个唯一的标签初始化每个节点之后,该算法会重复地将一个节点的标签设置为该节点的相邻节点中出现频率最高的标签。当每个节点的标签在其相邻节点中出现得最频繁时,算法就会停止。该算法是异步的,因为每个节点都会在不等待其余节点更新的情况下进行更新。
该过程有5个步骤:
初始化网络中所有节点的标签。对于给定的节点x,Cx (0) = x。
设置t = 1。
以随机顺序排列网络中的节点,并将其设置为x
对于以特定顺序选择的每个x ∈ X,让Cx(t) = f(Cxi1(t),…、Cxim(t)、Cxi(m+1)(t1)。…,Cxik(t1))。f这里返回相邻标签中出现频率最高的标签。如果有多个最高频率标签,就随机选择一个标签。
如果每个节点都有其邻居节点中数量最多的标签,则停止算法。否则,设置t = t + 1并转到(3)。