什么是异常点?

阅读: 评论:0

什么是异常点?

什么是异常点?

  异常检测是机器学习领域常见的应用场景,例如金融领域里的信用卡欺诈,企业安全领域里的非法入侵,IT运维里预测设备的维护时间点等。我们今天就来看看异常检测的基本概念,算法,然后看看如何利用TensorflowJS来进行异常检测。
  
  什么是异常点?
  
  异常点是指数据中和其它点不一样的点,异常检测就是要找到这些点。通常有以下这些不同类型的异常:
  
  点异常 Point Anomalies
  
  单个点和其它数据显著的不同
  
  上下文异常 Contextual Anomalies
  
  数据在所在的上下文环境中是个异常,例如下图t1不是异常而t2是因为t2前后的数据和t2有显著的差异。
  
  âContextual Anomaliesâçå¾çæç´¢ç»æ
  
  集合异常 Collective Anomalies.
  
  集合异常是指一组数据点和其它的数据有显著的不同,这一组数据的集合构成异常
  
  从数据维度的角度来看,异常也分为单变量(univariate)和多变量异常(multivariate)。
  
  异常检测的算法主要包括基于统计的算法和基于机器学习的算法。
  
  异常检测的统计学方法
  
  利用统计方法来进行异常检测有两种,第一种是参数化的,就是假定正常的数据是基于某种参数分布的,那么我们可以通过训练数据估计出数据的分布概率,那么对于每一个要分析的数据点都计算出该数据点在这个概率分布下生成的概率。这个值越高,说明该数据是正常点的可能性就越大,该数值越低,就说明这个点就越有可能是异常点。
  
  最常见的方式就是ZScore,假定数据符合正态分布,ZScore计算数据点偏离均值多少个标准差。ZScore越大说明数据偏离均值越远,那么它是异常的概率就越高。
  
  非参数化的方法并不假定数据的先验分布,数据的分布是从训练数据中学习而来的。
  
  其它还有一些统计方法诸如:
  
  时间序列中的移动平均值
  
  卡曼滤波器
  
  利用统计方法做异常检测非常容易理解,计算效率也很好。但是这种方法存在一些挑战:
  
  数据点中的噪声和异常可能拥有类似的统计特征,那么就很难检测出来。
  
  异常的定义可能会发生变化,一个固定的伐值可能并不适用。例如应用zscore,到底是大于3是异常还是大于4是异常,这很难定义。
  
  异常检测的机器学习方法
  
  从监督学习和非监督学习的角度来看,如果已经有了标记异常点的大量训练数据,异常检测可以简单的转化为分类问题,也就是数据分两类,正常点和异常点。但是在现实中,往往很难找到大量标记好异常点的训练数据,所以往往需要非监督学习来进行异常检测。
  
  利用数据的相似度来检测异常的基本假设是,如果被检测的数据和已有的数据相似度大,那么它是正常数据的可能性就大。相似度的学习主要有基于距离的(KNN)和基于密度的(LOF)。
  
  基于聚类的异常检测的基本假设是,正常数据聚集在一起,异常数据聚集在一起。
  
  DBSCAN是异常检测常用的聚类方法。关于DBSCAN算法的介绍,大家可以参考我的博客图解机器学习
  
  如上图所示,DBSCAN可以学习出正常聚类的中心点A,边缘点BC以及异常点N。
  
  但是DBSCAN对于各个超参数的设定非常敏感,利用该方法虽然不需要标记异常点,但是找到合适的超参数并不容易。
  
  支持向量机(SVM)是一种监督学习的分类方法,单类支持向量机(OneClassSVM)是SVM的一种扩展,可以用于非监督的检测异常。
  
  该算法可以学习出正常点和异常点之间的边界。
  
  隔离森林(isolation forests)是检测数据中异常值或新颖性的一种有效方法。这是一种基于二元决策树的方法。
  
  隔离森林的基本原则是异常值很少,而且与其他观测结果相差甚远。为了构建树(训练),算法从特征空间中随机选取一个特征,并在最大值和最小值之间随机选择一个随机分割值。这是针对训练集中的所有观察结果。为了建造森林,树木整体被平均化为森林中的所有树木。
  
  然后,为了预测,它将观察与“节点”中的分裂值进行比较,该节点将具有两个节点子节点,在该子节点上将进行另一次随机比较。由算法为实例做出的“分裂”的数量被命名为:“路径长度”。正如预期的那样,异常值的路径长度将比其他观察值更短。
  
  利用深度学习进行异常检测
  
  好了我们了解了异常检测的基本概念和方法,那么如何利用深度学习来进行异常检测呢?
  
  虽然神经网络的主要应用是监督学习,但是其实也可以利用它来进行非监督学习,这里我们就需要了解自编码器(Autoencoder)了。
  
  âautoencoderâçå¾çæç´¢ç»æ
  
  自编码器就是类似上图的一个网络,包含编码和解码两个主要的部分,我们利用训练数据集对该网络进行训练,输出的目标等于输入的数据。也就是说我们训练了一个可以重建输入数据的深度神经网络。那么这样做有什么用能。
  
  我们可以看出编码的过程其实类似一个PCA的降维过程,就是经过编码,找到数据中的主要成分,利用该主要成份能够重建原始数据,就好像数据压缩和解压缩的过程,用更少的数据来取代原始数据。对于一般的自编码器的应用,训练好的自编

本文发布于:2024-02-02 06:21:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170682608241946.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:异常
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23