本文主要是介绍论文阅读: [ACM'09]Anomaly detection- A survey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
写在前面:
最近老大要求调研异常检测基本算法,所以近期阅读了一些论文,搜集了一些资料,想分享出来~
这一篇survey比较经典,总结的很全,建议想了解异常检测领域的小白都去研读一下,下面是我看论文记的一些关键点,可以说是直译了
,如果不想看英文原作,可以参考这个
论文阅读: [ACM'09]Anomaly detection- A survey
挑战:
- 正常数据和异常数据之间的界限不是特别精确
- 异常行为会自适应变化来逃避异常检测,即当前的异常检测方法不一定会适应未来的方法
- 用于训练和验证的标记数据很难获得,数据不均衡
数据输入:
- 数据之间没有关联:point data 单个数据点
- 数据之间有关联: 序列数据(时间序列,基因组)、空间数据(交通)、图数据(用节点表示实例,节点之间基于某种关系有边相连)
异常类型:
- 单个点异常,区别于其他数据
- 上下文异常,比如在某个时间点有这些数据是正常的(世界杯期间登录微博),某些时间点是异常的(某个用户在寒冬腊月凌晨三点登录微博)
- 集合异常,数据之间存在关联,集合异常
在具体的场景,要识别数据属于什么类型,是否存在依赖关系,异常是什么类型
模型类型:
有监督、半监督、无监督(默认的基本假设:正常样本出现的比异常样本更多)
模型输出:
score or label
异常检测方法:
1. 分类方法:训练的计算复杂性取决于分类算法的复杂性,数据预测会很快,模型可以预训练好。
关联规则挖掘是一种无监督形式。(???我觉得并不是,应该算半监督,如果学习的异常数据的关联规则,那就算有监督了)
2.近邻方法(无监督,完全是数据驱动的):
正常的数据分布很密集,异常的数据之间分布很分散;具体的检测方法包括两种:(1)基于相邻的k个数据进行打分(2)基于样本所在区域的密度进行打分估计。 计算复杂性太高,每一个样例都要计算一遍距离,另外如何定义一个距离度量也是很复杂的问题,会直接影响算法效果。
3. 聚类方法
有三种假设;计算复杂性取决于使用哪种聚类算法;预测阶段很快,只需要将样例与聚类比较。
常用的聚类方法都可以做
4. 基于统计的方法,采用前提是数据服从一个特定的分布,对于高维数据不合适。
方法很多,但是实际要看数据分布;有一个HBOS还可以
5. 基于信息论的方法,寻找一个数据子集使得信息增益最大(复杂性减少,一些复杂性度量)。计算复杂性太大了
用的少
6. 基于谱聚类的方法,将数据压缩到一个保持了最大方差的低维空间,在子空间,异常数据和正常数据有明显区分。
PCA 用的很多,比如Netflix Surus的异常检测是基于rPCA
总结:
近邻和聚类算法对于高维数据不适合,且很难确定一个合适的距离度量;
PCA适合高维数据,其划分效果取决于映射过的数据是否可分。
对于异常数据足够多的场景,监督和半监督更适合。
这篇关于论文阅读: [ACM'09]Anomaly detection- A survey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!