Label Propagation算法:图半监督学习的核心方法
算法原理与核心思想
Label Propagation(标签传播)是一种基于图结构的半监督学习算法,其核心思想是通过迭代传播标签信息,将少量标注样本的标签扩散到整个无标注数据集中。该算法假设相邻节点(数据点)具有相似的标签,通过构建图结构(如KNN图、全连接图)量化节点间的相似性,并利用相似性矩阵指导标签传播过程。
图结构构建
图的构建是算法的基础。每个数据点作为节点,节点间的边权重表示相似性。常见方法包括:
- KNN图:每个节点仅连接到最近的K个节点,适合高维稀疏数据。
- 全连接图:所有节点两两连接,权重通过高斯核函数计算((w_{ij} = e^{-\frac{||x_i - x_j||^2}{2\sigma^2}})),适合低维稠密数据。
- ε-邻域图:仅当节点距离小于阈值ε时连接,控制图的稀疏性。
标签传播过程
算法通过迭代更新每个无标注节点的标签,步骤如下:
- 初始化:标注节点保留原始标签,无标注节点初始化为空或随机标签。
- 传播阶段:每个无标注节点根据邻居节点的标签和边权重更新自身标签。更新规则通常为加权投票:
[
yi^{(t+1)} = \arg\max{c} \sum{j \in N(i)} w{ij} \cdot \mathbb{I}(yj^{(t)} = c)
]
其中(N(i))为节点i的邻居集合,(w{ij})为边权重,(\mathbb{I})为指示函数。 - 收敛条件:当标签变化小于阈值或达到最大迭代次数时停止。
实现步骤与代码示例
步骤1:构建相似性矩阵
以Python为例,使用NumPy和Scikit-learn构建KNN图:
import numpy as npfrom sklearn.neighbors import kneighbors_graphdef build_similarity_matrix(X, k=5):# 构建KNN图并转换为对称矩阵conn = kneighbors_graph(X, k, mode='connectivity', include_self=True)W = 0.5 * (conn + conn.T) # 确保对称性# 转换为稀疏矩阵(可选)from scipy.sparse import csr_matrixreturn csr_matrix(W)
步骤2:标签传播迭代
def label_propagation(W, labels, max_iter=100, tol=1e-3):n_samples = W.shape[0]n_classes = len(np.unique(labels))unlabeled = labels == -1 # 假设-1表示无标注# 初始化概率矩阵(行:样本,列:类别)Y = np.zeros((n_samples, n_classes))labeled_idx = np.where(~unlabeled)[0]for i in labeled_idx:Y[i, labels[i]] = 1for _ in range(max_iter):Y_prev = Y.copy()# 传播:Y = D^{-1} * W * YD = np.diag(np.array(W.sum(axis=1)).flatten())D_inv = np.linalg.inv(D)Y = D_inv @ W @ Y# 保持标注节点不变Y[labeled_idx] = np.eye(n_classes)[labels[labeled_idx]]# 检查收敛if np.linalg.norm(Y - Y_prev) < tol:breakpredicted_labels = np.argmax(Y, axis=1)return predicted_labels
优化策略与最佳实践
1. 相似性矩阵设计
- 归一化:对边权重进行行归一化((D^{-1}W)),避免高权重节点主导传播。
- 稀疏化:使用稀疏矩阵存储相似性矩阵,降低内存消耗。
- 参数调优:调整KNN的K值或高斯核的σ参数,平衡局部与全局一致性。
2. 收敛加速
- 提前终止:设置标签变化阈值(如tol=1e-3),避免无效迭代。
- 并行计算:对大规模图,可使用图划分技术(如METIS)并行处理子图。
3. 处理类别不平衡
- 加权传播:在传播阶段对少数类样本赋予更高权重。
- 过采样:结合SMOTE等过采样方法增加少数类标注样本。
实际应用场景
1. 社交网络用户分类
在社交网络中,少量用户标注了兴趣标签(如体育、音乐),通过构建用户关系图,Label Propagation可预测其他用户的兴趣。
2. 图像分割
将像素作为节点,颜色相似性作为边权重,利用少量标注像素传播标签,实现图像语义分割。
3. 推荐系统
在用户-物品二分图中,标注部分用户偏好,通过传播预测其他用户的潜在兴趣。
注意事项与局限性
1. 图质量影响结果
- 噪声边:错误连接的边会导致标签错误传播,需通过阈值或算法(如Jaccard相似性)过滤。
- 图密度:过密的图会降低局部一致性,过稀的图会导致传播中断。
2. 标注数据分布
- 标注偏差:若标注样本不能代表整体分布,传播结果会偏向标注区域。
- 冷启动问题:极少量标注样本(如<1%)可能导致收敛困难。
3. 算法选择
- Label Spreading:作为Label Propagation的变种,引入正则化项((Y = (I - \alpha S)^{-1} Y_0)),其中(S)为归一化相似性矩阵,(\alpha)控制平滑程度,适合噪声较多的数据。
性能优化思路
1. 近似最近邻(ANN)
对大规模数据,使用FAISS或HNSW等库加速KNN图构建,将时间复杂度从O(n²)降至O(n log n)。
2. 分布式计算
利用Spark GraphX或Dask等框架分布式构建图和传播标签,处理亿级节点数据。
3. 增量学习
当新数据到达时,仅更新受影响节点的标签,避免全图重新计算。
总结
Label Propagation算法通过图结构高效利用少量标注数据,在社交网络、图像处理等领域展现出强大能力。其实现需关注图构建质量、收敛条件及参数调优,结合优化策略(如稀疏化、并行化)可进一步提升性能。对于更复杂场景,可探索Label Spreading或结合深度学习的图神经网络(GNN)方法。