背景
问题是:
- 黑匣子每天输出一个新数字。
- 这些数字已经记录了一段时间。
- 检测黑匣子中的新数字何时落在该时间段内建立的数字模式之外。
数字是整数,时间段是一年。
问题
什么算法可以识别数字中的模式?
模式可能很简单,比如总是升序或降序,或者数字可能落在一个狭窄的范围内,等等。
想法
我有一些想法,但不确定最佳方法或现有的解决方案:
- 机器学习算法?
- 神经网络?
- 对正常数和异常数进行分类?
- 统计分析?
最佳答案
集群您的数据。
如果您不知道您的数据有多少种模式,请使用高斯混合模型 (GMM) 和评分函数(例如贝叶斯信息准则 (BIC)),这样您就可以自动检测可能的数量数据中的集群。如果您不知道 k
可能是什么值,我推荐这个而不是 k-means。为过去一年的数据构建 GMM 后,给定一个新数据点 x
,您可以计算它由任何一个集群生成的概率(由高斯建模GMM)。如果您的新数据点由您的任何一个集群生成的概率很低,则它很可能是真正的异常值。
如果这听起来有点复杂,您会很高兴地知道用于自动集群识别的整个 GMM + BIC 程序已经在 优秀 MCLUST 中为您实现。 R 的包。我已经多次使用它来解决此类问题并取得了巨大成功。
它不仅可以让您识别异常值,如果您在某个时候需要(或想要)此功能,您还可以将 p 值放在作为异常值的点上。
关于algorithm - 什么是检测异常的好算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770678/