基于两步聚类的离群点检测

转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html

本文主要针对IBM SPSS Modeler 18.0中离群点检测算法的原理以及“异常”节点(见图1)使用方法进行说明。SPSS Modeler中的离群点检测算法思想主要基于聚类分析。如图2所示,可先将图中样本点聚成三类,$A$、$B$和$C$三个样本点应分别属于距离他们最近的类,但与相对类内的其他样本点,这三个点又分别远离各自的类,所以可以基于此判定是离群点。

图1:“异常”节点

图2:离群点检测示意图

1. 离群点检测算法思想

根据上述分析,你群点检测算法主要分为三个阶段:第一阶段,聚类,即将样本点聚成若干类;第二阶段,计算,即在第一阶段聚类的基础上,依据距离计算所有样本点的异常性测度指标;第三阶段,诊断,即在第二阶段异常性测度指标的基础上,确定最终的离群点,并分析导致样本点异常的原因,也就是分析离群点在哪个变量方向上呈现异常。以下就这三个阶段分别讨论:

1.1. 第一阶段:聚类

该阶段主要借助两步聚类算法实现对所有样本点的聚类(可参考两步聚类算法的相关内容)。两步聚类算法主要分为两个步骤:第一步是通过构造聚类特征(CF)树将大量零散的数据样本浓缩成可管理数量的子簇;第二步是从CF树叶节点的子簇开始利用凝聚法(agglomerative hierarchical clustering method),逐个地合并子簇,直到期望的簇数量。

两步聚类算法可以进行离群点处理,首先在CF树瘦身(rebuilding)之前筛选出潜在离群点,并CF树瘦身步骤后重新插入误识离群点到中。

  • 潜在离群点的筛选。在CF树实施瘦身之前,从当前CF树中的所有叶元项(leaf entry)中找出包含最多数据样本的元项,记录该元项包含的数据样本数目($N_{\max} $),根据事先确定的比例参数$\alpha$;如果某叶元项包含的数据样本数目小于$\alpha N_{\max} $,则该叶元项置为潜在离群点,从当前CF 树中移除。
  • 误识离群点的插入。在CF树瘦身完毕后,逐个处理潜在离群点,如果能够在不增加当前CF树体积的条件下吸收到CF树中,则认为该潜在离群点为误识离群点,将插入至当前CF树上。在完成数据集$\mathfrak D $中所有数据点到CF树上的插入后,仍为潜在离群点的元项,视为最终离群点。

在完成数据集中所有数据样本到CF树上的插入后,仍为潜在离群点的元项,视为最终离群点。这些离群点将会分配到第二步凝聚法的聚类结果中。

“异常”节点中与此阶段相关的,是其“专家”选项的相关参数设计(见图3):

  • 调整系数。指定一个大于0的数,用于调整连续型变量和分类型变量在计算距离时的权重,该值越大,连续型变量的权重越大。
  • 自动计算对等组数。表示自动判断样本点应聚成几个类,聚类数目允许的最小值和最大值须分别指定。
  • 指定对等组数。选中此选项,可直接指定聚类数目。
  • 噪声水平。其对应了上文中的$\alpha$,噪声水平的取值在0到0.5之间。
  • 插补缺失值。如果选中该选项,对于连续型变量将用变量均值代替缺失值,对于分类型变量,缺失值将作为一个有效的新类别;如果,该选项没有选中,任何带有缺失值的样本都将从分析中剔除。

图3:“异常”节点的“专家”选项

1.2. 第二阶段:计算

第二阶段的任务是在第一阶段聚类的基础上,计算样本的异常性测度指标,异常性测度指标的计算是基于对数似然距离(可参考对数似然距离的相关内容)。对于样本点$s$,离群点检测算法计算了以下指标。

(1)找到样本点$s$所属的簇$C_j$。通过计算$\{s\}$与$C_j \setminus \{s\}$的对数似然距离得到样本点$s$的组差异指标GDI(Group Deviation Index):

\begin{equation}\label{Eq.1}
GDI_s = d(\{s\}, C_j \setminus \{s\}) = \zeta_{C_j \setminus \{s\}} + \zeta_{\{s\}} - \zeta_{C_j}
\end{equation}

其中

\begin{equation*}
\zeta_{C_j} = -N_j \left ( \frac12 \sum_{k=1}^{D_1} \ln (\hat \sigma^2_{jk} + \hat \sigma^2_k) + \sum_{k=1}^{D_2} \hat E_{jk} \right )
\end{equation*}

\begin{equation*}
\hat E_{jk} = -\sum_{l=1}^{\epsilon_k} N_{jkl}/N_j \ln (N_{jkl}/N_j)
\end{equation*}

公式中符号的具体含义见“对数似然距离”。GDI反映的是,样本点$s$加入簇$C_j$后所引起的簇$C_j$内部差异/散布的增大量,因此GDI越大,样本点越有可能是离群点。

(2)根据$\zeta_{C_j}$的定义,$\zeta_{C_j}$可以划分成各变量上值得线性组合:

\begin{equation*}
\zeta_{C_j} = \sum_k^D \zeta_{C_j}^{(k)}
\end{equation*}

其中

\begin{equation*}
\zeta_{C_j}^{(k)} =
\begin{cases}
- \frac{N_j}2 \ln (\hat \sigma^2_{jk} + \hat \sigma^2_k), & \text{变量}k\text{是连续型的} \\
-\sum_{l=1}^{\epsilon_k} N_{jkl} \ln (N_{jkl}/N_j), & \text{变量}k\text{是分类型的}
\end{cases}
\end{equation*}

进一步定义样本点$s$在变量$k$上的变量差异指标VDI(Variable Deviation Index):

\begin{equation}\label{Eq.2}
VDI_s^{(k)} = \zeta_{C_j \setminus \{s\}}^{(k)} + \zeta_{\{s\}}^{(k)} - \zeta_{C_j}^{(k)}
\end{equation}

因此有$GDI_s = \sum_k VDI_s^{(k)}$,变量差异指标VDI表示各变量在组差异指标GDI上的“贡献”大小。

(3)计算异常指标AI(Anomaly Index)。

对于样本点$s$,其AI定义为:

\begin{equation}\label{Eq.3}
AI_s = \frac{GDI_s}{\frac{1}{|C_j|} \sum_{t \in C_j} GDI_t}
\end{equation}

AI是一个相对指标较GDI更直观,是样本点$s$所引起的簇内差异与簇$C_j$内其它样本点所引起差异的平均值的比例,该值越大,认为样本点$s$是离群点的可能性就越大。

(4)计算变量贡献指标VCM(Variable Contribution Measures)。

对于样本点$s$,变量$k$的贡献指标定义为

\begin{equation}\label{Eq.4}
VCM_s^{(k)} = \frac{VDI_s^{(k)}}{GDI_s}
\end{equation}

VCM是一个相对指标,较VDI更直观,反映的是各聚类变量对组内差异“贡献”的比例。该值越大,则相应变量导致样本点$s$离群原因的可能性越大。

1.3. 第三阶段:诊断

第二阶段计算得到了所有样本点的GDI、VDI、AI和VCM,本阶段将依据这些指标的排序结果,确定离群点,并分析导致异常的原因。

  1. 将AI按照降序排序,排在前$m$位的样本点可能为离群点。同时,$m$位置的AI 值就是离群点的判断标准。大于该值的为离群点,小于为非离群点。
  2. 对于离群点,将VDI按照降序排序,排在前$l$位的变量是导致该点可能异常的主要原因。

“异常”节点中与第二、三阶段相关的,是其“模型”选项的相关参数设计(见图4):

  • 最小异常指数水平。指定异常指标AI的阈值,对于样本点$s$,如果根据式(3)计算出的$AI_s$大于该阈值,则该样本点$s$定义为离群点。
  • 训练数据中最异常的记录百分比。指定多少百分比的样本为离群点。
  • 训练数据中最异常的记录数。指定多少个样本为离群点。
  • 要报告的异常字段数($l$)。对于离群点$s$,对于所有变量$k$,取$l$个$VDI_s^{(k)}$值(由式(2)计算)最大的变量在模型结果中进行报告。

图4:“异常”节点的“模型”选项

2. 示例流

图5:异常检测示例流

参考《SPSS Modeler数据挖掘方法及应用》中的数据和流,构造了图5中所示的流。打开流中的模型块(如图6和7所示)。

图6中“模型”选项的结果表明,所有样本数据聚成了两类(称之为“对等组”),第1类包含498个样本,发现5个离群点;第2类包含169个样本,发现1个离群点。对第1类中5 个离群点分别找出3个VCM值(见式(4))最大的变量,形成了图6中的上表。所有5个离群点对应的3个VCM值最大的变量中都包含“基本费用”,换句话说,变量“基本费用”对于形成所有5个离群点都有较大贡献,5个离群点的平均VCM 值为0.165. 另一个需要注意的变量是“免费部分”,虽然该变量只对3个离群点的成因有较大贡献,但其平均VCM的值达到了0.325,这说明,它对这3个离群点的成因有非常大的贡献。

图7中“摘要”选项给出了判断离群点的AI阈值,即“异常指数分界值:1.52328”。 针对本次找出的6个离群点,通过式(3)计算出的AI值都不小于该值,而其它样本点的AI值都小于该值。

图6:“异常”模型块的“模型”选项

图7:“异常”模型块的“摘要”选项

在模型块的“设置”选项中选中“丢弃记录”-“非异常”后运行“异常数据”表格,得到如图8的离群点输出结果,该表格中一共出现了5类新变量:

表1:新变量说明

新变量名称 说明
$O-Anomaly 是否离群点,T:是,F:否
$O-AnomalyIndex 该样本的异常指标AI,由式(3)计算
$O-PeerGroup 样本分配到的对等组(所在簇)
$O-Field-n VCM第n大的变量名称,VCM由式(4)计算
$O-FieldImpact-n VCM第n大的变量对应的VCM值

以图5中的流为例,因为图4中的“要报告的异常字段数”设定为3,所以$O-Field-n$O-FieldImpact-n中的$n$最大只能取到3. 再看图8中的第一行,该样本的$AI=1.530$,属于第一个簇,VCM贡献最大的变量是“收入”,该样本在变量“收入”下的$VCM=0.200$.

图8:离群点输出结果表

参考文献

[1] 薛薇, 陈欢歌. SPSS Modeler数据挖掘方法及应用[M]. 北京: 电子工业出版社. 2014.

原文地址:https://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html

时间: 2024-08-06 21:41:35

基于两步聚类的离群点检测的相关文章

挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的一种聚类算法,是BIRCH层次聚类算法的改进版本.可以应用于混合属性数据集的聚类,同时加入了自动确定最佳簇数量的机制,使得方法更加实用.本文在学习文献[1]和“IBM SPSS Modeler 15 Algorithms Guide”的基础上,融入了自己的理解,更详尽地叙述两步聚类算法的流程和细节.

【读书笔记-数据挖掘概念与技术】离群点检测

1   离群点和离群点分析 1.2    离群点的类型 a.全局离群点 显著偏离数据集中的其余对象,最简单的一类离群点. 检测方法:找到一个合适的偏离度量 b.情境离群点 离群点的值依赖于情境.分为情境属性(定义对象的情境)和行为属性(定义对象的特征) c.集体离群点 数据对象的子集形成集体离群点,如果这些对象作为整体显著偏离整个数据集. 1.3   离群点检测的挑战 正常数据与异常数据的界限不明显: 离群点≠噪声 2   离群点检测方法 两大类:         a.根据用于分析的数据样本是否

一步一步教你搭建基于docker的MongoDB复制集群环境

一步一步教你搭建基于docker的MongoDB复制集群环境 1.安装docker 2.创建MongoDB的Image 3.搭建MongoDB的集群 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中. 1.ubuntu14.04安装docker 参考文档 http://docs.docker.com/installation/ubuntulinux/ 参考文档 http://docs.docker.com/mac/started/ pc@pc-Th

聚类:层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类

一.层次聚类 1.层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离.每次将距离最近的点合并到同一个类.然后,再计算类与类之间的距离,将距离最近的类合并为一个大类.不停的合并,直到合成了一个类.其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等.比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离. 层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerat

基于密度的聚类之Dbscan算法

一.算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类(笔者认为是因为他不是基于距离的,基于距离的发现的是球状簇). 该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给

基于Keepalived构建高可用集群配置实例(HA Cluster)

什么是集群 简单的讲集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统.并且集群系统的管理员可以随意增加和删改集群系统的节点. 关于更详细的高可用集群我们在后面再做详解,先来说说Keepalived Keepalived是什么 Keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbea

【机器学习】DBSCAN Algorithms基于密度的聚类算法

一.算法思想: DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类. DBSCAN中的几个定义: Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域: 核心对象:如果给定对象Ε领域内的样本点数大于等于MinPts,则称该对象为核心对象:

为什么说K-Means是基于距离的聚类算法?

K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,两个对象的距离越近,其相似度就越大.K-means算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标.k-means聚类,需要用户设定一个聚类个数k作为输入数据.k个初始类聚类中心点的选取,对聚类结果具有较大的.为了用k-means达到高质量的聚类,需要估计k值.可根据需要的聚类个数,估计k值.比如一百万篇文章,如果平均500篇分为一类,k值可以取2000(1百万/500). 算法步骤1)随机选取

基于VMware的虚拟Linux集群搭建-lvs+keepalived

通过keepalived实现lvs服务器的的双机热备和真实服务器之间的负载均衡的blog挺多的,在搭建的时候也参考了相关博文,不同人搭建的实验环境不一样,本文是基于VM搭建的虚拟集群环境,全部虚拟机网卡模式为NAT方式相连,处于同一网段. 搭建环境: 使用redhead 2.6.32-431.el6.x86_64版本的linux,创建四台,配置相关网络信息,确保同一网段下. 配置好各自ip即可,虚拟ip在配置lvs时设定. 安装配置LVS 1.在主备Lvs上安装ipvsadm和keepalive