论文读后总结1:一种对多元数据非监督异常检测算法的对比评估
论文标题:A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms for Multivariate Data
对比的算法:
摘要
1. 异常检测只应用于无标签的数据,也就是说,只能运用无监督学习算法。
2. 异常检测应用领域有:网络入侵检测(network intrusion detection)、欺诈检测(fraude detection)、生命科学和医学领域
3. 此论文评估的能反映:不同方法的优势和劣势、性能、计算量(computational efforts)、参数设置的影响、全局/局部异常的检测行为
4. 此论文最后给出了:典型实战任务中算法选择的建议
介绍
- anomaly detection=outlier detection,异常值=离群点
- 异常值的定义:样本中,明显偏离其他值的实例
- 异常值的特点:异常检测的原始用途:data cleansing,后者的定义是:消除outliers,因为模式识别算法(pattern recognition algorithm)对异常值非常敏感
- 特征上不同于其他数据
- 数据集中只有少量的异常值
- 异常值检测目前的应用领域:入侵检验、欺诈检验、数据防泄密、医学应用和生命科学领域异常检验算法的选取需要考虑到算法的时效性和检测性能。可以依据检测出异常的时间点分为:事后分析(post-incident analysis)、准实时监测、预先警告
- 在入侵检验中的应用:异常检验在这个领域应用最多,通常基于网络或主机。此时的异常检验被供应商称为行为分析(behavioral analysis),为了实时处理海量数据,往往采用的是简单而快速的算法。通常使用模式匹配来检测已知的威胁,用额外的异常检验模块尝试识别未知的可疑行为
- 在欺诈检验中的应用:通常分析日志数据,检测欺诈性会计;或通过信用卡支付日志检查滥用或丢失的信用卡。
- 在数据防泄密(data leakage prevention, DLP)的应用: 类似于欺诈检验,但要求准实时分析,从而可作为预防措施
- 在医学应用领域和生命科学的应用:病人监护(借助ECG信号或其他传感器)、分析医学图像(如CT)以检测畸形细胞或肿瘤。在生命科学,异常检验也可用来寻找突变体
- 其他领域,如:利用监视摄像数据分析可疑的行为,检测耗能异常,监控移动通信网络,异常识别伪造文件等等
异常检测分类
1. 异常检验设置
不同于分类设置,取决于可获得的标签,可分为三大类:
1.1 监督异常检测:
类似于模式识别,但他的类通常极其不平衡。C4.5决策树分类算法不适用,但SVM和ANN(Artificail Neural Networks)还行。由于通常异常不是提前知道的,或者是测试阶段实时产生的,这种设置通常意义不大。
1.2 半监督异常检测:
1.3 无监督异常检验:
2. 异常检测算法输出
3. 异常类型
- 点异常检测
- 集合异常检测(可通过相关性、分组与合计来产生新特征,再使用点异常检测。需要有对数据集非常熟悉,这个过程也叫做数据视图的产生)
- 情境异常检测(可通过加入改变情境的因素作为新特征,再使用点异常检测)
4. 标准化(Normalization)
相关工作
无监督异常检测算法
1. k-NN全局异常检测(全局,近邻)
2. LOF局部异常因子(局部,近邻)
3. COF基于连通性的异常因子(局部,近邻)
类似于LOF,但密度估计不一样。LOF是基于欧氏距离的,即默认数据是以球形分布的,假设是特征是线性相关的,LOF就无能为力。
COF中,近邻的局部密度是基于最短路径方法求得的,亦称链式距离(链接当前实例和所有k个近邻的最短距离之和)。
4. INFLO受影响的异常(局部,近邻)
算法使用k近邻和反向近邻集
(待续...)
5. LoOP局部异常概率(局部,近邻)
6. LOCI局部关联积分(局部,近邻)
7. aLOCI近似局部关联积分(局部,近邻)
8. CBLOF基于聚类的局部异常因子(全局,聚类)
9. LDCOF局部密度簇异常因子(局部,聚类)
10. CMGOS基于聚类的多变量高斯离群点得分(局部,聚类+子空间)
基于聚类的异常检测的另一个加强版。
11. HBOS基于直方图的离群点得分(全局,统计)
假定特征独立,这貌似会带来不利影响,但有个明显的优势:处理速度大大提高。(基于近邻的计算要花超过23小时的数据,HBOS可以在1分钟内完成)
分别为每个特征作一个直方图,对某个实例,连乘所有特征中他的所在的柱的反高度(代表密度估计)。这类似于分类算法中的朴素贝叶斯算法(连乘所有独立特征的概率)。
在半监督异常检测中非常受欢迎。
两种作图方式:1.固定的柱宽度。2.柱个数大致相同,但导致不同的柱宽度。 当有大量离群值的时候,第二种方法更强固。
这篇论文用的是第2种作图方式
12. One-Class SVM(分类器)
常被用作半监督异常点监测,但一开始是设计为无监督算法的(使用软余量)。
在无异常值的数据集中训练one-class SVM,然后,SVM给测试集中的异常值和普通数据分类。
这篇论文使用的是无监督算法:普通的one-class SVM和拓展的η one-class SVM
13. rPCA强固的主成分分析(子空间)
主成分是协方差矩阵的特征向量,因此和CMGOS一样计算有困难(异常值对协方差矩阵有很大的影响,密度评估可能不准确)。
提出一种强固的版本,即rPCA,它基于马氏距离计算两次协方差矩阵
一旦确定了主成分,问题就到了选取哪个特征值来算得分上了。用主要成分会展示出相对大部分数据的全局偏离,然而使用次要成分会表示出较小的局部偏差
审查算法的复杂性和实现
1. 基于近邻的算法中,主要时间都花在寻找近邻上(其他的,如计算密度或LOF只需要不到1%的运行时,可忽略不计)。而寻找近邻的时间复杂度除了LOCI为O(n3),其他都是O(n2)。
基准数据集
数据集总结
数据集涵盖了广泛的应用领域,如医疗应用、入侵检测、图像和语音识别以及复杂系统的分析。
作者发布了数据集,以鼓励研究人员将其提出的算法与此工作进行比较。
比较评估
对无监督学习,一种常见的评估策略是:将结果根据异常值得分进行排名,然后迭代地从第一名到最后一名设置阈值。这会形成N个元祖值(真阳率和假阳率),可得一个ROC曲线。ROC的积分AUC,可用作检验性能措施。
一个对AUC不错的解释是:一个算法分配给“随机选取的普通实例的score低于随机选取的异常实例的score”的概率。因此,作者认为这是一个不错的评估方式。
AUC缺点是:1. 只考虑排名,没考虑得分之间的相对差异。2. 不适合不平衡类问题。 但基于AUC的评估依然是无监督异常检测的事实标准。
调节AUC曲线的方法 | |
无监督 | 通过改变排好序的结果列表中的离群阈值 |
监督 | 通过改变某个参数,如k |
基于近邻的算法的结果
1. LOCI:计算量大、不随着k值改变、最不推荐、不稳定。
2. aLOCI:非确定的(20次求平均值)、最不推荐、不稳定。
3. 两个k-NN和LOF变体,结果差不多。
4. 对于全局异常检测任务中,局部异常只检测算法效果不佳。
5. 在高维数据集上,k值的取值要偏小些才能达到稍微好点的效果(AUC可达0.78),k的增大会造成AUC的迅速下跌,一般不要超过5。
基于聚类的算法的结果
1. CBLOF在大多数情况下表现不好,尤其是作用在小数据集上。可能是由于该算法算分时用簇成员数量加权造成的,因为去掉全中后的uCBLOF算法会好很多。
2. 基于近邻的算法的结果中的第4点结论
3. CMGOS-Red和CMGOS-MCD表现都不错,但CMGOS-MCD在高维度的数据集上不能在规定时间内完成,因此更推荐前者。
4. 总体上,基于近邻>基于聚类
其他算法的结果
1. HBOS,4个数据集当中(共10个数据集)都效果最佳,并且大数据集上效果几近完美。
2. cPCA表现一般,例外:在其中一个(shuttle)数据集下能和HBOS并列第一
3. one-class SVM算法表现平平。与加强版的gamma one-class SVM相比,其实还是前者更好。
算法的计算时间比较
1. 对于小数据集,除苛刻的LOCI外,小数据集运行足够快,可以把重心放在检测性能上
2. 对于大型数据,相差可以横跨4s到6d以上(HBOS vs. CMGOS-MCD)
3. 运行时: 基于近邻>基于聚类 (除了CMGOS-MCD)
4. HBOS迄今为止最快
5. 不推荐使用CMGOS-MCD
6. 基于SVM的算法运行时间相当高,主要用于具有二次复杂度的自动伽马调谐
总结
上面提到过的不写。
1. 在准实时场景中,基于聚类的异常检测可能更好。
2. 在基于最近邻的方法中:全局k -NN算法是一个很好的候选者。虽然LoOP大多情况下性能最好,但在某些数据集上表现不好。特别是对于全局异常检测问题,该算法应该完全避免。如果提前知道要解决的问题涉及局部异常,LOF也是一个很好的候选者。
3. 在基于聚类的算法中:简单的uCBLOF算法还显示了所有数据集的平均良好性能,CMGOS-Reg在大多数数据集中似乎也是可靠的。由于算法设计缺陷,应该避免原始的CBLOF算法。具有基于子空间的MCD密度估计的CMGOS不应该是第一选择,因为密度估计太慢并且检测性能更差。
4. HBOS又快又好,在大型数据集中强烈推荐!
5. 对具有400维度的数据集来说,只有当k<5时,基于邻近的算法才能有用。而对于无监督算法,全军覆没。
6. 作为算法选择的一般总结,建议使用基于近邻的方法,特别是k -NN用于全局任务,LOF用于本地任务,而不是基于聚类的方法。如果计算时间是必要的,HBOS是一个很好的候选者,特别是对于较大的数据集。