在机器学习领域,半监督学习是一种结合了少量标注数据和大量未标注数据的学习方法。这种方法特别适用于标注数据成本高昂,而未标注数据相对容易获取的场景。在Python的sklearn库中,提供了多种半监督学习算法的实现,这些算法能够利用未标注数据来更好地捕捉数据分布的形状,从而提高模型对新样本的泛化能力。
在训练半监督学习模型时,需要为未标注的数据分配一个特定的标识符。在sklearn的实现中,这个标识符通常是整数-1。对于字符串标签,y的dtype应该设置为object,以便同时包含字符串和整数。半监督学习算法需要对数据集的分布做出一些假设,以实现性能提升。
自训练算法基于Yarowsky提出的算法,它允许一个已有的监督学习分类器通过未标注数据进行学习。SelfTrainingClassifier可以与任何实现了predict_proba方法的分类器一起使用。在每次迭代中,基础分类器为未标注样本预测标签,并将其中一部分标签添加到标注数据集中。这个子集的选择基于选择标准,可以通过预测概率的阈值来确定,或者根据预测概率选择k_best样本。用于最终拟合的标签以及每个样本被标记的迭代次数可作为属性获取。可选的max_iter参数指定了循环执行的最大次数。如果将max_iter设置为None,则算法将迭代直到所有样本都有标签或在该迭代中没有选择新的样本。
标签传播指的是几种半监督图推理算法的变体。这些模型用于分类任务,并使用核方法将数据投影到其他维度空间。scikit-learn提供了两种标签传播模型:LabelPropagation和LabelSpreading。这两种模型都通过构建输入数据集上所有项的相似性图来工作。标签传播的示意图显示,未标注观测的结构与类别结构一致,因此类别标签可以传播到训练集中的未标注观测。
LabelPropagation和LabelSpreading在对相似性矩阵的修改和对标签分布的夹紧效应上有所不同。夹紧允许算法在一定程度上改变真实地面标注数据的权重。LabelPropagation算法对输入标签进行硬夹紧,这意味着α=0。这个夹紧因子可以放松,例如α=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核将产生一个更加内存友好的稀疏矩阵,这可以大幅减少运行时间。
在Iris数据集上,半监督分类器与SVM的决策边界对比;标签传播学习复杂结构;标签传播数字:展示性能;标签传播数字主动学习。
[2] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. 在半监督学习(2006),pp. 193-216
[3] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux.半监督学习中的高效非参数函数归纳。AISTAT 2005