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