我的任务是使用机器学习算法从各种格式的数据(例如电子邮件、即时消息等)中检测异常(已知或未知)。
您最喜欢和最有效的异常检测算法是什么?
他们的局限和最佳点是什么?
你会建议如何解决这些限制?
非常感谢所有建议。
我的任务是使用机器学习算法从各种格式的数据(例如电子邮件、即时消息等)中检测异常(已知或未知)。
您最喜欢和最有效的异常检测算法是什么?
他们的局限和最佳点是什么?
你会建议如何解决这些限制?
非常感谢所有建议。
统计过滤器,如贝叶斯过滤器或某些垃圾邮件过滤器使用的一些混蛋版本很容易实现。此外,还有很多关于它的在线文档。
最大的缺点是它无法真正检测到未知事物。您使用大量已知数据样本对其进行训练,以便它可以对新传入的数据进行分类。但是你可以把传统的垃圾邮件过滤器颠倒过来:训练它识别合法数据而不是非法数据,这样它不能识别的任何东西都是异常的。
有多种类型的异常检测算法,具体取决于数据类型和您要解决的问题:
时间序列信号中的异常:时间序列信号是您可以随时间绘制为线图的任何内容(例如,CPU 利用率、温度、每分钟电子邮件数量的速率、网页上的访问者速率等)。示例算法有 Holt-Winters、ARIMA 模型、马尔可夫模型等。几个月前我就这个主题做了一次演讲——它可能会给你更多关于算法及其局限性的想法。视频位于:https ://www.youtube.com/watch?v=SrOM2z6h_RQ
表格数据中的异常:在这些情况下,您有描述某事的特征向量(例如,将电子邮件转换为描述它的特征向量:收件人数、字数、大写字数、关键字计数等。 ..)。给定大量此类特征向量,您希望检测一些与其他特征向量相比异常的情况(有时称为“异常值检测”)。几乎任何聚类算法都适用于这些情况,但哪一种最适合取决于特征的类型及其行为——实值特征、序数、名义或其他任何特征。特征的类型决定了某些距离函数是否合适(大多数聚类算法的基本要求),并且某些算法在某些类型的特征上比其他算法更好。最简单的算法是 k-means 聚类,其中异常样本要么是非常小的聚类,要么是远离所有聚类中心的向量。单面支持向量机也可以检测异常值,并且可以灵活地选择不同的内核(以及有效的不同距离函数)。另一个流行的算法是 DBSCAN。
(免责声明:我是 Anodot 的首席数据科学家,这是一家为时间序列数据进行实时异常检测的商业公司)。