1.14. 半监督学习#

半监督学习 是一种情况,在训练数据中,一些样本没有标签。 sklearn.semi_supervised 中的半监督估计器能够利用这些额外的无标签数据来更好地捕捉底层数据分布的形状,并更好地泛化到新的样本。当我们只有很少量的标记点和大量的未标记点时,这些算法可以表现良好。

注意

半监督算法需要对数据集的分布做出假设,才能实现性能提升。有关更多详细信息,请参见 此处

1.14.1. 自训练#

此自训练实现基于 Yarowsky 的 [1] 算法。使用此算法,给定的监督分类器可以充当半监督分类器,使其能够从无标签数据中学习。

SelfTrainingClassifier 可以使用任何实现 predict_proba 的分类器调用,作为参数 base_classifier 传递。在每次迭代中,base_classifier 会预测无标签样本的标签,并将这些标签的子集添加到标记数据集中。

此子集的选择由选择标准决定。可以使用预测概率的 threshold 进行选择,或者根据预测概率选择 k_best 个样本。

用于最终拟合的标签以及每个样本被标记的迭代次数作为属性可用。可选的 max_iter 参数指定循环最多执行多少次。

可以将 max_iter 参数设置为 None,这将导致算法一直迭代,直到所有样本都有标签或在该迭代中没有选择新的样本。

注意

在使用自训练分类器时,分类器的 校准 非常重要。

示例

参考文献

1.14.2. 标签传播#

标签传播表示半监督图推理算法的几种变体。

此模型中提供的一些功能
  • 用于分类任务

  • 将数据投影到替代维空间的核方法

scikit-learn 提供了两种标签传播模型:LabelPropagationLabelSpreading。两者都是通过在输入数据集中的所有项目上构建相似性图来工作的。

../_images/sphx_glr_plot_label_propagation_structure_001.png

标签传播的说明: 未标记观测的结构与类结构一致,因此类标签可以传播到训练集的未标记观测。#

LabelPropagationLabelSpreading 在对相似性矩阵进行的修改以及对标签分布的钳制效果方面有所不同。钳制允许算法在一定程度上改变真实地面标签数据的权重。 LabelPropagation 算法对输入标签执行硬钳制,这意味着 \(\alpha=0\)。可以放松此钳制因子,例如 \(\alpha=0.2\),这意味着我们将始终保留 80% 的原始标签分布,但算法可以在 20% 内改变其对分布的置信度。

LabelPropagation 使用从数据构建的原始相似性矩阵,没有任何修改。相反,LabelSpreading 最小化具有正则化属性的损失函数,因此它通常对噪声更鲁棒。该算法在原始图的修改版本上进行迭代,并通过计算归一化图拉普拉斯矩阵来归一化边权重。此过程也用于 谱聚类

标签传播模型具有两种内置的核方法。核的选择会影响算法的可扩展性和性能。以下是可用的

  • rbf (\(\exp(-\gamma |x-y|^2), \gamma > 0\))。 \(\gamma\) 由关键字 gamma 指定。

  • knn (\(1[x' \in kNN(x)]\))。 \(k\) 由关键字 n_neighbors 指定。

RBF 核将生成一个完全连接的图,该图在内存中由一个密集矩阵表示。该矩阵可能非常大,并且与为算法的每次迭代执行完整矩阵乘法计算的成本相结合,会导致运行时间过长。另一方面,KNN 核将生成一个更友好的稀疏矩阵,可以大大减少运行时间。

示例

参考文献

[2] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. In Semi-Supervised Learning (2006), pp. 193-216

[3] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. Efficient Non-Parametric Function Induction in Semi-Supervised Learning. AISTAT 2005 https://www.gatsby.ucl.ac.uk/aistats/fullpapers/204.pdf