scikit-learn 半监督学习实战指南:LabelPropagation 与 LabelSpreading 原理、参数与示例解析
文档机器学习教程【免费下载链接】sklearn-doc-zh:book: [译] scikit-learnsklearn 中文文档项目地址https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh点击查看免费下载导读本文基于 scikit-learnsklearn0.21.3 官方文档中文版docs/master/15.md系统讲解sklearn.semi_supervised模块中的半监督学习算法重点剖析标签传播Label Propagation与标签扩散Label Spreading两种模型的原理差异、核函数选择、夹持clamping机制以及工程实践中的性能取舍。读完本文你将掌握如何用-1标记未标注样本、配置gamma/n_neighbors等核心参数并结合仓库示例快速上手半监督分类任务。在训练数据中只有一部分样本带有标签、其余样本没有标签的场景被称为半监督学习Semi-supervised learning。sklearn.semi_supervised中的半监督估计器能够利用这些附加的未标记数据更好地捕获底层数据分布的形状并将其更好地推广到新的样本。当训练数据中有非常少量的有标签点、却有大量的无标签点时这些算法往往可以表现得很好。y中含有未标记的数据在使用fit方法训练数据时为无标签和有标签的点分配标识符是尤其重要的。本实现使用的标识符是整数值-1即未标记样本的目标值统一填入-1。半监督学习在 scikit-learn 中的定位在本文档所在仓库的目录结构中半监督学习位于「用户指南 → 1. 监督学习 → 1.14 半监督学习」一节见 docs/master/SUMMARY.md 与 docs/master/1.md 中的导航链接。它属于监督学习体系中的特殊分支模型在训练阶段同时消费有标签数据与无标签数据。sklearn.semi_supervised模块对外暴露两个核心估计器LabelPropagation与LabelSpreading。从 API 视角看它们均被归入 scikit-learn 的固有inherently多类分类器列表——这意味着它们天然支持多类分类无需借助OneVsRestClassifier等元评估器包装见 docs/master/13.md 中的分类器汇总表。如上图所示标签传播的核心直觉是无标签的观测值结构与类结构一致因此可以将类标签传播到训练集的无标签观测值上——只要数据本身的流形/簇结构与类别分布吻合少量的标注点就足以把标签扩散到整个数据分布。1.14.1 标签传播Label Propagation总览标签传播表示半监督图推理算法的几个变体。这类算法基于图Graph来推理标签其模型特性如下可用于分类和回归任务LabelPropagation同时提供predict与predict_proba并可通过设置fit目标为连续值做回归使用**核方法kernel methods**将数据投影到备用维度空间从而在核诱导的特征空间中度量样本相似性。scikit-learn提供了两种标签传播模型LabelPropagation和LabelSpreading。两者都通过在输入数据集中的所有项目上**构建相似图similarity graph**来进行工作将每个样本视为图中的一个节点样本间的相似度作为边的权重随后让标签沿图的边进行传播直到收敛。LabelPropagation 与 LabelSpreading 的核心差异两种模型的名字相似、流程相似但在两个关键环节上存在实质性区别相似性矩阵的构建方式以及对标签分布的夹持效应clamping effect。夹持效应硬夹持与软夹持夹持效应允许算法在一定程度上改变真实标签化数据的权重LabelPropagation算法执行输入标签的全加持hard clamping这意味着夹持系数 $\alpha0$——即原始标签完全固定在迭代传播过程中绝不会被算法修改传播只作用于未标记节点夹持因子可以不一定那么严格。例如 $\alpha0.2$ 意味着算法将始终保留原始标签分配的 80%但允许其在传播过程中将自身分布的置信度改变 20% 以内。LabelSpreading正是通过这种软夹持机制给已标记节点也留出了自我修正的空间。相似性矩阵与损失函数LabelPropagation使用原始相似性矩阵从未修改的数据构建图传播过程直接在该矩阵上进行LabelSpreading则最小化具有正则化属性的损耗函数因此它通常更适用于噪声数据。算法在原始图形的修改版本上进行迭代并通过计算normalized graph Laplacian matrix归一化图拉普拉斯矩阵来对边缘的权重进行归一化。这一归一化过程同样被用于 scikit-learn 的Spectral clustering谱聚类参见用户指南「2.3 聚类」章节 docs/master/22.md。简单归纳如果数据含噪较多优先考虑LabelSpreading的正则化传播如果希望已标注样本的标签绝对不可变例如标注来自人工、可信度极高则LabelPropagation的全加持行为更贴合需求。核函数的选择rbf 与 knn标签传播模型内置了两种核函数。核的选择会显著影响算法的可扩展性和性能核函数数学形式关键参数rbf$\exp(-\gamma |x-y|^2), \gamma 0$gamma通过关键字gamma指定knn$1[x \in kNN(x)]$n_neighbors通过关键字n_neighbors指定两种核的工程代价差异明显RBF 核将产生一个全连接的图它通过密集矩阵在内存中表示。这个矩阵可能非常大加上算法每次迭代都要执行全矩阵乘法的计算成本我们可能会面临特别长的运行时间另一方面KNN 核能够产生更内存友好的稀疏矩阵这可以大幅度地减少运行时间。因此在样本量较大、内存受限或对训练耗时敏感的场景中优先选用kernelknn并调节n_neighbors在样本量较小、希望利用全局相似度结构的场景中kernelrbf配合gamma更合适。实战在 scikit-learn 中使用标签传播最小可用示例import numpy as np from sklearn.semi_supervised import LabelPropagation, LabelSpreading # 假设 X 是特征矩阵y 中已标注样本为 0/1未标注样本一律填 -1 X np.array([...]) # n_samples x n_features y np.array([0, 1, -1, ...]) # 未标记样本填 -1 lp LabelPropagation(kernelrbf, gamma0.25, max_iter1000) lp.fit(X, y) predicted lp.predict(X) # 噪声数据下可改用 LabelSpreading并保留部分对真实标签的软夹持 ls LabelSpreading(kernelknn, n_neighbors7, alpha0.2, max_iter100) ls.fit(X, y)使用要点未标记样本的目标值必须为-1这是该模块约定的标识符fit内部会据此区分已标记与未标记节点半监督估计器具有与普通分类器一致的fit/predict/predict_proba接口可无缝接入 Pipeline 与交叉验证流程从源码结构看二者的迭代过程均为构建相似图 → 归一化LabelSpreading计算图拉普拉斯→ 迭代传播标签直至收敛收敛由max_iter控制。仓库配套的官方示例本文档所在仓库的示例目录中半监督分类相关示例收录于 docs/examples/README.md 的「半监督分类」一节共四个Iris 数据集上标签传播与 SVM 的决策边界对比plot_label_propagation_versus_svm_iris在经典鸢尾花数据上仅标注少量样本对比标签传播与 SVM 在极少标注下的决策边界差异标签传播学习复杂的结构plot_label_propagation_structure使用嵌套环状two moons 类数据演示 KNN 型标签传播如何沿流形结构把类标签扩散到未标注观测值标签传播数字演示性能plot_label_propagation_digits在手写数字数据集digits上演示半监督性能标签传播数字主动学习plot_label_propagation_digits_active_learning将标签传播与主动学习active learning结合迭代挑选最有信息量的样本进行标注。以下为「标签传播学习复杂的结构」示例的运行结果缩略图左侧是原始数据橙色点为未标记样本仅极少量标注点右侧是LabelSpreadingKNN 核学习后的标签结果可见未标记样本被正确划分到对应的嵌套环类中对应的示例缩略图与中文标题均可在 docs/examples/img 目录下找到如sphx_glr_plot_label_propagation_digits_thumb.png、sphx_glr_plot_label_propagation_digits_active_learning_thumb.png、sphx_glr_plot_label_propagation_versus_svm_iris_thumb.png便于读者按图索骥定位完整示例。典型应用场景与选型建议结合半监督学习的定义与上述算法特性标签传播类方法尤其适合以下场景标注成本高昂仅有少量人工标注如几十个点但有海量未标注数据如数万个点——此时算法能利用未标注点的分布结构大幅提升泛化能力数据结构与类别分布强相关当数据的流形/簇结构与类别标签高度一致时如环形嵌套数据、文档主题聚类标签传播效果显著含噪标注或软标签场景使用LabelSpreading的正则化损失与软夹持如alpha0.2允许传播过程轻微修正初始标注多类分类LabelPropagation与LabelSpreading均属于固有的多类分类器见 docs/master/13.md可直接输出多类标签。选型速查需要绝对信任原始标注→ 用LabelPropagation硬夹持$\alpha0$数据含噪、标注可能有误→ 用LabelSpreading软夹持 正则化样本量大、内存紧张 →kernelknn 合理n_neighbors稀疏矩阵样本量小、追求全局结构 →kernelrbf 调gamma。参考资料本文档docs/master/15.md引用的算法原始文献如下供深入理解理论背景时查阅[1] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. InSemi-Supervised Learning(2006), pp. 193-216[2] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux.Efficient Non-Parametric Function Induction in Semi-Supervised Learning. AISTAT 2005若需继续深入可在本仓库中对照阅读用户指南目录导航 docs/master/SUMMARY.md、多类分类器汇总 docs/master/13.md、谱聚类与归一化图拉普拉斯相关所在的聚类章节 docs/master/22.md以及示例索引 docs/examples/README.md。赞分享文档机器学习教程【免费下载链接】sklearn-doc-zh:book: [译] scikit-learnsklearn 中文文档项目地址https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh点击查看免费下载相关推荐scikit-learn 半监督学习完全指南SelfTrainingClassifier、LabelPropagation 与 LabelSpreading 的原理与实践scikit learn 半监督学习完全指南SelfTrainingClassifier、LabelPropagation 与 LabelSpreading人工智能机器学习数据科学scikit-learn监督学习算法实战scikit learn监督学习算法实战 文章详细介绍了scikit learn中四大核心监督学习算法线性模型与正则化方法、支持向量机与核方法、决策树与集成学人工智能机器学习数据科学scikit-learn 监督神经网络MLPClassifier / MLPRegressor完整指南原理、算法与实战调参scikit learn 监督神经网络MLPClassifier / MLPRegressor完整指南原理、算法与实战调参 本文全面讲解 scikit l人工智能机器学习数据科学上一篇高效图像标注实战指南5步掌握make-sense专业标注流程下一篇终极指南一键获取官方原版macOS安装文件Windows/Mac全平台支持创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考