异常检测算法

时间:2010-12-01 21:36:19

标签: algorithm filter filtering heuristics

我的任务是使用机器学习算法从各种格式的数据中检测异常(已知或未知) - 例如电子邮件,即时通讯等。

  1. 您最喜欢和最有效的异常检测算法是什么?

  2. 它们的局限性和甜点是什么?

  3. 您如何推荐这些限制?

  4. 非常感谢所有建议。

2 个答案:

答案 0 :(得分:4)

Bayesian filters这样的统计过滤器或某些垃圾邮件过滤器使用的一些混蛋版本很容易实现。此外,还有很多关于它的在线文档。

最大的缺点是它无法真正发现未知事物。您可以使用大量已知数据对其进行训练,以便对新传入的数据进行分类。但是你可以颠倒传统的垃圾邮件过滤器:训练它识别合法数据而不是非法数据,这样它所识别的任何东西都是异常的。

答案 1 :(得分:3)

有各种类型的异常检测算法,具体取决于数据类型和您要解决的问题:

  1. 时间序列信号异常: 时间序列信号是您可以随时间绘制的线图(例如,CPU利用率,温度,每分钟电子邮件数量,网页上访问者的比率等)。示例算法是Holt-Winters,ARIMA模型,Markov模型等。几个月前我就这个主题发表了演讲 - 它可能会给你更多关于算法及其局限性的想法。 该视频位于:https://www.youtube.com/watch?v=SrOM2z6h_RQ

  2. 表格数据中的异常:这些是您具有描述某些内容的特征向量的情况(例如,将电子邮件转换为描述它的特征向量:收件人数量,单词数量,大写单词数量,计数关键字等....)。给定一大组这样的特征向量,您想要检测一些与其他特征向量相比的异常(有时称为"异常值检测")。几乎任何聚类算法都适用于这些情况,但哪一种最适合取决于特征的类型及其行为 - 实值特征,序数,名义或其他任何特征。特征类型确定某些距离函数是否合适(大多数聚类算法的基本要求),并且某些算法在某些类型的特征上比其他算法更好。 最简单的算法是k-means聚类,其中异常样本可能是非常小的聚类或远离所有聚类中心的向量。单侧SVM还可以检测异常值,并且可以灵活地选择不同的内核(以及有效的不同距离函数)。另一个受欢迎的算法是DBSCAN。

  3. 当异常已知时,问题就变成了监督学习问题,因此您可以使用分类算法并在已知的异常示例上训练它们。然而,如上所述 - 它只会检测那些已知的异常,如果异常的训练样本数量非常少,则训练的分类器可能不准确。此外,因为异常的数量通常非常小,与#34; no-anomalies"相比,在训练分类器时你可能想要使用诸如增强/装袋之类的技术,对异常类的过度采样,但优化非常小的误报率。在文献中有各种各样的技巧 - 我发现很多次工作的一个想法是Viola-Jones用于面部检测的 - 一系列分类器。见:http://www.vision.caltech.edu/html-files/EE148-2005-Spring/pprs/viola04ijcv.pdf
  4. (免责声明:我是Anodot的首席数据科学家,Anodot是一家对时间序列数据进行实时异常检测的商业公司。)