本节是CSW224第一部分的最后一节
标签传播(Label Propagation)或(消息传递Message passing)经常被用作一个Baseline。这也是一种半监督节点分类(semi-supervised node classification),用一部分已知标签的节点去预测剩下的未知标签的节点。
注意:半监督与监督学习不同,这里没有将已经学到的模型泛化到新来的节点上,仅仅是对原图的剩余节点进行分类,因为在学习模型时,原图的未知标签的节点也可能用于训练。这种被称为直推式学习(Transductive),与之相对应的是归纳式学习(Inductive)。
网络中的节点是 物以类聚,人以群分(Correlation / dependencies)。关与这个基本假设可以从以下两个方面解释。
Homophily同质性:具有相似属性的节点更可能属于同一类或同一群体。“Birds of a feather flock together” 有相同羽毛的鸟可能在一起飞翔
![]() |
![]() |
例如KNN最近邻分类,根据节点连接到的其他节点的标签,对我进行分类。例如不良网站之间总是互相引流。
对于带权图,通过迭代方式进行加权平均;对无权图,则进行平均。其中 Y v Y_v Yv表示节点 v v v是类别 c c c的概率
P ( Y v = c ) = 1 ∑ ( v , u ) ∈ E A v , u ∑ ( v , u ) ∈ E A v , u P ( Y u = c ) P\left(Y_{v}=c\right)=\frac{1}{\sum_{(v, u) \in E} A_{v, u}} \sum_{(v, u) \in E} A_{v, u} P\left(Y_{u}=c\right) P(Yv=c)=∑(v,u)∈EAv,u1(v,u)∈E∑Av,uP(Yu=c)
这种方法有两个缺点:
算法运行时,可以为各节点标号,按顺序进行迭代计算灰色节点的类别概率。灰色节点所属类别的概率初始化为0.5
在一轮完成后,发现某些节点的类别概率达到1或者0,或者是某个阈值时,即为收敛。后续按照这个流程进行多轮迭代,直到达到最大次数或者所有灰色节点均已收敛。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
注意:nx.label_propagation_communities算法只适用于无向图
import networkx as nx
from networkx.algorithms import community
G = nx.karate_club_graph()
communities = community.label_propagation_communities(G)
# 获得每个社群的节点
community_list = []
for community in communities:
community_list.append(list(community))
# 为每个社群的节点分类
node_colors = []
for n in G:
if n in community_list[0]:
node_colors.append('blue')
elif n in community_list[1]:
node_colors.append('red')
else:
node_colors.append('yellow')
# 可视化
nx.draw(G,node_color=node_colors,with_labels=True)
由于之前的算法没有考虑节点的特征,因此本算法构建两个分类器:
对于 Z v Z_v Zv的计算,主要思想是提取节点周围节点类别信息,形成一个向量,有以下思路供参考
在已标注的训练集上,训练两个分类器。
缺点:不保证收敛
对于上图数据,如果训练一个线性分类器,有可能会错误地将灰色节点分类为红色。
所以不仅要考虑节点的属性特征 f v f_v fv,还要考虑连接特征 Z v Z_v Zv。
后处理的思想,类似目标检测中的Softnms
后处理(Post-process)
Correct :对不确定程度进行扩散。认为不确定度在图中也是homophily的。要对不确定性进行分散
Smooth:原理依旧是基于近朱者赤近墨者黑假设,将结果扩展。将已标注节点的概率和未标注节点经过Correct后的概率组成Z矩阵(Corrected Label matrix)
思想:节点u认为节点v是类别1的概率是多少,传递消息,当所有节点达到共识时,得到最终结果。
自监督,收到BERT在NLP领域的启发