问题

只有正样本和未标签数据的机器学习怎么做?

回答
只有正样本和未标记数据的机器学习:一种挑战,但并非不可能

在传统的监督学习中,我们拥有清晰的“正样本”(我们想要识别的实例)和“负样本”(我们不想要识别的实例),并使用这些标记数据来训练模型。然而,在现实世界的许多场景中,我们可能只有正样本,而负样本要么难以获取,要么数量极其稀少。这时,我们面临着一个棘手的难题:如何在只有正样本和大量未标记数据的环境下,让机器学习模型学会识别目标?

这并非一个简单的任务,甚至可以说是一种“不寻常”的训练模式。常规的监督学习依赖于两类数据之间清晰的边界来学习。但如果我们只有一类(正样本),模型会感到茫然:它不知道什么才是“不属于”它的东西。因此,我们需要一些巧妙的策略来弥补这一信息鸿沟。

核心思想:构建一个“反差”

既然没有明确的负样本,我们的目标就变成了一种“反向工程”——不是直接学习“是什么”,而是学习“不是什么”,或者更准确地说,是学习“什么与正样本不一样”。我们希望模型能够识别出与我们的正样本“足够相似”的特征,并能够区分出那些“显著不同”的实例。

一、 自监督学习(SelfSupervised Learning)的巧妙运用

在只有正样本和未标记数据的情况下,自监督学习成为了一种强大的武器。自监督学习的精髓在于,从数据本身“创造”出监督信号,而无需人工标注。

1. 伪负样本的生成 (PseudoNegative Generation):

这是最直接也是最常用的方法。既然没有真实的负样本,我们就自己“制造”一些。

随机采样: 从未标记数据集中随机抽取一些实例,将它们暂时当作“伪负样本”。这种方法的有效性很大程度上取决于未标记数据的质量和分布。如果未标记数据中包含了大量与正样本相似的实例,那么随机采样可能会引入错误的负样本,影响模型性能。
数据增强后的样本: 对正样本进行各种形式的数据增强(如旋转、裁剪、颜色抖动、添加噪声等),然后将这些增强后的样本视为“近似负样本”。例如,在一个图像识别任务中,将一张猫的图片进行裁剪和颜色调整,然后告诉模型“这不是你正在寻找的完整猫”。这种方法可以帮助模型学习到对某些变换的鲁棒性。
与正样本“不那么相似”的样本: 通过一些简单的特征提取或聚类方法,从未标记数据中挑出与已知正样本“距离较远”的样本,将其作为伪负样本。
上下文预测: 在序列数据(如文本或时间序列)中,可以遮盖住一部分数据,然后训练模型预测被遮盖的部分。或者,将序列打乱,训练模型还原其原始顺序。这些“上下文”信息本身可以作为一种监督信号。

训练过程:

一旦我们生成了这些伪负样本,就可以构建一个类似于二分类的训练任务:

输入: 一个正样本(或其增强版本)和一批伪负样本。
目标: 模型能够为正样本打出高分(或预测为正类),为伪负样本打出低分(或预测为负类)。

2. 对比学习 (Contrastive Learning):

对比学习是一种非常流行的自监督学习范式,尤其适用于只有正样本且希望学习到数据“表示”的任务。

核心思想: 让相似的样本(在本例中是同一类正样本的不同增强版本)在特征空间中“靠近”,而不相似的样本(现在就是我们生成的伪负样本)在特征空间中“远离”。
构建正对和负对:
正对 (Positive Pairs): 对同一个正样本进行两次不同的数据增强,这两者就构成了一个正对。
负对 (Negative Pairs): 将一个正样本的增强版本,与来自其他不同正样本的增强版本(或者我们生成的伪负样本),构成负对。
损失函数: 通常使用InfoNCE(Noise Contrastive Estimation)等损失函数,旨在最大化正对在特征空间中的相似度,同时最小化负对的相似度。

具体操作:

1. 选择一个预训练模型(如ResNet、BERT等)或者从头开始构建一个神经网络。
2. 对收集到的正样本进行各种数据增强,生成“锚点”样本和“正样本”样本。
3. 从未标记数据集中采样一些“负样本”或者生成伪负样本。
4. 将锚点样本、正样本样本和负样本输入模型,获得它们的特征表示。
5. 使用对比学习损失函数进行训练。

二、 半监督学习 (SemiSupervised Learning) 的变种

虽然我们没有明确的负样本,但有些半监督学习技术可以被调整以适应这种情况。

1. 自训练 (SelfTraining) / 伪标签 (PseudoLabeling):

思想: 使用现有数据(即使只有正样本)训练一个初步模型,然后用这个模型去预测未标记数据的标签。将模型预测为“最可能是正样本”的未标记数据,或者模型预测置信度足够高的样本,作为“伪正样本”。然后,将这些伪正样本加入到原始正样本集中,重新训练模型。
在只有正样本场景下的应用:
1. 用原始正样本训练一个模型。
2. 使用这个模型去预测未标记数据。
3. 设定一个置信度阈值。将那些被模型预测为“正类”且置信度高于阈值的未标记数据,视为“伪正样本”。
4. 将原始正样本和这些伪正样本混合,重新训练模型。
5. 重复此过程。
挑战: 如果初始模型不够好,它可能会错误地将一些不属于目标类别的样本标记为“伪正样本”,导致模型性能下降(“漂移”)。因此,谨慎选择置信度阈值和进行迭代管理非常重要。

2. 一类分类 (OneClass Classification) / 异常检测 (Anomaly Detection):

严格来说,这是一种完全不同的问题设定,但思路非常契合“只有正样本”的情况。一类分类的目标是学习一个模型,能够区分出“属于目标类别”的样本和“不属于目标类别”的样本,而我们只知道属于目标类别的数据。

核心思想: 学习一个“边界”,将正样本“包围”起来。任何落在这个边界之外的样本,都被认为是异常的(即负样本)。
常用方法:
支持向量机 (Support Vector Machine, SVM) 的一类版本 (OneClass SVM): 学习一个超平面,将所有正样本映射到一个紧凑的区域,并使这个区域到原点的距离最大化。
高斯混合模型 (Gaussian Mixture Models, GMM) 的一种变体: 假设正样本服从一个或多个高斯分布,然后计算未标记样本属于这些分布的概率。
自编码器 (Autoencoders): 训练一个自编码器来重构正样本。当输入一个不在正样本分布内的样本时,自编码器的重构误差会显著增大。我们将重构误差高于某个阈值的样本视为异常。
OneClass Neural Networks: 直接利用深度学习网络学习一个判别函数,将正样本映射到一个“正常”的区域。

如何将其应用于“有未标记数据”场景:

1. 使用正样本训练一类分类器。
2. 利用训练好的模型对未标记数据进行评分。 评分越高,表示样本越接近正样本的分布。
3. 设定一个阈值,将评分高于阈值的未标记样本,视为“潜在的正样本”或“可接受的样本”。
4. 如果需要一个更精炼的模型,可以将这些潜在的正样本,连同原始正样本,重新用于训练一个更稳健的模型(可能是另一种一类分类器,或者前面提到的自训练方法)。

三、 领域适应 (Domain Adaptation) 的思路

虽然领域适应通常涉及两个有标签的数据集(源域和目标域),但其核心思想——如何让一个模型在数据分布不同的情况下依然有效——也能给我们启发。

如果你的未标记数据与你拥有正样本的数据来自不同的“领域”,但目标是识别同一类事物,那么可以尝试一些无监督领域适应的技术。
例如,生成对抗网络 (GAN) 的思想可以在这里发挥作用。 我们可以尝试构建一个模型,它不仅能识别正样本,还能产生与正样本“相似”的合成样本,同时让一个判别器无法区分这些合成样本和真实的(但未标记的)数据,或者无法区分真实的未标记数据和真实的(但未标签的)负样本。

四、 重要的考量和实践建议

1. 数据质量至关重要: 即使是负样本,其质量也会直接影响模型的性能。如果未标记数据本身充满了噪声或与正样本非常相似,那么任何方法都会面临巨大挑战。
2. 数据增强的策略: 针对特定任务选择合适的数据增强技术是关键。数据增强的目的是生成更多样化的正样本视图,帮助模型学习更具鲁棒性的特征。
3. 评估指标: 在只有正样本的情况下,传统的准确率(Accuracy)或 F1score 可能不再适用。需要关注如 Precision, Recall, ROC AUC, PR AUC 等指标,特别是 Precision,因为它直接衡量了模型预测为正样本的样本中有多少是真正的正样本。
4. 验证集的设计: 如何构建一个可靠的验证集来评估模型性能是一个难题。一种方法是,从原始正样本中划出一部分作为验证集,但这会减少训练数据。另一种更具挑战性的方法是,尝试从未标记数据中手工挑选一小部分“已知是负样本”的样本,构建一个微小的、带有负样本的验证集,但这往往非常困难。
5. 迭代与调优: 很多时候,需要反复试验不同的方法、参数设置和伪负样本生成策略,才能找到最适合当前问题的解决方案。
6. 业务理解: 深入理解业务场景,明确“正样本”到底是什么,以及“负样本”有哪些可能的表现形式,有助于设计更有效的策略。例如,在一个欺诈检测场景中,正样本是已知的欺诈交易,那么哪些类型的交易可以被视为“非欺诈”的(即使它们不被明确标记为负样本)?

举例说明:

假设我们要识别一张网络钓鱼网站的图片(正样本)。我们收集了成千上万张合法网站的图片(未标记数据)。

方法一:伪负样本 + 对比学习。
对每一张钓鱼网站图片进行裁剪、改变颜色、加水印等增强,生成“正对”。
从合法网站图片中随机抽取一部分,或者将合法网站图片进行一些微小改变,作为“负对”的另一半。
使用对比学习模型,让钓鱼网站的各种增强版本在特征空间中聚集,而合法网站的图片(或其变体)则被推开。
方法二:一类分类(如自编码器)。
用所有钓鱼网站图片训练一个自编码器。
用训练好的自编码器去重构每一张合法网站图片。
如果一张合法网站图片的重构误差很高,说明它与钓鱼网站的结构/特征差异很大,可能被误判为“非钓鱼”。反之,如果重构误差很低,说明它与钓鱼网站很相似,有可能被误判为“钓鱼”。
这里的目标是学习一个模型,能够“正确地”重构钓鱼网站图片,而对合法网站图片重构误差较大。

总结:

只有正样本和未标记数据的机器学习,并非无解。它要求我们跳出传统的监督学习框架,巧妙地利用自监督学习、半监督学习中的部分思想,甚至借鉴一类分类或异常检测的思路。核心在于如何从数据本身挖掘或生成有效的监督信号,或者构建一个能够区分“正”与“非正”的判别能力。这是一个需要创造力、实验精神和对数据深刻理解的挑战。

网友意见

user avatar

这个问题超有趣,推荐系统里有类似的场景,即只有用户点击浏览购买的正样本,却没有显性负样本,这样该如何学习呢?

我们假设下面几种方案:

  1. 对于一个用户,用他所有没有过行为的数据作为负样本
  2. 对于一个用户,从他没有过行为的负样本中均匀采样出一些作为负样本
  3. 对于一个用户,从他没有过行为的负样本中均匀采样出一些作为负样本, 且保证正负样本比为1:1
  4. 对于一个用户,从他没有过行为的负样本中均匀采样出一些作为负样本,但采样时,偏重采样那些热门却没有点击的样本。

对于第一种方法,缺点太明显,在实际样本中,负样本数量远远超过正样本,正负样本比例太悬殊,效果最差。

而第三种方法好于第二种,因为第三种样本比例比较平衡。

最有趣的莫过于第四种方案了,在2011年举办的KDD cup的Yahoo!music推荐比赛中,大家发现选取热门却没有行为的样本进行负采样效果最好!

因为热门物品大概率曝光过,而用户没有点,说明用户不感兴趣;而冷门物品,用户压根就没见到过,根本谈不上是否感兴趣。

一个看似简单的办法,背后却是对用户及数据逻辑深刻的洞察,这才是机器学习最有魅力的地方。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有