1.14. 半监督学习#
半监督学习是一种训练数据中部分样本未标记的情况。sklearn.semi_supervised
中的半监督估计器能够利用这些额外的未标记数据,更好地捕捉底层数据分布的形态,并更好地泛化到新样本。当标记数据量很少但未标记数据量很大时,这些算法能表现出色。
注意
半监督算法需要对数据集的分布做出假设,才能获得性能提升。更多详情请参见此处。
1.14.1. 自训练#
这个自训练实现基于 Yarowsky 的[1]算法。使用该算法,给定的监督分类器可以作为半监督分类器运行,从而能够从未标记数据中学习。
SelfTrainingClassifier
可以与任何实现了 predict_proba
的分类器一起调用,作为参数 estimator
传入。在每次迭代中,estimator
会预测未标记样本的标签,并将这些标签的一个子集添加到已标记数据集中。
此子集的选择由选择标准决定。可以根据预测概率设置一个 threshold
(阈值),或者选择预测概率中 k_best
的样本。
用于最终拟合的标签以及每个样本被标记的迭代次数都可以作为属性获得。可选参数 max_iter
指定循环最多执行的次数。
可以将 max_iter
参数设置为 None
,这将使算法迭代直到所有样本都有标签,或者在该迭代中没有新样本被选择。
注意
使用自训练分类器时,分类器的校准很重要。
示例
参考文献
1.14.2. 标签传播#
标签传播指的是半监督图推断算法的几种变体。
- 该模型中的一些可用特性
用于分类任务
用于将数据投影到不同维空间中的核方法
scikit-learn
提供了两种标签传播模型:LabelPropagation
和 LabelSpreading
。两者都通过在输入数据集中的所有项上构建相似性图来工作。

标签传播示意图: 未标记观测值的结构与类别结构一致,因此可以将类别标签传播到训练集的未标记观测值。#
LabelPropagation
和 LabelSpreading
在相似性矩阵的修改以及对标签分布的钳制(clamping)效应上有所不同。钳制允许算法在一定程度上改变真实地面标记数据的权重。LabelPropagation
算法对输入标签执行硬钳制,这意味着 \(\alpha=0\)。这个钳制因子可以放松,例如设置为 \(\alpha=0.2\),这意味着我们将始终保留原始标签分布的80%,但算法可以在20%的范围内改变其对分布的置信度。
LabelPropagation
使用从数据中构建的原始相似性矩阵,没有进行任何修改。相比之下,LabelSpreading
最小化一个具有正则化特性的损失函数,因此它通常对噪声更鲁棒。该算法在原始图的修改版本上进行迭代,并通过计算归一化图拉普拉斯矩阵来规范化边权重。此过程也用于谱聚类。
标签传播模型内置了两种核方法。核的选择会影响算法的可伸缩性和性能。可用的核方法如下:
RBF(径向基函数)核 (\(\exp(-\gamma |x-y|^2), \gamma > 0\))。\(\gamma\) 由关键字 gamma 指定。
KNN(K近邻)核 (\(1[x' \in kNN(x)]\))。\(k\) 由关键字 n_neighbors 指定。
RBF 核将生成一个完全连接图,该图在内存中由一个密集矩阵表示。这个矩阵可能非常大,并且结合算法每次迭代执行完整矩阵乘法计算的成本,可能导致运行时间过长。另一方面,KNN 核将生成一个更节省内存的稀疏矩阵,这可以大大缩短运行时间。
示例
参考文献
[2] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. 载于《半监督学习》(2006),页码 193-216
[3] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. 半监督学习中高效的非参数函数归纳。AISTAT 2005 https://www.gatsby.ucl.ac.uk/aistats/fullpapers/204.pdf