1.14. 半监督学习#
<https://en.wikipedia.org/wiki/Semi-supervised_learning>`_ 是一种情况,
在你的训练数据中,有些样本是没有标签的。
sklearn.semi_supervised
中的半监督估计器能够利用这些额外的未标记数据来更好地捕捉数据分布的形状,
并更好地泛化到新的样本。当我们的标记点非常少,而未标记点非常多时,这些算法可以表现良好。
Note
半监督算法需要对数据集的分布做出假设,以实现性能提升。更多详情请参见 这里 。
1.14.1. 自训练#
这个自训练实现基于 Yarowsky 的 [1] 算法。使用这个算法,一个给定的监督分类器可以作为半监督分类器, 允许它从未标记数据中学习。
SelfTrainingClassifier
可以与任何实现 predict_proba
的分类器一起调用,
作为参数 base_classifier
传递。在每次迭代中, base_classifier
预测未标记样本的标签,
并将这些标签的一个子集添加到标记数据集中。
这个子集的选择由选择标准决定。
选择可以通过在预测概率上使用一个 阈值
,或者根据预测概率选择 k_best
个样本来进行。
用于最终拟合的标签以及每个样本被标记的迭代次数都可以作为属性使用。可选的 max_iter
参数指定了循环最多执行的次数。
max_iter
参数可以设置为None
,这将导致算法迭代直到所有样本都被标记或者在该迭代中没有新的样本被选中。
Note
在使用自训练分类器时,分类器的:ref:校准 <calibration>
非常重要。
1.14.2. 标签传播#
标签传播表示几种半监督图推理算法的变体。
- 该模型中可用的几个特性:
用于分类任务
核方法将数据投影到替代的维度空间
scikit-learn
提供了两种标签传播模型:LabelPropagation
和:class:LabelSpreading
。两者都通过在输入数据集中的所有项上构建相似图来工作。
LabelPropagation
和 LabelSpreading
在相似度矩阵的修改和标签分布的夹持效应上有所不同。
夹持允许算法在一定程度上改变真实地面标签数据的权重。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. 在半监督学习中 (2006),第193-216页
[3] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. 半监督学习中的高效非参数函数归纳。AISTAT 2005 https://www.gatsby.ucl.ac.uk/aistats/fullpapers/204.pdf