【问题标题】:Machine Learning - one class classification/novelty detection/anomaly assessment?机器学习——一类分类/新奇检测/异常评估?
【发布时间】:2016-10-13 00:41:45
【问题描述】:

我需要一个满足以下要求的机器学习算法:

  • 训练数据是一组特征向量,都属于同一个“正”类(因为我无法生成负数据样本)。
  • 测试数据是一些可能属于也可能不属于正类的特征向量。
  • 预测应该是一个连续值,应该表示与正样本的“距离”(即0表示测试样本明显属于正类,1表示明显负,但0.3表示有点正)

一个例子: 假设特征向量是二维特征向量。

正向训练数据:

  • (0, 1), (0, 2), (0, 3)

测试数据:

  • (0, 10) 应该是一个异常,但不是一个明显的异常
  • (1, 0) 应该是异常,但“等级”高于 (0, 10)
  • (1, 10) 应该是异常,具有更高的异常“等级”

【问题讨论】:

  • 这个想法是检查与正例的“距离”(如在异常检测中)。我实际上正在寻找一种以百分比表示的异常检测算法(异常的规模是多少)
  • 你能说得更具体一些吗,例如你的数据是关于什么的?您能否提供一些示例输入数据以及您期望的结果?
  • @miraculixx 我添加了一个示例

标签: machine-learning unsupervised-learning novelty-detection anomaly-detection


【解决方案1】:

您描述的问题通常被称为异常值、异常或新奇检测。有许多技术可以应用于这个问题。可以在here 找到对新颖性检测技术的一个很好的调查。这篇文章对这些技术进行了彻底的分类,并对每种技术进行了简要描述,但作为开始,我将列出一些标准技术:

  • K-nearest neighbors - 一种简单的基于距离的方法,它假设正常数据样本靠近其他正常数据样本,而新样本远离正常点。 KNN 的 Python 实现可以在 ScikitLearn 中找到。
  • Mixture models(例如高斯混合模型)- 对数据的生成概率密度函数建模的概率模型,例如使用高斯分布的混合。给定一组正常数据样本,目标是找到概率分布的参数,以便最好地描述样本。然后,使用新样本的概率来判断它是属于分布还是异常值。 ScikitLearn 实现 Gaussian Mixture Models 并使用期望最大化算法来学习它们。
  • 一类支持向量机 (SVM) - 标准 SVM classifier 的扩展,它试图找到将正常样本与未知新样本分开的边界(在经典方法中,通过最大化正常样本和空间原点之间的边距,投影到所谓的“特征空间”)。 ScikitLearn 有一个one-class SVM 的实现,可以让你轻松使用它,还有一个不错的example。我附上了那个例子的图来说明边界一类 SVM 发现“围绕”正常数据样本:

【讨论】:

  • 关于混合模型,当你说“用一个新样本的概率来判断它是属于分布还是离群值”时,这个概率到底是多少?例如,sci-kit GMM 的 predict_proba 方法 (scikit-learn.org/stable/modules/generated/…) 返回一个总和为 1 的概率向量。我希望一个新奇事物会返回一个所有分量概率都非常低的向量,因此不一定总和为 1。跨度>
  • 在 2022 年,一项包含传统和深度学习方法的综合调查是我发现的非常有用的信息,这是arxiv.org/abs/1901.03407v2。顺便说一句,我没有从推广中获得任何好处,我只是通过帖子,我认为更新它会很好:)
猜你喜欢
  • 2013-05-08
  • 2020-02-08
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 2017-12-09
  • 2020-05-04
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多