评估半监督学习如何利用未标注数据
https://medium.com/@reinhard.sellmair?source=post_page---byline--338283d1f4e9--------------------------------https://towardsdatascience.com/?source=post_page---byline--338283d1f4e9-------------------------------- Reinhard Sellmair
·发表于 Towards Data Science ·阅读时长 8 分钟·2024 年 9 月 9 日
–
作者提供的图像 — 使用必应的图像生成器创建
数据科学家面临的最常见挑战之一是缺乏足够的标注数据来训练一个可靠且准确的模型。标注数据对于监督学习任务(如分类或回归)至关重要。然而,在许多领域,获取标注数据可能成本高昂、耗时或不可行。另一方面,未标注数据通常容易收集,但它们并不能直接用于训练模型。
我们如何利用未标注数据来提高监督学习模型的性能?这正是半监督学习发挥作用的地方。半监督学习是机器学习的一个分支,它结合了标注数据和未标注数据,以训练一个比仅使用标注数据表现更好的模型。半监督学习背后的直觉是,未标注数据可以提供关于数据潜在结构、分布和多样性的有用信息,这有助于模型更好地泛化到新的和未见过的样本。
在这篇文章中,我介绍了三种可以应用于不同类型数据和任务的半监督学习方法。我还将评估它们在实际数据集上的表现,并将其与仅使用标注数据的基准进行比较。
什么是半监督学习?
半监督学习是一种机器学习方法,它同时利用已标记数据和未标记数据来训练模型。已标记数据是指那些已知输出或目标变量的样本,比如分类任务中的类别标签或回归任务中的数值。未标记数据是指那些没有已知输出或目标变量的样本。半监督学习可以利用在实际问题中通常大量存在的未标记数据,同时也利用较少的已标记数据,而后者通常更加昂贵或耗时。
使用未标记数据来训练监督学习方法的基本思想是通过监督或无监督学习方法给这些数据打上标签。尽管这些标签可能不像实际标签那样准确,但拥有大量此类数据可以提升监督学习方法的表现,相比只用已标记数据进行训练。
scikit-learn 包提供了三种半监督学习方法:
-
自训练:首先仅在已标记数据上训练分类器,以预测未标记数据的标签。在下一轮中,另一个分类器在已标记数据和从未标记数据中预测出高置信度标签的结果上进行训练。这个过程会重复进行,直到没有新的高置信度标签被预测,或者达到最大迭代次数为止。
-
标签传播:构建一个图,其中节点表示数据点,边表示它们之间的相似性。标签通过图进行迭代传播,从而使算法能够根据已标记数据与未标记数据之间的连接关系,将标签分配给未标记数据点。
-
标签传播:使用与标签传播相同的概念。区别在于标签扩散使用软分配,在这种方法中,标签是根据数据点之间的相似性进行迭代更新的。这种方法还可能“覆盖”已标记数据集的标签。
为了评估这些方法,我使用了一个糖尿病预测数据集,该数据集包含患者的年龄、BMI 等特征,以及描述患者是否患有糖尿病的标签。该数据集包含 100,000 条记录,我将其随机分为 80,000 条训练数据、10,000 条验证数据和 10,000 条测试数据。为了分析在不同标签数据量下学习方法的有效性,我将训练数据分为标签数据集和无标签数据集,其中标签大小表示有多少样本已标记。
数据集划分(图片来源:作者)
我使用验证数据评估了不同参数设置,并使用测试数据评估了各方法在参数调优后的性能。
我使用了 XGBoost 进行预测,并使用 F1 得分来评估预测性能。
基准
基准模型用于将自学习算法与不使用任何无标签数据的情况进行比较。因此,我在不同大小的标签数据集上训练了 XGB,并计算了验证数据集上的 F1 得分:
基准分数(图片来源:作者)
结果显示,对于少于 100 个样本的训练集,F1 得分相对较低,但随着样本量的增加,得分稳定提高,到达 1,000 个样本时达到了 79%的得分。更大的样本量对 F1 得分的提升几乎没有作用。
自学习
自学习是通过多次迭代来预测无标签数据的标签,这些标签将在下一次迭代中用于训练另一个模型。可以使用两种方法来选择将作为标签数据用于下一次迭代的预测:
-
阈值(默认):选择所有置信度超过阈值的预测
-
K 最优:选择置信度最高的 k 个预测
我评估了默认参数(ST Default),并根据验证数据集调优了阈值(ST Thres Tuned)和 k 最优参数(ST KB Tuned)。这些模型的预测结果在测试数据集上进行了评估:
自学习得分(图片来源:作者)
对于小样本量(<100),默认参数(红线)的表现不如基准(蓝线)。对于更大的样本量,模型取得的 F1 得分稍微优于基准。调整阈值(绿线)带来了显著的提升。例如,在标签大小为 200 时,基准 F1 得分为 57%,而调整阈值后的算法 F1 得分为 70%。除了标签大小为 30 时的一个例外,调整 K 最优值(紫线)几乎与基准表现相同。
标签传播
标签传播有两种内置的核方法:RBF 和 KNN。RBF 核通过使用密集矩阵生成一个完全连接的图,这在大数据集上需要大量内存且耗时较长。为了考虑内存限制,我只使用了最多 3,000 个样本进行 RBF 核的训练。KNN 核则使用更节省内存的稀疏矩阵,这使我能够在最多 80,000 个样本的整个训练数据上进行训练。以下图表展示了这两种核方法的结果比较:
标签传播得分(图片由作者提供)
图表显示了不同标签传播方法在测试数据集上的 F1 得分与标签大小的关系。蓝色线表示基准线,与自我训练相同。红色线表示使用默认参数的标签传播,明显低于基准线,且所有标签大小下都表现较差。绿色线表示使用 RBF 核和调优后的参数 gamma 的标签传播。Gamma 定义了单个训练样本的影响范围。调优后的 RBF 核在小标签大小(<=100)下表现优于基准线,但在大标签大小下则表现较差。紫色线表示使用 KNN 核和调优后的参数 k 的标签传播,k 决定了使用多少个最近邻。KNN 核的表现与 RBF 核相似。
标签扩展
标签扩展是一种类似于标签传播的方法,但增加了一个控制实例应该接受多少邻居信息的参数 alpha。Alpha 的取值范围为 0 到 1,其中 0 表示实例保持其原始标签,1 表示实例完全采用邻居的标签。我还对 RBF 和 KNN 核方法进行了调优。标签扩展的结果显示在下图中:
标签扩展得分(图片由作者提供)
标签传播的结果与标签扩展非常相似,唯一显著的例外是,RBF 核方法在标签扩展中的测试得分低于基准得分,且所有标签大小下都如此,不仅仅是小标签大小。这表明,邻居标签的“覆盖”对这个数据集有相当负面的影响,该数据集可能只有少数离群点或噪声标签。另一方面,KNN 核方法不受 alpha 参数的影响。似乎这个参数只与 RBF 核方法相关。
所有方法的比较
接下来,我将所有方法的最佳参数进行对比。
最佳得分比较(图片由作者提供)
图表显示了不同半监督学习方法的测试得分与标签大小的关系。自我训练优于基线,因为它很好地利用了无标签数据。标签传播和标签扩散仅在小标签大小下超过基线,对于较大的标签大小,表现较差。
结论
结果可能因不同的数据集、分类器方法和评估指标而显著变化。半监督学习的性能依赖于许多因素,例如无标签数据的质量和数量、基本学习器的选择以及评估标准。因此,在没有适当的测试和验证的情况下,不应将这些发现推广到其他设置中。
如果你有兴趣进一步探索半监督学习,欢迎查看我的 Git 仓库并自行实验。你可以在这里找到这个项目的代码和数据。
我从这个项目中学到的一点是,参数调优对于显著提升这些方法的性能至关重要。通过优化参数,自我训练在任何标签大小下都优于基线,并且 F1 分数提高了最多 13%!标签传播和标签扩散仅在非常小的样本量下有所改进,但用户必须非常小心,以免得到比不使用任何半监督学习方法更差的结果。
1024

被折叠的 条评论
为什么被折叠?



