异常点检测算法小结

    异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,是比较常见的一类非监督学习算法,这里就对异常点检测算法做一个总结。

一、1.?异常点检测算法使用场景

    什么时候我们需要异常点检测算法呢?常见的有三种情况。一是在做特征工程的时候需要对异常的数据做过滤,防止对归一化等处理的结果产生影响。二是对没有标记输出的特征数据做筛选,找出异常的数据。三是对有标记输出的特征数据做二分类时,由于某些类别的训练样本非常少,类别严重不平衡,此时也可以考虑用非监督的异常点检测算法来做。

二、2.?异常点检测算法常见类别

    异常点检测的目的是找出数据集中和大多数数据不同的数据,常用的异常点检测算法一般分为三类。

    第一类是基于统计学的方法来处理异常数据,这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。

    第二类是基于聚类的方法来做异常点检测。这个很好理解,由于大部分聚类算法是基于数据特征的分布来做的,通常如果我们聚类后发现某些聚类簇的数据样本量比其他簇少很多,而且这个簇里数据的特征均值分布之类的值和其他簇也差异很大,这些簇里的样本点大部分时候都是异常点。比如我之前讲到的BIRCH聚类算法原理DBSCAN密度聚类算法都可以在聚类的同时做异常点的检测。

    第三类是基于专门的异常点检测算法来做。这些算法不像聚类算法,检测异常点只是一个赠品,它们的目的就是专门检测异常点的,这类算法的代表是One Class SVM和Isolation Forest.

    下文主要会对One Class SVM和Isolation Forest做详细的讨论分析。

三、3.?One Class SVM算法

    One Class SVM也是属于支持向量机大家族的,但是它和传统的基于监督学习的分类回归支持向量机不同,它是无监督学习的方法,也就是说,它不需要我们标记训练集的输出标签。

    那么没有类别标签,我们如何寻找划分的超平面以及寻找支持向量呢?One Class SVM这个问题的解决思路有很多。这里只讲解一种特别的思路SVDD, 对于SVDD来说,我们期望所有不是异常的样本都是正类别,同时它采用一个超球体而不是一个超平面来做划分,该算法在特征空间中获得数据周围的球形边界,期望最小化这个超球体的体积,从而最小化异常点数据的影响。

?    假设产生的超球体参数为中心 \(o\)和对应的超球体半径 \(r>;0\) ,超球体体积 \(V(r)\) 被最小化,中心\(o\) 是支持向量的线性组合;跟传统SVM方法相似,可以要求所有训练数据点 \(x_{i}\) 到中心的距离严格小于 $r $,但同时构造一个惩罚系数为 \(C\) 的松弛变量 \(\xi_i\),优化问题如下所示:

\[
\underbrace{min}_{r,o}V(r) + C\sum\limits_{i=1}^m\xi_i
\]

\[
|x_i-o|_2 \leq r + \xi_i,\;\; i=1,2,...m
\]

\[
\xi_i \geq 0,\;\;i=1,2,...m
\]

    和之前讲的支持向量机系列类似的求解方法,在采用拉格朗日对偶求解之后,可以判断新的数据点 \(z\) 是否在类内,如果\(z\)到中心的距离小于或者等于半径\(r\),则不是异常点,如果在超球体以外,则是异常点。

    在sklearn中,我们可以用svm包里面的OneClassSVM来做异常点检测。OneClassSVM也支持核函数,所以普通SVM里面的调参思路在这里也适用。

四、4.?Isolation Forest算法

    Isolation Forest(以下简称IForest)是周志华老师的学生提出来的,主要是利用集成学习的思路来做异常点检测,目前几乎成为异常点检测算法的首选项,我之前在Bagging与随机森林算法原理小结第4.3节中也简略讲解了IForest的思路,它是随机森林大家族的一员。

    算法本身并不复杂,主要包括第一步训练构建随机森林对应的多颗决策树,这些决策树一般叫iTree,第二步计算需要检测的数据点\(x\)最终落在任意第t颗iTree的层数\(h_t(x)\)。然后我们可以得出\(x\)在每棵树的高度平均值\(h(x)\)。第三步根据\(h(x)\)判断\(x\)是否是异常点。

    对于第一步构建决策树的过程,方法和普通的随机森林不同。

    首先采样决策树的训练样本时,普通的随机森林要采样的样本个数等于训练集个数。但是iForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数。原因是我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。

    另外就是在做决策树分裂决策时,由于我们没有标记输出,所以没法计算基尼系数或者和方差之类的划分标准。这里我们使用的是随机选择划分特征,然后在基于这个特征再随机选择划分阈值,进行决策树的分裂。直到树的深度达到限定阈值或者样本数只剩一个。

    第二步计算要检测的样本点在每棵树的高度平均值\(h(x)\)。首先需要遍历每一颗iTree,得到检测的数据点\(x\)最终落在任意第t颗iTree的数层数\(h_t(x)\)。这个\(h_t(x)\)代表的是树的深度,也就是离根节点越近,则\(h_t(x)\)越小,越靠近底层,则\(h_t(x)\)越大,根节点的高度为0.

    第三步是据\(h(x)\)判断\(x\)是否是异常点。我们一般用下面的公式计算\(x\)的异常概率分值:
\[
s(x,m) = 2^{-\frac{h(x)}{c(m)}}
\]
, \(s(x,m)\)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。其中,m为样本个数。的表达式为:
\[
c(m) =2\ln(m-1) + \xi - 2\frac{m-1}{m}, \; \xi 是欧拉常数
\]

    从\(s(x,m)\)表示式可以看出,如果高度\(h(x) \to 0\), 则\(s(x,m) \to 1\),即是异常点的概率是100%,如果高度\(h(x) \to m-1\), 则\(s(x,m) \to 0\),即不可能是异常点。如果高度\(h(x) \to c(m)\), 则\(s(x,m) \to 0.5\),即是异常点的概率是50%,一般我们可以设置$s(x,m)的一个阈值然后去调参,这样大于阈值的才认为是异常点。

    在sklearn中,我们可以用ensemble包里面的IsolationForest来做异常点检测。

五、5.?异常点检测算法小结

    IForest目前是异常点检测最常用的算法之一,它的优点非常突出,它具有线性时间复杂度。因为是随机森林的方法,所以可以用在含有海量数据的数据集上面。通常树的数量越多,算法越稳定。由于每棵树都是互相独立生成的,因此可以部署在大规模分布式系统上来加速运算。对于目前大数据分析的趋势来说,它的好用是有原因的。

    但是IForest也有一些缺点,比如不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度和该维度的随机一个特征,建完树后仍然有大量的维度没有被使用,导致算法可靠性降低。此时推荐降维后使用,或者考虑使用One Class SVM。

    另外iForest仅对即全局稀疏点敏感,不擅长处理局部的相对稀疏点 ,这样在某些局部的异常点较多的时候检测可能不是很准。

    而One Class SVM对于中小型的数据分析,尤其是训练样本不是特别海量的时候用起来经常会比iForest顺手,因此比较适合做原型分析。

?

(欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)

原文地址:https://www.cnblogs.com/nickchen121/p/11214849.html

时间: 2024-10-12 23:41:40

异常点检测算法小结的相关文章

异常点检测算法

基于统计学的方法 一.基于正态分布的一元离群点检测方法 假设有 n 个点$(x_1, ...,x_n)$, 那么可以计算出这n个点的均值$\mu$和方差$\sigma$.均值和方差分别被定义为: 在正态分布的假设下,区域$\mu +- 3 \sigma$包含了99.7% 的数据,如果某个值距离分布的均值$\mu$超过了$3 \sigma$,那么这个值就可以被简单的标记为一个异常点(outlier). 二.多元离群点的检测方法 涉及两个或者两个以上变量的数据称为多元数据,很多一元离群点的检测方法都

异常点/离群点检测算法——LOF

http://blog.csdn.net/wangyibo0201/article/details/51705966 在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异常数据.异常检测也是数据挖掘的一个方向,用于反作弊.伪基站.金融诈骗等领域.  异常检测方法,针对不同的数据形式,有不同的实现方法.常用的有基于分布的方法,在上.下α分位点之外的值认为是异常值(例如图1),对于属性值常用此类方法.基于距离的方法,适用于二维或高维坐标体系内异常点的判别,例如二维平面坐

机器学习 鲁棒的基于高斯概率密度的异常点检测(novelty detection) ellipticalenvelope算法

异常点检测分为novelty detection 与 outlier detection 鲁棒性的高斯概率密度是novelty detection, 就是在给出的数据中, 找出一些与大部分数据偏离较远的异常数据, 我们的训练集不是纯净的, 包含异常点 outlier detection 的训练集是纯净的 算法理解 这个算法的思想很好理解, 就是求出训练集在空间中的重心, 和方差, 然后根据高斯概率密度估算每个点被分配到重心的概率. 程序 调包侠决定使用 scikit-learn: print(_

数据挖掘中分类算法小结

数据挖掘中分类算法小结 数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强

异常检测算法--Isolation Forest

南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林,自然少不了树,毕竟森林都是由树构成的,看Isolation Forest(简称iForest)前,我们先来看看Isolation Tree(简称iTree)是怎么构成的,iTree是一种随机二叉树,每个节点要么有两个女儿,要么就是叶子节点,一个孩子都没有.给定一堆数据集D,这里D的所有属性都是连续

Paxos算法小结

转自不正直的绅士,因百度空间迁移,无法注明出处,我从其google搜索引擎中的cache进行的copy. 不正直的绅士 是跟我一起工作过的非常有才的一个青年才俊. Paxos的使用非常广泛.sanlock也使用了paxos. 共研究Paxos算法的程序猿参考. Paxos算法小结 1 Paxos算法的背景1.1 State Machine Approach与一致性算法1.2 CAP理论与一致性算法2 Paxos算法2.1 Paxos算法的角色2.2 Paxos算法的描述2.3 Paxos算法的简

机器学习之异常点检测

1.iForest(独立森林)算法 样本数据过大时推荐采用这种异常值检测方法 原理分析:iForest森林也由大量的树组成.iForest中的树叫isolation tree,简称iTree.iTree树和决策树不太一样,其构建过程也比决策树简单,因为其中就是一个完全随机的过程.具体实施过程如下:第一.假设共有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出ψ个样本出来,作为这颗树的训练样本.在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机

φ累积失败检测算法(转)

在分布式系统中经常使用心跳(Heartbeat)来检测Server的健康状况,但从理论上来说,心跳无法真正检测对方是否crash,主要困难在于无法真正区别对方是宕机还是“慢”.传统的检测方法是设定一个超时时间T,只要在T之内没有接收到对方的心跳包便认为对方宕机,方法简单粗暴,但使用广泛. 1. 传统错误检测存在的缺陷 如上所述,在传统方式下,目标主机会每间隔t秒发起心跳,而接收方采用超时时间T(t<T)来判断目标是否宕机,接收方首先要非常清楚目标的心跳规律(周期为t的间隔)才能正确设定一个超时时

车道线检测文献解读系列(一) 基于机器视觉的高速车道标志线检测算法的研究_李晗

作者背景 基于机器视觉的高速车道标志线检测算法的研究_李晗 东北大学车辆工程硕士学位论文 2006年 [GB/T 7714]李晗. 基于机器视觉的高速车道标志线检测算法的研究[D]. 东北大学, 2006. DOI:10.7666/d.y852642.` 论文结构一览 预处理 灰度化 [亮点]模式判别 选择日间模式还是夜间模式: 在每个检测周期开始时,首先判断采用日间模式还是夜间模式工作.摄像机视野中的上半部分为天空背景,天空亮度可以显著区分日间和夜间环境.由于天空的颜色为蓝离,日间天空的蓝色分