2010-12-01 67 views
2

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

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

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

  3. 你会如何建议这些限制要解决?

所有的建议非常感谢。

回答

4

统计过滤器如Bayesian filters或某些垃圾邮件过滤器所采用的某种混乱版本很容易实现。另外还有很多关于它的在线文档。

最大的缺点是它不能真正发现未知的东西。您可以使用大量已知数据进行训练,以便对新的传入数据进行分类。但是,您可以将传统的垃圾邮件过滤器颠倒过来:训练它识别合法数据而不是非法数据,以便它不识别的内容是异常情况。

+0

谢谢,贝叶斯垃圾邮件过滤器似乎是一个体面的方法。我想知道您是否尝试过卡尔曼滤波器,SVM或其他方法。 – Mikos 2010-12-04 12:29:47

3

有各种类型的异常检测算法,根据数据的类型和所要解决的问题:

  1. 异常的时序信号: 时间序列信号是什么,你可以画作为随时间的线图(例如,CPU利用率,温度,每分钟的电子邮件数量的速率,网页上的访问者的速率等)。算例算法有Holt-Winters,ARIMA模型,Markov模型等等。几个月前我就这个问题进行了讨论 - 它可能会给你更多关于算法及其局限性的想法。 视频为:https://www.youtube.com/watch?v=SrOM2z6h_RQ

  2. 异常的表格数据:这些是你的特征向量来描述一些情况下(例如,转换电子邮件发送到描述它的特征向量:收件人数,字数,大写字母的数量,关键字的数量等...)。给定一大组这样的特征向量,你想要检测一些与其余部分相反的异常(有时称为“异常值检测”)。几乎所有的聚类算法都适用于这些情况,但哪一种最适合取决于特征的类型和它们的行为 - 实值特征,序数,名义值或其他。特征类型决定某些距离函数是否合适(大多数聚类算法的基本要求),某些特征类型的特征比其他算法更好。 最简单的算法是k均值聚类,其中异常样本可能是非常小的聚类或远离所有聚类中心的向量。单侧SVM也可以检测异常值,并且具有选择不同内核的灵活性(以及有效的不同距离函数)。另一种流行的算法是DBSCAN。

  3. 当异常情况已知时,问题就成为监督学习问题,因此您可以使用分类算法并对已知的异常情况进行训练。但是,如前所述 - 它只能检测那些已知的异常情况,并且如果异常情况的训练样本数量非常少,则训练的分类器可能不准确。另外,由于与“无异常”相比,异常数量通常非常少,因此在训练分类器时,您可能希望使用诸如提升/装袋等技术,对异常类进行过度抽样,但优化时间非常短假阳性率。在文献中有不同的技术可以做到这一点 - 我发现很多次都能很好地工作的一个想法是Viola-Jones用于人脸检测的 - 一个分级器的级联。见:http://www.vision.caltech.edu/html-files/EE148-2005-Spring/pprs/viola04ijcv.pdf

(免责声明:我是Anodot,商业公司做实时异常检测时间序列数据的首席科学家数据)。