简介
在本实验中,我们将探索半监督学习的概念,它是机器学习的一种类型,其中一些训练数据被标记,而一些未被标记。半监督学习算法可以利用未标记的数据来提高模型的性能,并更好地推广到新样本。当我们有少量标记数据但大量未标记数据时,这特别有用。
在本实验中,我们将专注于两种半监督学习算法:自训练(Self Training)和标签传播(Label Propagation)。我们将学习如何使用 scikit-learn(Python 中一个流行的机器学习库)来实现和使用这些算法。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
安装 scikit-learn
在开始之前,让我们确保已安装 scikit-learn。如果你尚未安装,可以使用以下命令进行安装:
pip install -U scikit-learn
自训练
自训练算法概述
自训练算法基于亚罗夫斯基(Yarowsky)算法。它通过从未标记数据中学习,使监督分类器能够充当半监督分类器。该算法的工作方式是在标记数据和未标记数据上迭代训练监督分类器,然后使用对未标记数据的预测将这些样本的一个子集添加到标记数据中。该算法持续迭代,直到所有样本都有标签,或者在一次迭代中没有选择新的样本。
在 scikit-learn 中使用自训练
在 scikit-learn 中,自训练算法在SelfTrainingClassifier类中实现。要使用此算法,你需要提供一个实现predict_proba方法的监督分类器。以下是使用自训练算法的示例:
from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression
## 创建一个逻辑回归分类器
classifier = LogisticRegression()
## 使用逻辑回归分类器作为基础分类器创建一个自训练分类器
self_training_classifier = SelfTrainingClassifier(classifier)
## 在标记数据和未标记数据上训练自训练分类器
self_training_classifier.fit(X_labeled, y_labeled, X_unlabeled)
## 预测新样本的标签
y_pred = self_training_classifier.predict(X_test)
在上述示例中,X_labeled和y_labeled是标记数据,X_unlabeled是未标记数据,X_test是要预测的新样本。
标签传播
标签传播算法概述
标签传播是一种半监督图推理算法。它在输入数据集中的所有项上构建一个相似性图,并使用此图将标签从已标记数据传播到未标记数据。标签传播可用于分类任务,并支持核方法将数据投影到替代维度空间。
在 scikit-learn 中使用标签传播
在 scikit-learn 中,有两种可用的标签传播模型:LabelPropagation和LabelSpreading。这两种模型都构建一个相似性图并传播标签。以下是使用标签传播的示例:
from sklearn.semi_supervised import LabelPropagation
## 创建一个标签传播模型
label_propagation = LabelPropagation()
## 在已标记数据上训练标签传播模型
label_propagation.fit(X_labeled, y_labeled)
## 预测新样本的标签
y_pred = label_propagation.predict(X_test)
在上述示例中,X_labeled和y_labeled是已标记数据,X_test是要预测的新样本。
总结
半监督学习是一种强大的技术,它使我们能够利用未标记的数据来提高模型的性能。在本实验中,我们了解了两种半监督学习算法:自训练和标签传播。我们还学习了如何使用 scikit-learn 来实现和使用这些算法。通过将未标记的数据纳入我们的机器学习工作流程,我们可以更好地利用可用数据并实现更准确的预测。