zoukankan      html  css  js  c++  java
  • 论文读后总结1:一种对多元数据非监督异常检测算法的对比评估

    论文标题:A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms for Multivariate Data

    对比的算法:

     

     

    摘要

    1. 异常检测只应用于无标签的数据,也就是说,只能运用无监督学习算法。

    2. 异常检测应用领域有:网络入侵检测(network intrusion detection)、欺诈检测(fraude detection)、生命科学和医学领域

    3. 此论文评估的能反映:不同方法的优势和劣势、性能、计算量(computational efforts)、参数设置的影响、全局/局部异常的检测行为

    4. 此论文最后给出了:典型实战任务中算法选择的建议

    介绍

    1. anomaly detection=outlier detection,异常值=离群点
    2. 异常值的定义:样本中,明显偏离其他值的实例
    3. 异常值的特点:异常检测的原始用途:data cleansing,后者的定义是:消除outliers,因为模式识别算法(pattern recognition algorithm)对异常值非常敏感
      1. 特征上不同于其他数据
      2. 数据集中只有量的异常值
    4. 异常值检测目前的应用领域:入侵检验、欺诈检验、数据防泄密、医学应用和生命科学领域异常检验算法的选取需要考虑到算法的时效性和检测性能。可以依据检测出异常的时间点分为:事后分析(post-incident analysis)、准实时监测、预先警告
      1. 在入侵检验中的应用:异常检验在这个领域应用最多,通常基于网络或主机。此时的异常检验被供应商称为行为分析(behavioral analysis),为了实时处理海量数据,往往采用的是简单而快速的算法。通常使用模式匹配来检测已知的威胁,用额外的异常检验模块尝试识别未知的可疑行为
      2. 在欺诈检验中的应用:通常分析日志数据,检测欺诈性会计;或通过信用卡支付日志检查滥用或丢失的信用卡。
      3. 在数据防泄密(data leakage prevention, DLP)的应用: 类似于欺诈检验,但要求准实时分析,从而可作为预防措施 
      4. 在医学应用领域和生命科学的应用:病人监护(借助ECG信号或其他传感器)、分析医学图像(如CT)以检测畸形细胞或肿瘤。在生命科学,异常检验也可用来寻找突变体
      5. 其他领域,如:利用监视摄像数据分析可疑的行为,检测耗能异常,监控移动通信网络,异常识别伪造文件等等

    异常检测分类

    1. 异常检验设置

    不同于分类设置,取决于可获得的标签,可分为三大类:

    1.1 监督异常检测:

    类似于模式识别,但他的类通常极其不平衡。C4.5决策树分类算法不适用,但SVM和ANN(Artificail Neural Networks)还行。由于通常异常不是提前知道的,或者是测试阶段实时产生的,这种设置通常意义不大。

    1.2 半监督异常检测:

    用无异常值的训练集训练出模型,从而偏离此模型的实例的为异常值。代表算法:One-class SVMs和autoencoders

    1.3 无监督异常检验:

    无标签,训练集和测试集无区别。用距离和密度判断是否是异常。本论文以无监督异常检测为研究对象。
     

    2. 异常检测算法输出

    通常,监督用label,半监督或无监督用score或置信值(因为实战中,只有top异常被报告给用户)。本论文使用score作为输出,并对结果进行排名用以性能评估。当然,通过设置阈值可以将排名变为标签。
     

    3. 异常类型

    全局异常、局部异常。
    微型簇。

     

    按照异常的分布状态可以分为:
    1. 点异常检测
    2. 集合异常检测(可通过相关性、分组与合计来产生新特征,再使用点异常检测。需要有对数据集非常熟悉,这个过程也叫做数据视图的产生)
    3. 情境异常检测(可通过加入改变情境的因素作为新特征,再使用点异常检测)

    4. 标准化(Normalization)

    也需要充分了解数据集。本论文采用典型的最小值最大值正规化和标准化。

    相关工作

    本论文只处理表列数据。略。

    无监督异常检测算法

    分为:a.基于近邻的技术 b.基于聚集的方法 c.统计算法 d.子空间技术
     
    本论文主要研究前两种以及实际运用最广泛的种类

    1. k-NN全局异常检测(全局,近邻)

    score有两种计分方法:kth-NN 和 k-NN(实际更倾向这个)。注意:不同于k-NN分类算法。
    k一般属于(10,50)。不同于分类算法,无监督下,k的值不能用交叉验证。这篇论文用不同的k值和它们的平均值进行评估
     

    2. LOF局部异常因子(局部,近邻)

    step1. 得到记录x的k近邻Nk。
    step2. 计算x的局部可达密度LRD,d(·)为x与每个近邻的可达距离。x越偏离,可达距离之和越大,局部可达密度越小。
    step3. 计算x的局部异常因子LOF,这里还要算出x的各个近邻的局部可达密度LRD,用它们分别比上x的局部可达密度LRD(x)。x的可达密度LRD越小,局部异常因子LOF越大。因此,正常实例的score(LOF值)接近于1,反之,大于1
     
    计算LOF的一种集成策略是计算LOF-UB。变化k,使得score最高,取此值。
     

    3. COF基于连通性的异常因子(局部,近邻)

    类似于LOF,但密度估计不一样。LOF是基于欧氏距离的,即默认数据是以球形分布的,假设是特征是线性相关的,LOF就无能为力。

    COF中,近邻的局部密度是基于最短路径方法求得的,亦称链式距离(链接当前实例和所有k个近邻的最短距离之和)。

     

    4. INFLO受影响的异常(局部,近邻)

    应用场景:当两个不同密度的数据集很靠近的时候

    算法使用k近邻和反向近邻集

    (待续...)

    5. LoOP局部异常概率(局部,近邻)

    不算score,算概率。也许更方便比较不同数据集的异常记录。

    6. LOCI局部关联积分(局部,近邻)

    舍弃参数k,采用半径r,通过改变半径r,得到最高分,取这个最高分作为score。因此,复杂度由以前的O(n2)变为O(n3)
    类似于LoOP,用半高斯分布评估局部密度,且使用的是近邻个数,而不是距离。
    不同于LOCI,比较的是两个不同尺寸的近邻而不是局部密度的比例
    引入alpha控制不同近邻的比例。
     

    7. aLOCI近似局部关联积分(局部,近邻)

    解决LOCI时间复杂度过高的问题
    (待续。。。)

    8. CBLOF基于聚类的局部异常因子(全局,聚类)

    k-means因其线性的计算复杂度在实际中最常被使用,是非确定性的算法(每次运行结果可能不同)。
    score=某个实例到聚类中心的距离*簇成员数
    此论文作者反对CBLOF提出者的“使用聚类成员数作为转换系数能够估计聚类的局部密度”的观点表示不认同。采用了无权值的CBLOF,即uCBLOF

    9. LDCOF局部密度簇异常因子(局部,聚类)

    CBLOF的局部密度评价仅使用簇成员数,这一点备受争议。而uCBLOF事实上已经不是局部异常检测方法,因为聚类的密度已经被完全忽视了。
    LDCOF解决了上述问题,它假设聚簇分布为球形分布来评价聚簇的密度。
    也用k-means聚类
    score=某个聚类成员到其所属聚类的型心的距离/avg(每个聚类成员到其型心的距离)。这导致,LDCOF的score是相对于可能变化的簇密度局部得分。
    优点:score有一些相对参考点。类似于LOF,1.0分或更低将被认为是普通实例。

    10. CMGOS基于聚类的多变量高斯离群点得分(局部,聚类+子空间)

    基于聚类的异常检测的另一个加强版。

    马氏距离作为计算异常得分的基础
    先用k-means,然后计算每个簇的协方差矩阵,最后,score=该点离最近聚类中心的马氏距离/具有某一置信区间的卡方分布。后者再一次作为归一化步骤,1.0分及一下的很有可能是普通实例。
    马氏距离使得异常值的得分迅速增加
    (待续。。。)

    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,它基于马氏距离计算两次协方差矩阵

    一旦确定了主成分,问题就到了选取哪个特征值来算得分上了。用主要成分会展示出相对大部分数据的全局偏离,然而使用次要成分会表示出较小的局部偏差

     当rPCA考虑所有成分的时候,此时rPCA基本上等于当设定k=1时的CMGOS

    审查算法的复杂性和实现 

    1. 基于近邻的算法中,主要时间都花在寻找近邻上(其他的,如计算密度或LOF只需要不到1%的运行时,可忽略不计)。而寻找近邻的时间复杂度除了LOCI为O(n3),其他都是O(n2)。

    2. 基于聚类的方法中,计算复杂度主要归于聚类算法,如果运用k-means算法一般要比O(n2)快。对大数据而言,比基于近邻的算法有优势。CMGOS-MCD例外,因为MCD中每个簇的计算量为二次的。
    3. 基于one-class SVM的算法复杂度决定于支持向量的个数和数据结构,此外伽马调谐也有很大影响。rPCA的复杂度很大取决于数据的维度,如果维度小,则是最快的。

    基准数据集

    新的算法出来一般都要和最常见的算法(如k-NN、LOF)进行对比,并要求使用公共分类数据集。
    一些用于分类的经典数据集可以从UCI机器学习库中检索而得。
    典型的预处理包括选取一类作为异常类,并从中随机抽取一小部分作为子样本。
    这部分作者给出了详细的数据集和预处理介绍。

    数据集总结

    数据集涵盖了广泛的应用领域,如医疗应用、入侵检测、图像和语音识别以及复杂系统的分析。

    作者发布了数据集,以鼓励研究人员将其提出的算法与此工作进行比较。

    比较评估

    对无监督学习,一种常见的评估策略是:将结果根据异常值得分进行排名,然后迭代地从第一名到最后一名设置阈值。这会形成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是一个很好的候选者,特别是对于较大的数据集。

     

  • 相关阅读:
    php通过curl发送XML数据,并获取XML数据
    js预编译环节 变量声明提升 函数声明整体提升
    JavaScript 字符串转json格式
    PHP保留两位小数的几种方法
    tp5.1 错误 No input file specified.
    frame与iframe的区别及基本用法
    iframe的用法
    Jquery DataTable基本使用
    松软科技课堂:SQL--FULLJOIN关键字
    松软科技课堂:SQL-LEFT-JOIN 关键字
  • 原文地址:https://www.cnblogs.com/DianeSoHungry/p/7050254.html
Copyright © 2011-2022 走看看