样本数据中异常值(Outliers)检测方法及SPSS&R实现

异常值检验,又称为离群点分析或者孤立点挖掘。在人们对数据进行分析处理的过程中,经常会遇到少量这样的数据,它们与数据一般模式不一致,或者说与大多数样相比有些不一样,我们称这样的数据为异常数据。

异常数据挖掘涉及两个基本问题。其一,在对一个给定的数据集分析之前必须事先约定满足什么样的数据才是异常数据,也就是异常数据定义的问题。其二,用什么方法来从给定的数据集中将异常数据提取出来。

二、异常数据的定义

张德然在吸收归纳前人的研究基础上,将异常值从内涵上分为广义异常值和狭义异常值。广义异常值是指:所获统计数据与真实数据相对误差较大的数据,统指一切失真数据;狭义异常值是指:所获统计数据中部分数据与其余主体数据相比明显不一致的数据,也称离群值。

为了从数据集中识别异常数据,就必须有一个明确的标准。这需要找到数据的内在规律,在一个可接受的误差范围内,满足内在规律的数据就是正常数据,而不满足内在规律的数据就是异常数据。这种数据间的内在规律可以根据数据本身的特点从位置关系、函数关系、规则关系、序列关系等方面来考查。

(1)位置关系

位置关系是数据间的最常见的一种关系,大多数正常数据具有很大的相似性而符合一个共同模式,在空间上表现在一起的趋势,团结在一个或者多个核心的周围,而那些异常数据则表现得离群,他们总是离所有的核心都很远。

(2)函数关系

函数关系也是一种常见的数据关系,即大多数数据都符合某个函数模型,因此数据点大多分布在函数曲线附近,而那些异常数据则距离曲线比较远。

(3)规则关系

如果数据集中某些符合某个规则条件,则称这些数据具有规则关系。具有同一规则关系的正常数据一般会使该规则的结论成立,而如果某个数据具有该规则关系但不能使该结论成立,那么他就是异常数据。

(4)序列关系

序列关系是指数据集中的某些数据满足某种序列模式,而那些相同条件下不满足序列模式的数据就是异常数据。

三、SPSS中异常值的识别过程

(1)采用数据探索过程探测异常值

SPSS菜单实现程序为:主菜单-->“Analyze”-->“DescriptiveStatistics”-->“Explore……”选项-->“Statistics”按钮-->选中“Outliers”复选框。输出结果中将列出5个最大值和5个最小值作为异常的嫌疑值。

(2)采用箱线图(boxplot)探测异常值

盒式图'或叫'盒须图''箱形图'boxplot(也称箱须图(Box-whiskerPlot)须图又称为箱形图,其绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。如下图所示,标示了图中每条线表示的含义,其中应用到了分位值(数)的概念。主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有异常值。

Spss中箱线图绘制有两种方法:一种是利用上述的数据探测过程,在“Explore”对话框中单击“Plots”,通过“Boxplots”方框可以确定箱线图的生成方式。“Factorlevelstogether”复选框表示将要为每个因变量创建一个箱线图,“Dependenttogether”复选框表示将为每个分组变量水平创建箱线图,“None”复选框表示不创建箱线图。二是直接利用SPSS中的画图功能实现箱线图,SPSS给出了两种箱线图,一种是基本箱线图,另一种是交互式箱线图。基本箱线图的SPSS菜单实现为:点击主菜单中的“Graphs”选项,在弹出的一级菜单中选择“Boxplot……”选项。交互式箱形图的SPSS菜单实现为:点击主菜单中的“Graphs”选项,在弹出的一级菜单中点击“Interactive”选项,在弹出的二级菜单中选择“Boxplot……”选项。箱线图中的“○”表示可疑的异常值,此处异常值的确定采用的是“五数概括法”,即:变量值超过第75百分位点和25百分位点上变量值之差的1.5倍(箱体上方)或变量值小于第75百分位点和25百分位点上变量值之差的1.5倍(箱体下方)的点对应的值。

(3)采用Z分标准化法(3σ法):±3σ以外的数据为高度异常值,应予剔除。

(4)SPSS中异常值的剔除

发现异常值后,把大于等于最小异常值或小于等于最大异常值的值用Data主菜单里的CasesSelect子菜单里的条件设置按钮,就可以自动剔除异常值。

四、R语言中异常值得识别过程

(1)单变量异常检测

本部分展示了一个单变量异常检测的例子,并且演示了如何将这种方法应用在多元数据上。在该例中,单变量异常检测通过boxplot.stats()函数实现,并且返回产生箱线图的统计量。在返回的结果中,有一个部分是out,它结出了异常值的列表。更明确点,它列出了位于极值之外的胡须。参数coef可以控制胡须延伸到箱线图外的远近。在R中,运行boxplot.stats可获取更详细的信息。

如图呈现了一个箱线图,其中有四个圈是异常值

如上的单变量异常检测可以用来发现多元数据中的异常值,通过简单搭配的方式。在下例中,我们首先产生一个数据框df,它有两列x和y。之后,异常值分别从x和y检测出来。然后,我们获取两列都是异常值的数据作为异常数据。

在下图中,异常值用红色标记为'+'

类似的,我们也可以将x或y为异常值的数据标记为异常值。下图,异常值用'x'标记为蓝色。

当有三个以上的变量时,最终的异常值需要考虑单变量异常检测结果的多数表决。当选择最佳方式在真实应用中进行搭配时,需要涉及领域知识。

(2)使用LOF(localoutlierfactor,局部异常因子)进行异常检测

LOF(局部异常因子)是用于识别基于密度的局部异常值的算法。使用LOF,一个点的局部密度会与它的邻居进行比较。如果前者明显低于后者(有一个大于1的LOF值),该点位于一个稀疏区域,对于它的邻居而言,这就表明,该点是一个异常值。LOF的缺点就是它只对数值数据有效。lofactor()函数使用LOF算法计算局部异常因子,并且它在DMwR和dprep包中是可用的。下面将介绍一个使用LOF进行异常检测的例子,k是用于计算局部异常因子的邻居数量。下图呈现了一个异常值得分的密度图。

接着,我们结合前两个主成份的双标图呈现异常值。在如上代码中,prcomp()执行了一个主成分分析,并且biplot()使用前两个主成分画出了这些数据。在上图中,x和y轴分别代表第一和第二个主成份,箭头表示了变量,5个异常值用它们的行号标记出来了。我们也可以如下使用pairsPlot显示异常值,这里的异常值用'+'标记为红色。

Rlof包,对LOF算法的并行实现。它的用法与lofactor()相似,但是lof()有两个附加的特性,即支持k的多元值和距离度量的几种选择。如下是lof()的一个例子。在计算异常值得分后,异常值可以通过选择前几个检测出来。注意,目前包Rlof的版本在MacOSX和Linux环境下工作,但并不在windows环境下工作,因为它要依赖multicore包用于并行计算。

(3)通过聚类进行异常检测

另外一种异常检测的方法是聚类。通过把数据聚成类,将那些不属于任务一类的数据作为异常值。比如,使用基于密度的聚类DBSCAN,如果对象在稠密区域紧密相连,它们将被分组到一类。因此,那些不会被分到任何一类的对象就是异常值。我们也可以使用k-means算法来检测异常。使用k-means算法,数据被分成k组,通过把它们分配到最近的聚类中心。然后,我们能够计算每个对象到聚类中心的距离(或相似性),并且选择最大的距离作为异常值。

如下是一个基于k-means算法在iris数据上实现在异常检测。

在上图中,聚类中心被标记为星号,异常值标记为'+'

备注:

LOF算法擅长检测局部异常值,但是它只对数值数据有效。Rlof包依赖multicore包,在Windows环境下失效。对于分类数据的一个快速稳定的异常检测的策略是AVF(AttributeValueFrequency)算法。

THE END
1.异常数据挖掘方法有哪些帆软数字化转型知识库异常数据挖掘方法有多种,主要包括:统计方法、基于机器学习的方法、基于邻域的方法、基于密度的方法、基于时间序列的方法。这些方法各有优劣,适用于不同的应用场景。其中,基于机器学习的方法因其高效和适应性强,应用最为广泛。基于机器学习的方法可以通过训练模型识别正常和异常数据,从而实现异常检测。具体的方法包括监督学https://www.fanruan.com/blog/article/565512/
2.异常检测数据挖掘领域常用异常检测算法总结以及原理解析(一)基于统计的异常检测方法主要依赖于统计学原理来识别数据中的异常值。这些方法通常假设数据遵循一定的统计分布,如正态分布等。 1. 3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点。 如果数据处于均值加减三倍标准差之间,则认为是正常数据,否则,则认为是异常数据。 https://blog.csdn.net/LUyan10086/article/details/139314467
3.数据挖掘之异常检测腾讯云开发者社区什么是数据挖掘:数据挖掘 什么是异常检测:异常检测 异常检测的目标是发现与大部分其他对象不同的对象。通常,异常对象被称为离群点,因为在数据的散布图中,他们远离其他数据点。异常检测也称为偏差检测、例外挖掘。 异常检测的方法各种各样,所有这些的思想都是:异常的数据对象是不寻常的,或者在某些方面与其他对象不一https://cloud.tencent.com/developer/article/2097313
4.数据挖掘中常见的「异常检测」算法有哪些?第一个问题拿不同的方法对数据集进行实验,拿实验结果进行对比即可。所选数据集如下,数据集分别为2d-https://www.zhihu.com/question/280696035/answer/2740719377
5.数据挖掘(异常检测)——线性方法异常检测(线性方法)大纲 补充内容: 一、PCA实现流程,设有 m 条 n 维数据: S1.将原始数据按列组成 n 行 m 列矩阵 X; S2.将 X 的每一行进行零均值化,即减去这一行的均值; S3.求出协方差矩阵 ; S4.求出协方差矩阵的特征值及对应的特征向量; https://www.jianshu.com/p/dacb298afce4
6.基于数据挖掘的异常用电行为诊断方法研究基于数据挖掘的异常用电行为诊断方法研究 徐凯 开通知网号 【摘要】: 随着能源需求量的不断增大,能源短缺问题变得越来越严峻,电力这项基础产业作为能源工业的重要组成部分,越来越成为国家关心的话题,而在利益的驱动下,出现了很多诸如窃电、漏电的异常用电行为,这些行为不仅会严重威胁经济发展,还会扰乱正常的供电用电https://cdmd.cnki.com.cn/Article/CDMD-10255-1018839054.htm
7.8种Python异常检测算法总结python异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。本文为大家整理了8个常见的Python异常检测算法,希望对大家有所帮助 + 目录 一、异常检测简介 异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。 https://www.jb51.net/article/274424.htm
8.中医证候研究的现代方法学述评(一)——中医证候数据挖掘技术(1中国中医科学院临床基础医学研究所北京100700) (2中国中医科学院广安门医院内分泌科北京100053) 摘要:目的 探索中医证候的现代研究方法.方法 对近年来的中国中医期刊有关中医证候的数 据挖掘技术进行汇总,分析其优势与不足.结果 目前用于中医证候研究的数据挖掘方法主要有: 关联规则,集对分析,粗糙集理论,聚类分析,https://xb.bucm.edu.cn/rc-pub/front/files/download?id=2+ipAoMrFehgmNszh00z3A==?fileName=2006.12%20%E5%85%A8%E6%96%87
9.时序数据异常检测数据挖掘比赛题目时序数据集时序数据异常检测数据挖掘比赛题目 时序数据集 数据是驱动科技发展的源泉,平时我们科研中也经常需要在各种开源数据上验证自己模型的效果。那时间序列目前可以使用的开源数据集有哪些呢?本期为大家做一次较为全面的整理汇总。 UCR Time Series UCR时间序列数据集是时序领域的“Imagnet”,涵盖医疗/电力/地理 等诸多领域,https://blog.51cto.com/u_14256/6303536
10.数据挖掘机器之心异常检测(Outlier Analysis)–数据库可能包含不符合数据一般行为或模型的数据对象,这些数据对象即被成为异常值。大多数数据挖掘方法将异常值视为噪声或异常。但是,在诸如欺诈检测等应用中,罕见事件可能比更常见的事件更有价值。异常值数据的分析被称为异常值挖掘。 https://www.jiqizhixin.com/graph/technologies/7904de1e-5ab5-4f0a-aa60-693cb2978766