zoukankan      html  css  js  c++  java
  • 异常检测综述

    原文地址:http://www.cs.umn.edu/sites/cs.umn.edu/files/tech_reports/07-017.pdf

    摘要

    这篇文章对常见的异常检测算法进行了分类,在每一类中,给出了这一类问题的基本假设(什么是正常,什么是异常),针对该类问题的基础方法,以及对基础方法的扩展。最后给出了关于计算复杂度的讨论。

    1. 引言

    异常检测应用广泛。本文给出的方法,有些只适用于某些场景,但有些方法有很强的普适性。本文的目标是给出一个结构性的关于异常检测方法的介绍。

    1.1 异常的定义

    异常检测与噪声去除以及噪声适应不同,噪声去除需要在正常信号中去除噪声信号,而噪声适应实际上关注的是模型在噪声出现时的鲁棒性。异常发现与创新发现也不同,创新发现是为了发现与正常模型不适配的模式。

    1.2 挑战

    • 定义一个正常的区域并不容易,有时候正常和异常很难区分;
    • 异常如果来自恶意入侵,入侵者通常会伪装,这使得异常的检测格外困难;
    • 在某些领域,正常信号的定义是会不断变化的,当前的正常信号可能过一段时间就是异常的;
    • 不同领域对异常的定义是不一样的,某个领域的经验很难迁移到另外一个领域;
    • 异常检测模型的训练样本,通常很难获取;
    • 正常的数据中通常含有噪声,使得它看起来很像异常数据,因此很难判断;

    1.3 相关工作

    1.4 我们的贡献

    针对六大类场景,分别分析了它们对于异常的核心假设,这些场景下的基础方法,以及,前人在这些场景下提出的方法,是怎样在基础方法的基础上变化而来的。最后分析了这些方法的计算复杂度。

    1.5 本文的组织结构

    2. 异常检测问题的不同方面

    介绍了,为什么需要这么多的异常检测算法,因为每个异常检测问题都有其特殊性。

    2.1 输入数据的本质

    在不同的异常检测问题中,数据的形式不一样,因此不能使用同一套异常检测算法,需要分别开发;
    有些问题中,样本是彼此孤立的,但另外一些问题中,样本是彼此相关联的。比如时序数据,图数据,社交关系数据,空间数据等等。正因为数据的彼此关系不同,所以也需要有不同的异常检测算法来处理。

    2.2 异常的类型

    点异常,异常点与其它点的分布明显不同,大部分异常检测处理的是这种问题;
    上下文异常,也叫做条件异常,就是说,一个点只有在特定的上下文下,才叫做异常,如果没有这个上下文,这个点就是正常的。这种情况下,我们通常会用两类特征来描述一个样本,一个是上下文特征(比如,在空间数据中,经纬度就是上下文特征,在时序数据中,时间点就是一个上下文特征),二是行为特征,也就是除了上下文特征之外,样本点本身属性的特征。
    集合性异常,单个点并不构成异常,但是多个这样的点集合在一起,就构成了异常,典型的例子是心电图,如果有骤停,那就是集合性异常。另外一个典型的例子是,计算机操作的异常,单个操作都是正常的,但是几个操作联合在一起,就意味着数据的窃取,这就是不正常的。集合异常更多的出现在空间数据、社交数据、时序数据中。
    点异常和集合性异常,在加入上下文之后,也可以变为上下文异常问题。

    2.3 数据的标签

    数据的标签不易获取,按照标签的情况,把异常检测问题分为三类,第一,有监督,这种情况就是简单的分类预测问题,比较简单,本文中不予介绍,第二,半监督,第三,无监督。

    2.4 异常检测算法的输出

    分数,或者是标签(是否)。

    3. 异常检测算法的应用

    3.1 计算机的入侵检测

    由于数据样本量比较大,而且对误报非常敏感,因此适合使用无监督或者半监督的方法。
    分为基于客户机和基于网络两类方法。

    3.2 欺诈检测

    基本思路是,对用户通常的使用习惯建模,一旦用户行为与习惯不符,就报警。
    第一,信用卡欺诈,第二,手机欺诈,第三,骗保欺诈,第四,内部交易欺诈

    3.3 医疗和公共健康异常检测

    3.4 工业危害检测

    第一,接卸单元的错误检测,第二,结构缺陷检测

    3.5 图像处理

    3.6 文本中的异常检测

    3.7 传感器网络

    4. 基于分类的异常检测方法

    基于这样的假设:一个可以将正常与异常区分的分类器,可以在给定的特征空间内学习到。
    可以分为两类:多类异常检测和一类异常检测,多类异常检测的原理是,训练集中指定了多个正常类的样本,对每个正常类单独学习一个分类器,面对一个测试样本,用每个分类器逐个判断,如果不能判断它属于任何一个正常类,那么它就是异常的。一类的异常检测,通常使用one-class svm算法。

    4.1 基于神经网络

    多类的就是正常神经网络,单类的有点意思,对输入样本进行编码,然后恢复,计算输入和输出​​之间的偏差,小于一定的阈值就是正常样本,否则就是异常。

    4.2 基于贝叶斯网络

    主要用于多类的异常检测。对于单变量,通过训练数据统计出先验和似然,学习后验就好了。对于多变量样本,假设多个变量之间是相互独立的,分别计算每一个变量的后验,然后聚集起来即可。

    4.3 基于支持向量机

    主要用于一类的异常检测。

    4.4 基于规则的方法

    比如RIPPER和决策树。先用这些算法生成一些规则,每个规则对应了一个比例,即满足这个规则的样本,是正常样本的比例。对于一个测试样本,先判断它满足多少规则,对于满足性最好的规则分数,用1减去这个分数,就是这个样本作为异常样本的概率。

    5. 基于最近邻的异常检测方法

    基于这样的假设:正常的样本都存在于密集的邻域内,而异常的样本通常离自己的最近邻很远。
    这里,包括第6章中基于聚类的度量标准,仅要求距离是正定的,对称的,并不要求满足三角定理。
    分为两类:一是通过第k近邻的距离来判断,二是通过样本点所处位置的密度来判断。

    5.1 使用第k近邻来判断

    5.2 使用相对密度

    ​LOF值=k近邻的密度/当前点的密度​​​​​​​​​​

    6. 基于聚类的异常检测方法

    一共可以分为三类,第一类的假设是,正常类的样本属于某一个聚类中心,而异常类的样本不属于任何一个聚类中心,(需要用到一些,不是所有样本点都会划分到某个聚类中心的聚类算法,比如DBSCAN);第二类的假设是,正常样本离他们的聚类中心很近,而异常样本离他们的聚类中心很远,(需要用到那些,对每个样本点都有一个聚类中心划分的聚类算法,比如kmeans);第三类的假设是,正常样本属于稠密而且较大的聚类中心,而异常样本属于稀疏而且较小的聚类中心。
    ​## 6.1 基于聚类和基于最近邻方法的不同
    基于聚类的方法,根据样本点与聚类中心的距离判断是否异常,而基于最近邻的方法,根据样本点与最近邻的关系判断是否异常。

    7. 基于统计的异常检测方法

    基于的假设是:根据我们假设的样本生成模型,正常样本被模型生成的概率高,而异常样本被模型生成的概率低。

    7.1 基于模型参数的方法

    基于高斯模型。
    基于回归模型,基于单变量的ARIMA和基于多变量的ARMA。
    基于混合参数分布的模型,分为两种,第一种针对正常样本和异常样本分别建模,认为他们属于不同的分布,第二种仅针对正常样本,建立混合分布模型。

    7.2 非参数的方法

    基于直方图
    基于核函数​​​​

    8. 基于信息论的方法

    基于的假设是:异常数据反映出了数据集中异常的信息内容。
    对于一种信息度量L,我们需要在目标数据集D中寻找一个尽量小的子集,使得L(D)-L(D-I)尽量大,其中I就是我们排除的尽量小的子集。优点是可以非监督的运行,并且没有对底层的数据分布有任何假设。

    9. 基于谱分析的异常检测方法

    ​基于的假设是:数据可以被嵌入到一个低维的子空间中,且在这样的空间中,正常和异常的样本更容易区分。
    常用基于PCA的方法,及其变种。

    10. 处理上下文异常​​​​

    常见的上下文属性通常包括,第一,空间信息,第二,图相关的信息,第三,序列信息,第四,属性(Profile)信息。两种处理思路,第一种是把上下文异常问题转化为单点异常问题处理,第二种是对数据结构进行建模,然后用模型去处理上下文异常。

    10.1 转化为单点异常检测问题

    10.2 应用数据中的结构信息

    11. 处理集合异常

    ​​处理集合异常时,最关键的是处理样本之间的关系,目前有三类关系被重点关注,分别是时序关系、空间关系、图(社交)关系。

    11.1 处理时序异常

    两种情况,一为符号序列,比如计算机系统调用序列,二位时序序列,即随时间变化的变量序列。

    11.1.1 在一组序列中发现异常序列

    两种方案,第一,转化为点异常检测的问题。
    对序列建模。

    11.1.2 在长序列中发现异常

    ​11.1.3 判断在一个给定序列中某个模式出现的频率,是否高于期望频率

    12. 各种异常检测算法的相对优势和劣势

    不同的应用场景,不同的数据分布,不同的计算条件,适用不同的算法,不能一概而论。

    13. 总结和未来工作​​​​​​​​​​

  • 相关阅读:
    netty同时做http和websocket(netty入门)
    curl的概念及相关工具下载
    当删除某一个jar包时tomcat中出现problem encountered while deleting resources问题
    一个servlet处理多个请求或者叫方法
    在web中实现当前变量和前一个的比较
    URL中可以出现的字符
    在Editplus直接运行程序的步骤
    socket的相关知识理解
    011 python接口 bs4提取结果
    010 python接口 bs4解析html
  • 原文地址:https://www.cnblogs.com/jicanghai/p/10202045.html
Copyright © 2011-2022 走看看