异常检测 and 无监督学习(2)


前言

   这一节主要讲解几个异常检测的算法。


一、常见的2类无监督学习算法

1、聚类

   简单说就是一种自动分类的方法,在监督学习中,你很清楚每一个分类是什么,但是聚类则不是,你并不清楚聚类后的几个分类每个代表什么意思。其多用于异常检测,因为聚类是发现样本之间的相似性,异常检测是发现样本之间的差异性,两者结合起来则可进行异常检测

2、降维

   处理数据,在尽可能保存相关的结构的同时降低数据的复杂度。常将其与用多维数据异常检测中,有相关论文可查

二、异常检测的常用算法

   常见的异常检测算法有Z-score算法、KNN算法、Local Outlier Factor、孤立森林。

1、Z-score算法

   假设样本服从正态分布,用于描述样本偏离正态分布的程度。通过计算μ和σ得到当前样本所属于的正态分布的表达式,然后分别计算每个样本在这个概率密度函数下被生成的概率,当概率小于某一阈值我们认为这个样本是不属于这个分布的,因此定义为异常值
   获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算 p(x):
在这里插入图片描述
当p(x)<ε时,为异常。后续也有很多研究对此算法进行了拓展,更详细的讲解可参考以下网址:

http://t.zoukankan.com/ssyfj-p-12940077.html(机器学习基础—无监督学习之异常检测)

2、KNN异常检测

   KNN算法专注于全局异常检测,所以无法检测到局部异常
   首先,对于数据集中的每条记录,必须找到k个最近的邻居。然后使用这K个邻居计算异常分数。有三种方法:

  • 最大:使用到第k个邻居的距离作为离群值得分
  • 平均值:使用所有k个邻居的平均值作为离群值得分
  • 中位数:使用到k个邻居的距离的中值作为离群值得分

  在实际方法中后两种的应用度较高。然而,分数的绝对值在很大程度上取决于数据集本身、维度数和规范化。
  参数k的选择当然对结果很重要。如果选择过低,记录的密度估计可能不可靠,即过拟合;如果它太大,密度估计可能太粗略。K值的选择通常在10<k<50这个范围内。所以在分类方法中,选择一个合适的K值,可以用交叉验证法。但是,事实上基于KNN的算法都是不适用于欺诈检测的,因为他们本身就对噪声比较敏感

3、Local Outlier Factor(LOF算法)

  基于密度的局部离群因子(LOF)算法相对比较更加简单、直观以及不需要对数据的分布有太多的要求,还能量化每个数据点的异常程度。该算法是基于密度的算法,主要核心的部分是关于数据点密度的刻画。算法的整个流程如下所示:

  • k k k-近邻距离(k-distance): 在距离数据点 P P P最近的几个点中,第 k k k个最近的点跟点 P P P之间的距离称为点 P P P k k k-近邻距离,记为 d k ( p ) d_k(p) dk(p)
  • 可达距离(rechability distance): 可达距离的定义跟k-近邻距离是相关的。当给定参数 k k k时,数据点 P P P到数据点 O O O的可达距离 r e a c h d i s t ( O , P ) reachdist(O,P) reachdist(O,P)为数据点 O O O k k k-近邻距离和数据点 P P P与点 O O O之间的直接距离的最大值。即: r e a c h d i s t k ( O , P ) = m a x { d k ( O ) , d ( O , P ) } reachdist_k(O,P) = max \{ d_k(O),d(O,P)\} reachdistk(O,P)=max{dk(O),d(O,P)}
  • 局部可达密度(local rechablity density):局部可达密度的定义是基于可达距离的,对于数据点 P P P,那些跟点 P P P的距离小于等于 d k ( p ) d_k(p) dk(p)的数据点称为它的k_nearest_neighor,记为 N k ( p ) N_k(p) Nk(p),数据点 P P P的局部可达密度为基于 P P P的最近邻的平均可达距离的倒数,即: l r d k ( P ) = 1 ∑ O ∍ N k ( P ) r e a c h d i s t k ( O , P ) ∣ N k ( P ) ∣ lrd_k(P)=\frac{1}{\frac{\sum_{O\backepsilon N_k(P)}reachdist_k(O,P)}{|N_k(P)|}} lrdk(P)=Nk(P)ONk(P)reachdistk(O,P)1
  • 局部异常因子: 根据局部可达密度的定义,如果一个数据点跟其他点比较疏远的话,那么显然它的局部可达密度就小。但LOF算法衡量一个数据点的异常程度,并不是看它的绝对局部密度,而是看它跟周围邻近的数据点的相对密度。这样做的好处是可以允许数据分布不均匀、密度不同的情况。局部异常因子即是用局部相对密度来定义的。数据点 P P P的局部相对密度(局部异常因子)为 P P P的邻居们的平均局部可达密度跟数据点 P P P的局部可达密度的比值,即: L O F k ( P ) = ∑ O ∍ N k ( P ) l r d ( O ) l r d ( P ) ∣ N k ( P ) ∣ = ∑ O ∍ N k ( P ) l r d ( O ) ∣ N k ( P ) ∣ / l r d ( P ) LOF_k(P)=\frac{\sum_{O\backepsilon N_k(P)}\frac{lrd(O)}{lrd(P)}}{|N_k(P)|}=\frac{\sum_{O\backepsilon N_k(P)}lrd(O)}{|N_k(P)|}/lrd(P) LOFk(P)=Nk(P)ONk(P)lrd(P)lrd(O)=Nk(P)ONk(P)lrd(O)/lrd(P)
    根据局部异常因子的定义,如果数据点 p 的 LOF 得分在1附近,表明数据点p的局部密度跟它的邻居们差不多;如果数据点 P P P的 LOF 得分小于1,表明数据点 P P P处在一个相对密集的区域,不像是一个异常点;如果数据点 P P P的 LOF 得分远大于1,表明数据点 P P P跟其他点比较疏远,很有可能是一个异常点。

  总结:整个LOF算法,首先对于每个数据点,计算它与其它所有点的距离,并按从近到远排序,然后对于每个数据点,找到它的k-nearest-neighbor,最后计算LOF得分

4、Isolation Forest(孤立森林)

  在高维数据集中实现离群点检测的一种有效方法是使用随机森林。通过随机选择一个特征,然后随机选择所选特征的最大值和最小值之间的分割值来"隔离"观测。
  先用一个简单的例子来说明 Isolation Forest 的基本想法。假设现在有一组一维数据(如下图所示),我们要对这组数据进行随机切分,希望可以把点 A 和点 B 单独切分出来。具体的,我们先在最大值和最小值之间随机选择一个值 x,然后按照 =x 可以把数据分成左右两组。然后,在这两组数据中分别重复这个步骤,直到数据不可再分。显然,点 B 跟其他数据比较疏离,可能用很少的次数就可以把它切分出来;点 A 跟其他数据点聚在一起,可能需要更多的次数才能把它切分出来。
在这里插入图片描述
  把数据从一维扩展到两维。同样的,沿着两个坐标轴进行随机切分,尝试把下图中的点A’和点B’分别切分出来。我们先随机选择一个特征维度,在这个特征的最大值和最小值之间随机选择一个值,按照跟特征值的大小关系将数据进行左右切分。然后,在左右两组数据中,重复上述步骤,再随机的按某个特征维度的取值把数据进行细分,直到无法细分,即:只剩下一个数据点,或者剩下的数据全部相同。跟先前的例子类似,直观上,点B’跟其他数据点比较疏离,可能只需要很少的几次操作就可以将它细分出来;点A’需要的切分次数可能会更多一些。
在这里插入图片描述
  按照关于“异常”的特性,一般情况下,在上面的例子中,点B和点B’ 由于跟其他数据隔的比较远,会被认为是异常数据,而点A和点A’ 会被认为是正常数据。直观上,异常数据由于跟其他数据点较为疏离,可能需要较少几次切分就可以将它们单独划分出来,而正常数据恰恰相反。这其实正是Isolation Forest(IF)的核心概念。IF采用二叉树去对数据进行切分,数据点在二叉树中所处的深度反应了该条数据的“疏离”程度。
  通过学习,我们知道,此算法适用于:异常数据占总样本量的比例很小;异常点的特征值与正常点的差异很大的情况。同时也需注意:若训练样本中异常样本的比例较高,可能会导致最终结果不理想,因为这违背了该算法的理论基础;异常检测跟具体的应用场景紧密相关,因此算法检测出的 “异常” 不一定是实际场景中的真正异常,所以在特征选择时,要尽量过滤不相关的特征。


总结

  以上就是今天学习所有内容,参考网站如下:

  无监督算法与异常检测
  一文读懂异常检测 LOF 算法(Python代码)
  无监督学习中的异常值检测
  机器学习基础—无监督学习之异常检测

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
无监督异常检测技术一直是机器学习领域的研究热点之一。随着数据量的不断增加和数据种类的不断增多,异常检测技术的应用场景也越来越广泛。下面是无监督异常检测技术发展的几个阶段: 1. 基于统计模型的方法:最早的无监督异常检测技术是基于统计模型的方法,如基于正态分布的方法、基于混合高斯模型的方法等。这些方法通常假设正常数据服从某种分布,然后将异常值定义为不符合该分布的数据点。 2. 基于聚类的方法:随着聚类算法的发展,一些基于聚类的方法也被用于无监督异常检测中。这些方法通常将数据点聚为几个簇,然后将不属于任何簇的数据点定义为异常值。 3. 基于密度的方法:基于密度的方法是一类比较新的无监督异常检测方法,它试图找到数据集中的低密度区域,将这些区域中的数据点定义为异常值。这些方法通常使用密度估计算法来计算数据点的密度,并根据密度选择异常值。 4. 基于深度学习的方法:近年来,深度学习技术的发展使得一些基于深度学习的方法也被用于无监督异常检测中。这些方法通常使用自编码器等深度学习模型来学习数据的表示,并将重构误差作为异常值的度量。 总的来说,无监督异常检测技术的发展经历了从基于统计模型到基于聚类再到基于密度的演化过程,最近几年则开始涌现一些基于深度学习的方法。未来,随着数据量和数据种类的不断增加,无监督异常检测技术还有很大的发展空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值