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