异常: 异常是远离其他观测数据而被疑为不同机制产生的观测数据。
异常检测: 在数据挖掘中,异常检测(Anomaly Detection)即对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。
异常检测方法概述: 目前的异常检测,一般均从已知的正常数据类数据中进行学习,建立正常行为的模型以进行异常检测,从而构建一个假设模型 h(x) 和一个阈值 ρ \rho ρ ,当 h ( x ) ≥ ρ h(x)≥\rho h(x)≥ρ时判 x 为正常,否则为异常,而阈值 ρ \rho ρ 的设定则根据训练集上所允许的经验误差 α \alpha α 进行设定,使得 P ( h ( x ) ≥ ρ ) ≥ 1 − α P(h(x)\geq\rho)\geq1-\alpha P(h(x)≥ρ)≥1−αP其中P(x)为分布函数。
如入侵检测、欺诈检测、故障检测、系统健康监测、传感器网络事件检测和生态系统干扰检测等。
数据预处理经常需要用到异常检测。因为去除异常数据的数据集往往会在统计上显著提升准确性。
异常检测是整个智能运维(AI Ops)的核心工作。
根据异常检测方法数学模型分类:
根据训练集是否包含标注:
Isolation Forest属于Non-parametric和unsupervised的方法,即不用定义数学模型也不需要有标记的训练。
隔离森林(Isolation Forest) 又名孤立森林,是一种从异常点出发,通过指定规则进行划分,根据划分次数进行判断的异常检测方法。
核心思路:循环分割(隔离),越容易被分割的判定为异常可能性越大。因为异常具有“少而不同”这一特点,所以异常数据比正常数据更容易被隔离。利用隔离森林,完成分割后,在最终形成的树中,异常将更加接近于根的位置。
隔离树: 设T为隔离树的一个节点,T是没有子节点的外节点,或者一个具有测试条件的内节点,它有两个子节点 ( T l , T r ) (T_l,T_r) (Tl,Tr)。测试条件由属性q和分割值p组成,根据测试条件q
T l T_l Tl或者 T r T_r Tr。
由于切割是随机的,所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。iForest 由t个iTree(Isolation Tree)孤立树 组成,每个iTree是一个二叉树结构,
算法步骤:
获得t个iTree之后,iForest 训练就结束,然后我们可以用生成的iForest来评估测试数据了。对于一个训练数据x,我们令其遍历每一棵iTree,然后计算x最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值。设置一个阈值(边界值),average path length 低于此阈值的测试数据即为异常。异常在这些树中只有很短的平均高度。
转自:https://www.jianshu.com/p/5af3c66e0410
LOF (Local Outliers Factor,局部异常因子) 算法 是一种非监督异常检测算法,它是通过计算给定数据点相对于其邻域的局部密度偏差而实现异常检测。
核心思路: LOF算法是通过比较每个点p和邻域点的密度来判断该点是否为异常:点p的密度越低,越有可能是异常点。而点的密度是通过点之间的距离来计算的,点之间距离越远,密度越低;距离越近,密度越高。也就是说,LOF算法中点的密度是通过点的k邻域计算得到的,而不是通过全局计算得到,这里的"k邻域”也就是该算法中“局部”的概念。
相关定义: 论文中一共有七个定义,详细内容请下载论文了解。这里只介绍其中的五处定义,理解这几个定义基本上就能明白算法核心内容:
定义 3, k-distance of an object (对象p的k距离): 对于任意正整数k,p的k距离表示为k-distance§,定义为对象p和数据集D中对象o之间的距离d(p,o),满足:
注意:(k-distance是函数名,不能把 - 当成减号)
为了解释k距离、k距离邻域问题,论文中例图如下:
自己的理解:在距离数据点 p 最近的几个点中,第 k 个(不包括p)最近的点跟点 p 之间的距离称为点 p 的 K-邻近距离,记为 k-distance (p)。论文这么定义是有存在虚线上有多个点的情况。
定义 4, k-distance neighborhood of an object p (对象p的k距离邻域): 给定k值,那么p对象的k距离领域则可表示为: N k − d i s t a n c e ( p ) ( P ) = { q ∈ D ∖ p ∣ d ( p , q ) ≤ k − d i s t a n c e ( p ) } N_{k−distance(p)}(P)=\lbrace q∈D∖{p}∣d(p,q)≤k−distance(p) \rbrace Nk−distance(p)(P)={q∈D∖p∣d(p,q)≤k−distance(p)}
定义 5, reachability distance of an object p w.r.t. object o (对象p关于对象o的可达距离):
r e a c h − d i s k k ( p , o ) = m a x { k − d i s t a n c e ( o ) , d ( p , o ) } reach−disk_k(p,o)=max \lbrace k−distance(o),d(p,o)\rbrace reach−diskk(p,o)=max{k−distance(o),d(p,o)}
这句话的理解可以参考上图,对于两个不同的点p1和p2,它们的可达距离计算是不一样的,对p1来说,因为p1 在 o 的 k 邻域内(可以看出这里的k=3),所以它们的距离就是 k-distance(o) 的距离,也就是等于圆的半径;而对于p2,很明显它不在o的k邻域内,所以它的可达距离就是实际距离,也就是这两点之间的距离。
定义 6, local reachability density of an object p (对象p的局部可达密度):
即对象p的局部可达密度是基于p的MinPts邻居的平均可达距离的倒数。对象p的局部可达密度越高,越可能属于统一簇;密度越低,越可能是离群点。
注意,是p到o的可达距离(o为中心点),并且,如果有重复点,那么分母的可达距离之和有可能为0,则会导致lrd变为无限大
定义7, local outlier factor of an object p (对象p的局部异常因子):
对象p的局部异常因子表示p 的异常程度。如果这个比值的绝对值越接近1,说明p与邻域点的密度相差不多,p 和邻域同属一簇;如果这个比值的绝对值小于1,说明p的密度高于邻域点的密度,p 为密集点;如果这个比值的绝对值大于1的部分越多,说明 p 的密度小于邻接点的密度, p 越有可能是异常点。
One-Class SVM: One-Class SVM是一种无监督算法,它学习用于新颖性(novelty)检测的决策函数:将新数据分类为与训练集相似或不同的数据。
严格来说,One-Class SVM 不是一个异常点检测算法,而是一个新颖值检测(Novelty Detection)算法。换句话说,在One-Class SVM 将所有与正常数据有一定区别的都当成新颖数据,而我们根据实际需要设定边界,才认为超出边界的数据为异常数据。关于边界的问题,可以参考后面的例子。
One-Class SVM 算法与SVM算法的原理以及数学模型基本相同。总而言之就是寻找一个超平面,使用这个超平面把正常数据和异常数据(或称之为新颖数据)划分开,这是SVM算法的基本思想,而One-Class SVM 是基于一类数据(正常数据)求超平面,对 SVM 算法中求解负样本最大间隔目标进行改造,进而完成非监督学习下的异常检测。识别一个新的数据点时,如果这个数据点落在超球面内,就是这个类,否则不是。
support vector domain description(SVDD)SVDD的优化目标就是,求一个中心为a,半径为R的最小球面:
使得这个球面满足:
满足这个条件就是说要把training set中的数据点都包在球面里。
ξ i \xi_i ξi是松弛变量,和经典SVM中的松弛变量的作用相同 ,它的作用就是,使得模型不会被个别极端的数据点给“破坏”了,想象一下,如果大多数的数据都在一个小区域内,只有少数几个异常数据在离它们很远的地方,如果要找一个超球面把它们包住,这个超球面会很大,因为要包住那几个很远的点,这样就使模型对离群点很敏感.
注意松弛变量是带有下标i的,也就是说它是和每个数据点有关的,每个数据点都有对应的松弛变量,可以理解为:对于每个数据点来说,那个超球面可以是不一样的,根据松弛变量来控制,如果松弛变量的值一样,那超球面就一样。
有了要求解的目标,又有了约束,接下来的求解方法和SVM几乎一样,用的是Lagrangian乘子法:
α i ≥ 0 \alpha_i\geq 0 αi≥0, γ i ≥ 0 \gamma_i\geq 0 γi≥0,对参数求导并令倒数等于0得到:
再代回拉格朗日函数,得到:
之后的求解步骤就和SVM中的一样了。
训练结束后,判断一个新的数据点z是否是这个类,那么就看这个数据点是否在训练出来的超球面里面
将超球面的中心用支持向量来表示
基本思想: 该算法是基于高斯分布的异常检测算法(Anomaly Detection Algorithm),在很多场景中被广泛使用。其算法的核心思想是:给定一个m*n维训练集,将训练集转换为n维的高斯分布,通过对m个训练样例的分布分析,得出训练集的概率密度函数,即得出训练集在各个维度上的数学期望μ和方差σ^2,并且确定一个阈值ε。当给定一个新的点,我们根据其在高斯分布上算出的概率,及阈值ε,判断当p<ε判定为异常,当p>ε判定为非异常。
对于无偏移的n维高斯分布,其概率密度函数可以使用以下两种方式来表示:
概率式:
矩阵式:
关于ε的确定,
使用降维后的维度作为新的特征空间,其降维结果可以认为剔除了异常值的影响(因为过程是保留使投影后方差最大的投影方向)