样本不均时,如何处理(PU learning/OneClassSvm/AutoEncoder)

文章目录

  • 1-背景
  • 2-异常检测OneClassSvm
    • 3-PU Learning
      • 3.0 PU learning的一些技巧
      • 3.1 直接利用标准分类方法
      • 3.2 PU bagging
      • 3.3 两步法
  • 4-AutoEncoder
  • 5-参考文献

1-背景

在实际业务中,尤其在工业领域,存在着大量未标记的数据。经常情况是,只有正样本和少部分故障样本(负样本),或者有大量的未标记样本(包含正负样本)
在此种情况下,如何做分类呢,比如故障分类等等。经过调研和咨询,发现了几种方法,跟大家分享下。
以下部分,不具体讲解原理,仅是把方法提出来,具体内容请看参考链接。

2-异常检测OneClassSvm

有一种思路是,将负样本当做是异常处理。将分类问题,转换为异常检测问题。异常检测的方法有很多,具体问题要具体分析了。
这里提供一种方法,一分类方法OneClassSvm,此种方法可以对单一类别进行训练。
它不仅适用于单变量,也适用于多变量。

3-PU Learning

有许多只有正样本和大量未标记样本的例子。这是因为负类样本的一些特点使得获取负样本较为困难。比如:
负类数据不易获取。
负类数据太过多样化。
负类数据动态变化。
有研究人员开始关注PU Learning(Positive-unlabeled learning),即在只有正类数据和无标记数据的情况下,训练binary classifier。

3.0 PU learning的一些技巧

人们对PU learning的方法一直非常感兴趣。 由于标准机器学习问题(利用大量正面和负面样本用于训练模型)有了充分的发展,因此在监督学习的基础上,有许多方法经过巧妙调整可以来进行PU learning。
下面对这些技巧进行简要的总结。

3.1 直接利用标准分类方法

直接利用标准分类方法是这样的:将正样本和未标记样本分别看作是positive samples和negative samples, 然后利用这些数据训练一个标准分类器。分类器将为每个物品打一个分数(概率值)。通常正样本分数高于负样本的分数。因此对于那些未标记的物品,分数较高的最有可能为positive。
这种朴素的方法在文献Learning classifiers from only positive and unlabeled data KDD 2018 中有介绍。该论文的核心结果是,在某些基本假设下(虽然对于现实生活目的而言可能稍微不合理),合理利用正例和未贴标签数据进行训练得到的标准分类器应该能够给出与实际正确分数成正比的分数。

3.2 PU bagging

一个更加复杂的方法是bagging的变种:
通过将所有正样本和未标记样本进行随机组合来创建训练集。
利用这个“bootstrap”样本来构建分类器,分别将正样本和未标记样本视为positive和negative。
将分类器应用于不在训练集中的未标记样本 - OOB(“out of bag”)- 并记录其分数。
重复上述三个步骤,最后为每个样本的分数为OOB分数的平均值。
这是一种bootstrap的方法,可以理解为之前我们会想到随机抽取一部分未标记样本U作为负样本来训练,在这里会设置迭代次数T,根据正样本的个数,每次都随机可重复地从U中选取和P数量相同的样本作为负样本N,并打上标签,每次迭代都重复进行取样->建模->预测的过程,最后的预测概率使用T次迭代的平均值作为最终预测的概率。
参考文献:A bagging SVM to learn from positive and unlabeled examples ,PRL 2014

3.3 两步法

大部分的PU learning策略属于 “two-step approaches”。该方法的思想也很直观:
识别可以百分之百标记为negative的未标记样本子集(这些样本称为“reliable negatives”。)所谓的百分之百只是一个夸张的说法,通常我们可以用正样本和未标记样本训练一个模型,然后对未标记样本进行预测,按照概率排序,选取前面的样本作为reliable negatives。
使用正负样本来训练标准分类器并将其应用于剩余的未标记样本。
通常,会将第二步的结果返回到第一步并重复上述步骤。即每一轮循环都会找出那些所谓百分之百的正样本和负样本,加入到训练集里,重新预测剩余的未标记样本,直到满足停止条件为止。
参考文献:An Evaluation of Two-Step Techniques for Positive-Unlabeled Learning in Text Classification

https://blog.csdn.net/sinat_26917383/article/details/76647272
https://blog.csdn.net/anshuai_aw1/article/details/89475986

4-AutoEncoder

自编码的原理就不介绍了,是一种无监督的方法,可以训练网络,输入一种类别,输出同样的数据。最后输入与输出,求误差,如果误差在阈值范围内,则是此种类别,如果不在这个范围内,就属于其他类别。
示例:
https://github.com/curiousily/Credit-Card-Fraud-Detection-using-Autoencoders-in-Keras/blob/master/fraud_detection.ipynb
https://github.com/kskaran94/Extreme-rare-Classification/blob/master/Extreme_Rare_Classification_v2.ipynb,示例内容,清晰明了
https://www.jianshu.com/p/eacb36e201df,原理

5-参考文献

【1】Positive-unlabeled learning
【2】PU learning techniques applied to artificial data
【3】Masashi Sugiyama’s Publications
【4】PU Learning - Learning from Positive and Unlabeled Examples
【5】只有正样本和未标签数据的机器学习怎么做?
【6】Positive-unlabeled learning
【7】PU_Learning_simple_example.ipynb

你可能感兴趣的:(机器学习)