异常检测


一、什么是异常检测

异常检测(Outlier Detection),顾名思义,是识别与正常数据不同的数据,与预期行为差异大的数据。

识别如信用卡欺诈,工业生产异常,网络流里的异常(网络侵入)等问题,针对的是少数的事件。

1. 异常的类别

点异常:少数个体的异常
上下文异常:特定情况下的个体变化异常,如:特定时间下的温度突然上升或下降,在特定场景中的快速信用卡交易
群体异常:群体集合的个体实例出现异常情况,但是呢这个个体可能并不是异常的

2. 异常检测任务分类

有监督:训练集的正例和反例均有标签

无监督:训练集无标签

半监督:在训练集中只有单一类别(正常实例)的实例,没有异常实例参与训练

3. 异常检测场景

  • 故障检测
  • 物联网异常检测
  • 欺诈检测
  • 工业异常检测
  • 时间序列异常检测
  • 视频异常检测
  • 日志异常检测
  • 医疗日常检测
  • 网络入侵检测

二、异常检测常用方法

1. 传统方法

基于统计学的方法

学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把它们作为异常点

线性模型

如PCA方法,它的应用场景是对数据集进行降维。降维后的数据能够最大程度地保留原始数据的特征(以数据协方差为衡量标准)。 PCA的原理是通过构造一个新的特征空间,把原数据映射到这个新的低维空间里。PCA可以提高数据的计算性能,并且缓解"高维灾难"

基于相似度的方法

基于相似度的检测方法大致可以分为三类

  • 基于集群(簇)的检测,如DBSCAN等聚类算法
    聚类算法是将数据点划分为一个个相对密集的“簇”,而那些不能被归为某个簇的点,则被视作离群点。这类算法对簇个数的选择高度敏感,数量选择不当可能造成较多正常值被划为离群点或成小簇的离群点被归为正常。因此对于每一个数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。聚类的主要目的通常是为了寻找成簇的数据,而将异常值和噪声一同作为无价值的数据而忽略或丢弃,在专门的异常点检测中使用较少。
      聚类算法的优缺点:
    (1)能够较好发现小簇的异常;
    (2)通常用于簇的发现,而对异常值采取丢弃处理,对异常值的处理不够友好;
    (3)产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;
    (4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
  • 基于距离的度量,如k近邻算法
    k近邻算法的基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。在这里,离群距离大小对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使模型更加稳定,距离值的计算通常使用k个最近邻的平均距离。
      k近邻算法的优缺点:
    (1)简单;
    (2)基于邻近度的方法需要O(m2)时间,大数据集不适用;
    (3)对参数的选择敏感;
    (4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
  • 基于密度的度量,如LOF(局部离群因子)算法
    局部离群因子(LOF)算法与k近邻类似,不同的是它以相对于其邻居的局部密度偏差而不是距离来进行度量。它将相邻点之间的距离进一步转化为“邻域”,从而得到邻域中点的数量(即密度),认为密度远低于其邻居的样本为异常值。
    LOF(局部离群因子)算法的优缺点:
    (1)给出了对离群度的定量度量;
    (2)能够很好地处理不同密度区域的数据;
    (3)对参数的选择敏感。

2. 集成方法

集成是提高数据挖掘算法精度的常用方法。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。

常用的集成方法有Feature bagging,孤立森林等
孤立森林

孤立森林假设我们用一个随机超平面来切割数据空间,切一次可以生成两个子空间。然后我们继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了。孤立森林认为这些很快被孤立的点就是异常点。

3. 机器学习

在有标签的情况下,可以使用树模型(gbdt,xgboost等)进行分类,缺点是异常检测场景下数据标签是不均衡的,但是利用机器学习算法的好处是可以构造不同特征。

三、异常检测常用开源库

Scikit-learn

Scikit-learn是python开源的机器学习库,具有各种分类、回归和聚类算法。也包括一些异常检测算法,例如LOF和孤立森林

PyOD

Python Outlier Detection(PyOD) 是当下最流行的Python异常检测工具库,其主要亮点包括

  • 包括近20种常见的异常检测算法,比如经典的LOF/LOCI/ABOD以及最新的深度学习如对抗生成模型(GAN)和集成异常检测(outlier ensemble)
  • 支持不同版本的Python:包括2.7和3.5+;支持多种操作系统:windows,macOS和Linux
  • 简单易用且一致的API,只需要几行代码就可以完成异常检测,方便评估大量算法
  • 使用JIT和并行化(parallelization)进行优化,加速算法运行及扩展性(scalability),可以处理大量数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值