离群点检测算法

传统离群点检测

基于统计学

使用统计模型拟合数据。正常对象出现在该随机模型的高概率区域中,而低概率区域中的对象是离群点。

基于高斯分布的离群点检测算法

这种方法的基本思想是假定正常数据点符合高斯分布(也称为正态分布),然后通过测量数据点与这个分布的偏差来确定哪些数据点可能是离群点。以下是实现基于高斯分布的离群点检测算法的一般步骤:

收集数据:首先,你需要收集要进行离群点检测的数据集。

建模:接下来,你需要假定数据点符合高斯分布。通常,你会使用数据集的特征来估计这个分布的参数,包括均值(μ)和标准差(σ)。这可以通过计算数据集的均值和标准差来实现。

计算概率密度:对于每个数据点,你可以使用估计的均值和标准差来计算它符合高斯分布的概率密度。具体来说,使用以下公式计算概率密度:
p ( x ) = 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 p(x)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} p(x)=2πσ2 1e2σ2(xμ)2
其中,p(x) 是数据点 x 的概率密度,μ 是估计的均值,σ 是估计的标准差。
设置阈值:为了确定哪些数据点是离群点,你需要设置一个阈值。通常,你可以选择一个概率密度较低的阈值,所有的数据点概率密度低于这个阈值的就被认为是离群点。阈值的选择可以基于经验或者其他具体的需求。

检测离群点:将计算的概率密度与阈值进行比较,如果概率密度低于阈值,则将数据点标记为离群点。

可视化和解释:最后,你可以可视化标记的离群点,以及它们的概率密度,以帮助理解数据中的异常情况。

需要注意的是,基于高斯分布的离群点检测算法假定数据是单一的高斯分布,并且对于复杂的数据集可能不够准确。在实际应用中,还可以考虑使用混合高斯模型(Mixture of Gaussians)等更复杂的模型来处理更多变的数据分布。此外,阈值的选择也是一个关键的问题,通常需要根据具体情况进行调整和优化。

HBOS:基于直方图的异常检测

过程类似于朴素贝叶斯模型。假设特征相互独立,对每个特征作直方图,对于某个样例,连乘其特征在各个直方图中的频率得到该样例的生成概率。

优点
  • 速度快,适合大数据情形
缺点
  • 特征相互独立的条件比较强,现实中可能不符合
  • 不适合异常数据过多的情形

基于聚类

假定正常数据对象属于大的、稠密的簇、而离群点属于小或稀疏的簇,或者不属于任何簇。
聚类方法主要有三种假设,三种假设下有各自的方法。计算复杂度很大程度上取决于聚类算法的计算复杂度。

  • 假设一:不属于任何聚类的点是异常点,主要方法包括DBSCAN、SNN clustering、FindOut algorithm、WaveCluster Algorithm。
    缺点:不能发现异常簇。

  • 假设二:距离最近的聚类结果较远的点是异常点,主要方法包括K-Means、Self-Organizing Maps(SOM)、GMM。
    首先进行聚类,然后计算样例与其所属聚类中心的距离,计算其所属聚类的类内平均距离,用两者的比值衡量异常程度。
    缺点:不能发现异常簇。

  • 假设三:稀疏聚类和较小的聚类里的点都是异常点,主要方法包括CBLOF、LDCOF、CMGOS等。
    首先进行聚类,然后启发式地将聚类簇分成大簇和小簇。如果某一样例属于大簇,则利用该样例和其所属大簇计算异常得分,如果某一样例属于小簇,则利用该样例和距离其最近的大簇计算异常得分。三种算法的区别在于计算异常得分的方式不同。
    优点:考虑到了数据全局分布和局部分布的差异,可以发现异常簇。

基于聚类的异常检测优缺点:

优点
  • 测试阶段会很快,以内只需要和有限个簇比较
  • 有些聚类算法(k-means)可以在线应用(准实时)
缺点
  • 异常检测效果很大程度上依赖于聚类效果,但是聚类算法主要目的是聚类,并不是为了异常检测
  • 大数据聚类计算开销比较大,可能是个瓶颈

DBSCAN

把点划分为核心点(稠密区域内部点)、边界点(稠密区域边界点)、噪声点,根据密度可达原理来进行cluster划分。
在这里插入图片描述

基于分类

对于具有类标签的数据集,可以训练一个区分正常数据和离群点的分类器,通常的做法是构造但分类模型(one class model),如OC-SVM,SVDD。

One-class SVM

利用核函数将数据映射到高维空间,寻找超平面使得数据和坐标原点间隔最大。

SVDD

利用核函数将数据映射到高维空间,寻找尽可能小的超球体包裹住正常数据。

基于邻近性

离群点与它的最近邻之间的邻近性显著地偏离数据集中其他对象与它们的近邻之间的邻近性。按照邻近性度量,主要有基于距离(KNN)和基于密度(LOF)的离群点检测方法。

基于距离

这种方法认为异常点距离正常点比较远,因此可以对于每一个数据点,计算它的K-近邻距离(或平均距离),并将距离与阈值进行比较。若大于阈值,则认为是异常点。或者是将全部样本的K-近邻距离排序,取前n个最大的作为异常点。计算距离时一般使用欧式距离,也可以使用角度距离。

优点
  • 不需要假设数据的分布
缺点
  • 不适合高维数据
  • 只能找出异常点,无法找出异常簇
  • 你每一次计算近邻距离都需要遍历整个数据集,不适合大数据及在线应用
  • 有人用hyper-grid技术提速将KNN应用到在线情况,但是还不是足够快
  • 参数K和阈值需要人工调参
  • 当正常点较少、异常点较多时,该方法不好使

基于密度

优点
  • 可以找出分布不均匀的数据中局部异常的数据
  • 可以给出数据的异常得分,得分越高越可能异常,不是二分类
缺点
  • 不适合高维数据
  • 由于需要遍历数据计算距离,因此计算复杂度也很高,不适合在线应用
  • 只能找到异常点,无法找出异常簇
  • 需要人工调参

LOF

在这里插入图片描述
在这里插入图片描述

选取参数MinPts:

一般来说,MinPts的取值应该根据具体数据集的特点来确定。以下是一些选择MinPts的方法:
1.根据数据集的密度选择MinPts: 在数据集的密度较大的区域,MinPts可以取较小的值因为在这些区域中,数据点的邻居数量较多。而在密度较小的区域,MinPts应该取较大的值,因为在这些区域中,数据点的邻居数量较少。
2.根据数据集的大小选择MinPts: 如果数据集比较大,则MinPts应该取较大的值,这样可以减少LOF算法的计算量,加快算法的执行速度。如果数据集比较小,则MinPts可以取较小的值,以便更好地探索数据集的结构。
3.根据领域距离选择MinPts: 在实际应用中,可以通过试验不同的MinPts值,比较得到的LOF值来确定最优的MinPts值。也可以利用基于领域距离的方法(如K-D Tree、球树等)来自动确定MinPts的取值。
总之,选择合适的MinPts值需要根据具体的数据集和应用场景来确定,:需要进行实验和调整。

COF

LOF中计算距离是用的欧式距离,也是默认了数据是球状分布,而COF的局部密度是根据最短路径方法求出的,也叫做链式距离。

INFLO

LOF容易将边界处的点判断为异常,INFLO在计算密度时,利用k近邻点和反向近邻集合,改善了LOF的这个缺点。

LoOP

将LOF中计算密度的公式加了平方根,并假设近邻距离的分布符合正态分布。

基于树

此类方法的思想是通过划分子空间寻找异常点,不同的方法区别主要在三个地方:特征的选取、分割点的选取和分类空间打标签的方案。此类方法不受球形邻近的限制,可以划分任意形状的异常点。此类方法主要包括iForest、SCiForest、RRCF

iForest

此方法适用于异常点较少的情况,采用构造多个决策树的方式进行异常检测。对数据集进行有放回抽样,对每一次抽样出来的样本构建二叉树,构建二叉树时,随机选取一个特征,然后在特征上随机选一个分割点,将该特征小于分割点的数据放在二叉树左边,反之放在右边,直至二叉树达到一定深度或者叶子节点只包含一个数据点为止。进行异常检测时,计算该数据点在多个二叉树上的平均深度,深度越浅越可能是异常值。
  iForest只适合检测全局异常点,不适合检测局部异常点,因此有人做了改进, 论文为Improving iForest with Relative Mass.

SCiForest

传统iForest方法在选择特征是随机选取的,SCiForest在选择特征时利用了方差;传统iForest选择分割点后形成的分割超平面是平行于坐标轴的,SCiForest可以生成任意角度的分割超平面。

RRCF

可以动态增删树种的节点,适用于流数据异常检测。

基于树的异常检测优缺点:

优点
  • 每棵树都是独立构建,适合分布式计算
  • 可以分割任意形状的数据集,不受限于球形近邻
  • 测试时速度很快,适合在线处理
缺点
  • 只适用于异常点较少的情况
  • 不适合高维数据,因为高维数据会有很多无关特征

新技术

基于流数据

流数据是实时,动态的数据,自然地以虚列的形式出现。

基于深度学习

无监督

长短期记忆网络(long short term memory network,LSTM)
生成对抗网络(generative adversarial network,GAN)
自动编码器(autoencoder,AE)

对正常数据进行训练Encoder和Decoder,进行异常检测时,如果Decoder出来的向量与原始向量差别很大,就认为是异常数据。

降噪自动编码器(denoising autoeecoder,DAE)
空间变换网络(spatial transformer network,STN)
递归神经网络(recurrent neural network,RNN)
对抗自编码器(adversarial autoeecoder,AAE)
变分自编码器(variational autoencoder,VAE)

部分参考:https://www.jianshu.com/p/c5e4e7dce972

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
离群点检测算法是指在数据集中寻找与其他数据点差异较大的数据点,也称为异常检测或异常值检测。其原理是通过统计学或机器学习方法,如基于距离、密度、聚类、分类等方法,来判断数据点是否为离群点。离群点检测算法广泛应用于金融、医疗、网络安全等领域,用于检测欺诈、异常行为、错误数据等。 常见的离群点检测算法包括: 1. 基于距离的方法:如KNN(k近邻)、LOF(局部离群因子)等,通过计算数据点与其邻居之间的距离来判断是否为离群点。 2. 基于密度的方法:如DBSCAN(基于密度的聚类算法)、OPTICS(基于对象可达性的聚类)、DENCLUE(基于密度的聚类算法)等,通过计算数据点周围的密度来判断是否为离群点。 3. 基于聚类的方法:如基于K-Means或GMM(高斯混合模型)的离群点检测算法,通过将数据点分为不同的簇来判断是否为离群点。 4. 基于分类的方法:如SVM(支持向量机)和决策树等,通过将数据点分为不同的类别来判断是否为离群点。 离群点检测算法的应用场景包括: 1. 金融欺诈检测:通过对银行交易数据进行离群点检测,可以及时发现异常交易行为,保护用户资金安全。 2. 医疗诊断:通过对医疗数据进行离群点检测,可以发现患者的异常症状,提高诊断准确性。 3. 网络安全:通过对网络流量数据进行离群点检测,可以及时发现网络攻击行为,提高网络安全性。 4. 工业生产:通过对工业生产数据进行离群点检测,可以发现设备的异常运行状况,提高生产效率和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值