构建一个只有正数据和未标记数据的二元分类器

数据挖掘 分类 半监督学习
2021-10-04 05:18:38

我有 2 个数据集,一个包含我想要检测的正面实例,另一个包含未标记的实例。我可以使用哪些方法?

例如,假设我们想了解基于一些结构化电子邮件特征的垃圾邮件检测。我们有一个包含 10000 封垃圾邮件的数据集,以及一个包含 100000 封电子邮件的数据集,我们不知道它们是否为垃圾邮件。

我们如何解决这个问题(无需手动标记任何未标记的数据)?

如果我们有关于未标记数据中垃圾邮件比例的额外信息(即,如果我们估计 100000 封未标记电子邮件中有 20-40% 是垃圾邮件怎么办)?

3个回答

我的建议是尝试在您的未标记数据上构建某种聚类,该聚类在某种程度上近似于标记数据集。基本原理或多或少如下:

  • 您有一些特征向量来表示您的文档
  • 基于该特征向量,您可以提出许多不同的聚类,包括模糊、粗糙或基于类的聚类方法
  • 知道一个正例的样子,你可以快速评估一个集群与你的正例的整体相似度
  • 知道实际上应该只有两个集群,您可以调整集群方法上的超参数,使上述两个指标越来越接近满意
  • 使用这两个集群,您可能拥有一个标记数据集的近似值,然后您可以将其用作各种银标准语料库来实际训练您的模型

希望这是有道理的,如果您专门寻找聚类算法,我个人喜欢在这种情况下可能很好的一些算法是FLAMEtsne或者,在 python 中查看壮​​观的gensim库将使您对您正在寻找的集群有很长的路要走。

希望对您有所帮助且有意义,如果您有任何问题,请发表评论。

您的问题属于PU 学习的框架(只有正面,很多未标记)。

它也接近于更常见的 半监督学习框架(很少有正面和负面,很多未标记)。

您可以在现场查阅许多调查论文。

该领域的一种经典方法,也像您的案例一样在垃圾邮件上进行了测试,是共同培训 在共同培训中,您建立了两个独立的学习者(例如,一个基于邮件内容,一个基于发送方案)并且您使用其中一个训练另一个的结果,反之亦然。

训练 2 个生成模型,每个数据集一个(仅垃圾邮件,垃圾邮件加火腿),这将为您提供从训练数据的相同概率分布中提取数据点的概率。根据哪个模型为您提供从用于训练它的训练数据产生的文档的最高概率,将电子邮件分配为垃圾邮件或火腿。示例生成模型是 RBM,自动编码器(在这种情况下,哪个模型具有最低的重建误差)。可能还有一些贝叶斯生成模型也会根据一些训练数据为数据点分配概率。

不过,最好的选择是花时间整理第二个仅包含火腿的数据集。这将为您提供更高的分类准确性。假设垃圾邮件与垃圾邮件的比例较低,那应该不会太难。如果您缺乏时间或资源(或实习生\研究生或其他廉价劳动力),您甚至可以使用 Mechanical Turk。