一种互联网宏观流量异常检测方法(2007-11-7 10:37) 摘要:网络流量异常指网络中流量不规则地显着变化。网络短暂拥塞、分布式拒绝服务攻击、大范围扫描等本地事件或者网络路由异常等全局事件都能够引起网络的异常。网络异常的检测和分析对于网络安全应急响应部门非常重要,但是宏观流量异常检测需要从大量高维的富含噪声的数据中提取和解释异常模式,因此变得很困难。文章提出一种分析网络异常的通用方法,该方法运用主成分分析手段将高维空间划分为对应正常和异常网络行为的子空间,并将流量向量影射在正常子空间中,使用基于距离的度量来检测宏观网络流量异常事件。公共互联网正在社会生活的各个领域发挥着越来越重要的作用,与此同时,由互联网的开放性和应用系统的复杂性所带来的安全风险也随之增多。2006年,国家计算机网络应急技术处理协调中心(CNCERT/CC)共接收26 476件非扫描类网络安全事件报告,与2005年相比增加2倍,超过2003—2005年3年的总和。2006年,CNCERT/CC利用部署的863-917网络安全监测平台,抽样监测发现中国大陆地区约4.5万个IP地址的主机被植入木马,与2005年同期相比增加1倍;约有1千多万个IP地址的主机被植入僵尸程序,被境外约1.6万个主机进行控制。黑客利用木马、僵尸网络等技术操纵数万甚至上百万台被入侵的计算机,释放恶意代码、发送垃圾邮件,并实施分布式拒绝服务攻击,这对包括骨干网在内的整个互联网网络带来严重的威胁。由数万台机器同时发起的分布式拒绝服务攻击能够在短时间内耗尽城域网甚至骨干网的带宽,从而造成局部的互联网崩溃。由于政府、金融、证券、能源、海关等重要信息系统的诸多业务依赖互联网开展,互联网骨干网络的崩溃不仅会带来巨额的商业损失,还会严重威胁国家安全。据不完全统计,2001年7月19日爆发的红色代码蠕虫病毒造成的损失估计超过20亿美元;2001年9月18日爆发的Nimda蠕虫病毒造成的经济损失超过26亿美元;2003年1月爆发的SQL Slammer蠕虫病毒造成经济损失超过12亿美元。针对目前互联网宏观网络安全需求,本文研究并提出一种宏观网络流量异常检测方法,能够在骨干网络层面对流量异常进行分析,在大规模安全事件爆发时进行快速有效的监测,从而为网络防御赢得时间。1 网络流量异常检测研究现状在骨干网络层面进行宏观网络流量异常检测时,巨大流量的实时处理和未知攻击的检测给传统入侵检测技术带来了很大的挑战。在流量异常检测方面,国内外的学术机构和企业不断探讨并提出了多种检测方法[1]。经典的流量监测方法是基于阈值基线的检测方法,这种方法通过对历史数据的分析建立正常的参考基线范围,一旦超出此范围就判断为异常,它的特点是简单、计算复杂度小,适用于实时检测,然而它作为一种实用的检测手段时,需要结合网络流量的特点进行修正和改进。另一种常用的方法是基于统计的检测,如一般似然比(GLR)检测方法[2],它考虑两个相邻的时间窗口以及由这两个窗口构成的合并窗口,每个窗口都用自回归模型拟合,并计算各窗口序列残差的联合似然比,然后与某个预先设定的阈值T 进行比较,当超过阈值T 时,则窗口边界被认定为异常点。这种检测方法对于流量的突变检测比较有效,但是由于它的阈值不是自动选取,并且当异常持续长度超过窗口长度时,该方法将出现部分失效。统计学模型在流量异常检测中具有广阔的研究前景,不同的统计学建模方式能够产生不同的检测方法。最近有许多学者研究了基于变换域进行流量异常检测的方法[3],基于变换域的方法通常将时域的流量信号变换到频域或者小波域,然后依据变换后的空间特征进行异常监测。P. Barford等人[4]将小波分析理论运用于流量异常检测,并给出了基于其理论的4类异常结果,但该方法的计算过于复杂,不适于在高速骨干网上进行实时检测。Lakhina等人[5-6]利用主成分分析方法(PCA),将源和目标之间的数据流高维结构空间进行PCA分解,归结到3个主成分上,以3个新的复合变量来重构网络流的特征,并以此发展出一套检测方法。此外还有一些其他的监测方法[7],例如基于Markov模型的网络状态转换概率检测方法,将每种类型的事件定义为系统状态,通过过程转换模型来描述所预测的正常的网络特征,当到来的流量特征与期望特征产生偏差时进行报警。又如LERAD检测[8],它是基于网络安全特征的检测,这种方法通过学习得到流量属性之间的正常的关联规则,然后建立正常的规则集,在实际检测中对流量进行规则匹配,对违反规则的流量进行告警。这种方法能够对发生异常的地址进行定位,并对异常的程度进行量化。但学习需要大量正常模式下的纯净数据,这在实际的网络中并不容易实现。随着宏观网络异常流量检测成为网络安全的技术热点,一些厂商纷纷推出了电信级的异常流量检测产品,如Arbor公司的Peakflow、GenieNRM公司的GenieNTG 2100、NetScout公司的nGenius等。国外一些研究机构在政府资助下,开始部署宏观网络异常监测的项目,并取得了较好的成绩,如美国研究机构CERT建立了SiLK和AirCERT项目,澳大利亚启动了NMAC流量监测系统等项目。针对宏观网络异常流量监测的需要,CNCERT/CC部署运行863-917网络安全监测平台,采用分布式的架构,能够通过多点对骨干网络实现流量监测,通过分析协议、地址、端口、包长、流量、时序等信息,达到对中国互联网宏观运行状态的监测。本文基于863-917网络安全监测平台获取流量信息,构成监测矩阵,矩阵的行向量由源地址数量、目的地址数量、传输控制协议(TCP)字节数、TCP报文数、数据报协议(UDP)字节数、UDP报文数、其他流量字节数、其他流量报文书、WEB流量字节数、WEB流量报文数、TOP10个源IP占总字节比例、TOP10个源IP占总报文数比例、TOP10个目的IP占总字节数比例、TOP10个目的IP占总报文数比例14个部分组成,系统每5分钟产生一个行向量,观测窗口为6小时,从而形成了一个72×14的数量矩阵。由于在这14个观测向量之间存在着一定的相关性,这使得利用较少的变量反映原来变量的信息成为可能。本项目采用了主成份分析法对观测数据进行数据降维和特征提取,下面对该算法的工作原理进行介绍。 2 主成分分析技术主成分分析是一种坐标变换的方法,将给定数据集的点映射到一个新轴上面,这些新轴称为主成分。主成分在代数学上是p 个随机变量X 1, X 2……X p 的一系列的线性组合,在几何学中这些现线性组合代表选取一个新的坐标系,它是以X 1,X 2……X p 为坐标轴的原来坐标系旋转得到。新坐标轴代表数据变异性最大的方向,并且提供对于协方差结果的一个较为简单但更精练的刻画。主成分只是依赖于X 1,X 2……X p 的协方差矩阵,它是通过一组变量的几个线性组合来解释这些变量的协方差结构,通常用于高维数据的解释和数据的压缩。通常p 个成分能够完全地再现全系统的变异性,但是大部分的变异性常常能够只用少量k 个主成分就能够说明,在这种情况下,这k 个主成分中所包含的信息和那p 个原变量做包含的几乎一样多,于是可以使用k 个主成分来代替原来p 个初始的变量,并且由对p 个变量的n 次测量结果所组成的原始数据集合,能够被压缩成为对于k 个主成分的n 次测量结果进行分析。运用主成分分析的方法常常能够揭示出一些先前不曾预料的关系,因而能够对于数据给出一些不同寻常的解释。当使用零均值的数据进行处理时,每一个主成分指向了变化最大的方向。主轴以变化量的大小为序,一个主成分捕捉到在一个轴向上最大变化的方向,另一个主成分捕捉到在正交方向上的另一个变化。设随机向量X '=[X 1,X 1……X p ]有协方差矩阵∑,其特征值λ1≥λ2……λp≥0。考虑线性组合:Y1 =a 1 'X =a 11X 1+a 12X 2……a 1pX pY2 =a 2 'X =a 21X 1+a 22X 2……a 2pX p……Yp =a p'X =a p 1X 1+a p 2X 2……a p pX p从而得到:Var (Yi )=a i' ∑a i ,(i =1,2……p )Cov (Yi ,Yk )=a i '∑a k ,(i ,k =1,2……p )主成分就是那些不相关的Y 的线性组合,它们能够使得方差尽可能大。第一主成分是有最大方差的线性组合,也即它能够使得Var (Yi )=a i' ∑a i 最大化。我们只是关注有单位长度的系数向量,因此我们定义:第1主成分=线性组合a 1'X,在a1'a 1=1时,它能够使得Var (a1 'X )最大;第2主成分=线性组合a 2 'X,在a2'a 2=1和Cov(a 1 'X,a 2 'X )=0时,它能够使得Var (a 2 'X )最大;第i 个主成分=线性组合a i'X,在a1'a 1=1和Cov(a i'X,a k'X )=0(k<i )时,它能够使得Var (a i'X )最大。由此可知主成分都是不相关的,它们的方差等于协方差矩阵的特征值。总方差中属于第k个主成分(被第k个主成分所解释)的比例为:如果总方差相当大的部分归属于第1个、第2个或者前几个成分,而p较大的时候,那么前几个主成分就能够取代原来的p个变量来对于原有的数据矩阵进行解释,而且信息损失不多。在本项目中,对于一个包含14个特征的矩阵进行主成分分析可知,特征的最大变化基本上能够被2到3个主成分捕捉到,这种主成分变化曲线的陡降特性构成了划分正常子空间和异常子空间的基础。3 异常检测算法本项目的异常流量检测过程分为3个阶段:建模阶段、检测阶段和评估阶段。下面对每个阶段的算法进行详细的介绍。3.1 建模阶段本项目采用滑动时间窗口建模,将当前时刻前的72个样本作为建模空间,这72个样本的数据构成了一个数据矩阵X。在试验中,矩阵的行向量由14个元素构成。主成份分为正常主成分和异常主成份,它们分别代表了网络中的正常流量和异常流量,二者的区别主要体现在变化趋势上。正常主成份随时间的变化较为平缓,呈现出明显的周期性;异常主成份随时间的变化幅度较大,呈现出较强的突发性。根据采样数据,判断正常主成分的算法是:依据主成分和采样数据计算出第一主成分变量,求第一主成分变量这72个数值的均值μ1和方差σ1,找出第一主成分变量中偏离均值最大的元素,判断其偏离均值的程度是否超过了3σ1。如果第一主成分变量的最大偏离超过了阈值,取第一主成份为正常主成分,其他主成份均为异常主成分,取主成份转换矩阵U =[L 1];如果最大偏离未超过阈值,转入判断第下一主成分,最后取得U =[L 1……L i -1]。第一主成份具有较强的周期性,随后的主成份的周期性渐弱,突发性渐强,这也体现了网络中正常流量和异常流量的差别。在得到主成份转换矩阵U后,针对每一个采样数据Sk =xk 1,xk 2……xk p ),将其主成份投影到p维空间进行重建,重建后的向量为:Tk =UU T (Sk -X )T计算该采样数据重建前与重建后向量之间的欧氏距离,称之为残差:dk =||Sk -Tk ||根据采样数据,我们分别计算72次采样数据的残差,然后求其均值μd 和标准差σd 。转换矩阵U、残差均值μd 、残差标准差σd 是我们构造的网络流量模型,也是进行流量异常检测的前提条件。 3.2 检测阶段在通过建模得到网络流量模型后,对于新的观测向量N,(n 1,n 2……np ),采用与建模阶段类似的分析方法,将其中心化:Nd =N -X然后将中心化后的向量投影到p维空间重建,并计算残差:Td =UUTNdTd =||Nd -Td ||如果该观测值正常,则重建前与重建后向量应该非常相似,计算出的残差d 应该很小;如果观测值代表的流量与建模时发生了明显变化,则计算出的残差值会较大。本项目利用如下算法对残差进行量化:3.3 评估阶段评估阶段的任务是根据当前观测向量的量化值q (d ),判断网络流量是否正常。根据经验,如果|q (d )|<5,网络基本正常;如果5≤|q (d )|<10,网络轻度异常;如果10≤|q (d )|,网络重度异常。4 实验结果分析利用863-917网络安全监测平台,对北京电信骨干网流量进行持续监测,我们提取6小时的观测数据,由于篇幅所限,我们给出图1—4的时间序列曲线。由图1—4可知单独利用任何一个曲线都难以判定异常,而利用本算法可以容易地标定异常发生的时间。本算法计算结果如图5所示,异常发生时间在图5中标出。我们利用863-917平台的回溯功能对于异常发生时间进行进一步的分析,发现在标出的异常时刻,一个大规模的僵尸网络对网外的3个IP地址发起了大规模的拒绝服务攻击。 5 结束语本文提出一种基于主成分分析的方法来划分子空间,分析和发现网络中的异常事件。本方法能够准确快速地标定异常发生的时间点,从而帮助网络安全应急响应部门及时发现宏观网络的流量异常状况,为迅速解决网络异常赢得时间。试验表明,我们采用的14个特征构成的分析矩阵具有较好的识别准确率和分析效率,我们接下来将会继续寻找更具有代表性的特征来构成数据矩阵,并研究更好的特征矩阵构造方法来进一步提高此方法的识别率,并将本方法推广到短时分析中。6 参考文献[1] XU K, ZHANG Z L, BHATTACHARYYA S. Profiling Internet backbone traffic: Behavior models and applications [C]// Proceedings of ACM SIGCOMM, Aug 22- 25, 2005, Philadelphia, PA, USA. New York, NY,USA:ACM,2005:169-180.[2] HAWKINS D M, QQUI P, KANG C W. The change point model for statistical process control [J]. Journal of Quality Technology,2003, 35(4).[3] THOTTAN M, JI C. Anomaly detection in IP networks [J]. IEEE Transactions on Signal Processing, 2003, 51 )8):2191-2204.[4] BARFORD P, KLINE J, PLONKA D, et al. A signal analysis of network traffic anomalies [C]//Proceedings of ACM SIGCOMM Intemet Measurement Workshop (IMW 2002), Nov 6-8, 2002, Marseilles, France. New York, NY,USA:ACM, 2002:71-82.[5] LAKHINA A, CROVELLA M, DIOT C. Mining anomalies using traffic feature distributions [C]// Proceedings of SIGCOMM, Aug 22-25, 2005, Philadelphia, PA, USA. New York, NY,USA: ACM, 2005: 217-228.[6] LAKHINA A, CROVELLA M, DIOT C. Diagnosing network-wide traffic anomalies [C]// Proceedings of ACM SIGCOMM, Aug 30 - Sep 3, 2004, Portland, OR, USA. New York, NY,USA: ACM, 2004: 219-230.[7] SCHWELLER R, GUPTA A, PARSONS E, et al. Reversible sketches for efficient and accurate change detection over network data streams [C]//Proceedings of ACM SIGCOMM Internet Measurement Conference (IMC’04), Oct 25-27, 2004, Taormina, Sicily, Italy. New York, NY,USA: ACM, 2004:207-212.[8] MAHONEY M V, CHAN P K. Learning rules for anomaly detection of hostile network traffic [C]// Proceedings of International Conference on Data Mining (ICDM’03), Nov 19-22, Melbourne, FL, USA . Los Alamitos, CA, USA: IEEE Computer Society, 2003:601-604.
⑵ 异常检测的相关定义
1、误用检测是指通过攻击行为的特征库,采用特征匹配的方法确定攻击事件.误用检测的优点是检测的误报率低,检测快,但误用检测通常不能发现攻击特征库中没有事先指定的攻击行为,所以无法检测层出不穷的新攻击
2、异常检测是指根据非正常行为(系统或用户)和使用计算机非正常资源来检测入侵行为.其关键在于建立用户及系统正常行为轮廓(Profile),检测实际活动以判断是否背离正常轮廓
3、异常检测是指将用户正常的习惯行为特征存储在数据库中,然后将用户当前的行为特征与特征数据库中的特征进行比较,如果两者的偏差足够大,则说明发生了异常
4、异常检测是指利用定量的方式来描述可接受的行为特征,以区分和正常行为相违背的、非正常的行为特征来检测入侵
5、基于行为的入侵检测方法,通过将过去观察到的正常行为与受到攻击时的行为相比较,根据使用者的异常行为或资源的异常使用状况来判断是否发生入侵活动,所以也被称为异常检测
6、统计分析亦称为异常检测,即按统计规律进行入侵检测.统计分析先对审计数据进行分析,若发现其行为违背了系统预计,则被认为是滥用行为
7、统计分析亦称为异常检测.通过将正常的网络的流量.网络延时以及不同应用的网络特性(如时段性)统计分析后作为参照值,若收集到的信息在参照值范围之外,则认为有入侵行为
8、异常检测(Anomaly-based detection)方法首先定义一组系统处于“正常”情况时的数据,如CPU利用率、内存利用率、文件校验和等然后进行分析确定是否出现异常。
⑶ 大数据科学家需要掌握的几种异常值检测方法
引言
异常值检测与告警一直是工业界非常关注的问题,自动准确地检测出系统的异常值,不仅可以节约大量的人力物力,还能尽早发现系统的异常情况,挽回不必要的损失。个推也非常重视大数据中的异常值检测,例如在运维部门的流量管理业务中,个推很早便展开了对异常值检测的实践,也因此积累了较为丰富的经验。本文将从以下几个方面介绍异常值检测。
1、异常值检测研究背景
2、异常值检测方法原理
3、异常值检测应用实践
异常值检测研究背景
异常值,故名思议就是不同于正常值的值。 在数学上,可以用离群点来表述,这样便可以将异常值检测问题转化为数学问题来求解。
异常值检测在很多场景都有广泛的应用,比如:
1、流量监测
互联网上某些服务器的访问量,可能具有周期性或趋势性:一般情况下都是相对平稳的,但是当受到某些黑客攻击后,其访问量可能发生显着的变化,及早发现这些异常变化对企业而言有着很好的预防告警作用。
2、金融风控
正常账户中,用户的转账行为一般属于低频事件,但在某些金融诈骗案中,一些嫌犯的账户就可能会出现高频的转账行为,异常检测系统如果能发现这些异常行为,及时采取相关措施,则会规避不少损失。
3、机器故障检测
一个运行中的流水线,可能会装有不同的传感器用来监测运行中的机器,这些传感器数据就反应了机器运行的状态,这些实时的监测数据具有数据量大、维度广的特点,用人工盯着看的话成本会非常高,高效的自动异常检测算法将能很好地解决这一问题。
异常值检测方法原理
本文主要将异常值检测方法分为两大类:一类是基于统计的异常值检测,另一类是基于模型的异常值检测。
基于统计的方法
基于模型的方法
1、基于统计的异常值检测方法
常见的基于统计的异常值检测方法有以下2种,一种是基于3σ法则,一种是基于箱体图。
3σ法则
箱体图
3σ法则是指在样本服从正态分布时,一般可认为小于μ-3σ或者大于μ+3σ的样本值为异常样本,其中μ为样本均值,σ为样本标准差。在实际使用中,我们虽然不知道样本的真实分布,但只要真实分布与正太分布相差不是太大,该经验法则在大部分情况下便是适用的。
箱体图也是一种比较常见的异常值检测方法,一般取所有样本的25%分位点Q1和75%分位点Q3,两者之间的距离为箱体的长度IQR,可认为小于Q1-1.5IQR或者大于Q3+1.5IQR的样本值为异常样本。
基于统计的异常检测往往具有计算简单、有坚实的统计学基础等特点,但缺点也非常明显,例如需要大量的样本数据进行统计,难以对高维样本数据进行异常值检测等。
2、基于模型的异常值检测
通常可将异常值检测看作是一个二分类问题,即将所有样本分为正常样本和异常样本,但这和常规的二分类问题又有所区别,常规的二分类一般要求正负样本是均衡的,如果正负样本不均匀的话,训练结果往往会不太好。但在异常值检测问题中,往往面临着正(正常值)负(异常值)样本不均匀的问题,异常值通常比正常值要少得多,因此需要对常规的二分类模型做一些改进。
基于模型的异常值检测一般可分为有监督模型异常值检测和无监督模型异常值检测,比较典型的有监督模型如oneclassSVM、基于神经网络的自编码器等。 oneclassSVM就是在经典的SVM基础上改进而来,它用一个超球面替代了超平面,超球面以内的值为正常值,超球面以外的值为异常值。
经典的SVM
1
基于模型的方法
2
基于神经网络的自编码器结构如下图所示。
自编码器(AE)
将正常样本用于模型训练,输入与输出之间的损失函数可采用常见的均方误差,因此检测过程中,当正常样本输入时,均方误差会较小,当异常样本输入时,均方误差会较大,设置合适的阈值便可将异常样本检测出来。但该方法也有缺点,就是对于训练样本比较相近的正常样本判别较好,但若正常样本与训练样本相差较大,则可能会导致模型误判。
无监督模型的异常值检测是异常值检测中的主流方法,因为异常值的标注成本往往较高,另外异常值的产生往往无法预料,因此有些异常值可能在过去的样本中根本没有出现过, 这将导致某些异常样本无法标注,这也是有监督模型的局限性所在。 较为常见的无监督异常值检测模型有密度聚类(DBSCAN)、IsolationForest(IF)、RadomCutForest(RCF)等,其中DBSCAN是一种典型的无监督聚类方法,对某些类型的异常值检测也能起到不错的效果。该算法原理网上资料较多,本文不作详细介绍。
IF算法最早由南京大学人工智能学院院长周志华的团队提出,是一种非常高效的异常值检测方法,该方法不需要对样本数据做任何先验的假设,只需基于这样一个事实——异常值只是少数,并且它们具有与正常值非常不同的属性值。与随机森林由大量决策树组成一样,IsolationForest也由大量的树组成。IsolationForest中的树叫isolation tree,简称iTree。iTree树和决策树不太一样,其构建过程也比决策树简单,因为其中就是一个完全随机的过程。
假设数据集有N条数据,构建一颗iTree时,从N条数据中均匀抽样(一般是无放回抽样)出n个样本出来,作为这颗树的训练样本。
在样本中,随机选一个特征,并在这个特征的所有值范围内(最小值与最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。
这样得到了一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直至达到终止条件。 终止条件有两个,一个是数据本身不可再分(只包括一个样本,或者全部样本相同),另外一个是树的高度达到log2(n)。 不同于决策树,iTree在算法里面已经限制了树的高度。不限制虽然也可行,但出于效率考虑,算法一般要求高度达到log2(n)深度即可。
把所有的iTree树构建好了,就可以对测试数据进行预测了。预测的过程就是把测试数据在iTree树上沿对应的条件分支往下走,直到达到叶子节点,并记录这过程中经过的路径长度h(x),即从根节点,穿过中间的节点,最后到达叶子节点,所走过的边的数量(path length)。最后,将h(x)带入公式,其中E(.)表示计算期望,c(n)表示当样本数量为n时,路径长度的平均值,从而便可计算出每条待测数据的异常分数s(Anomaly Score)。异常分数s具有如下性质:
1)如果分数s越接近1,则该样本是异常值的可能性越高;
2)如果分数s越接近0,则该样本是正常值的可能性越高;
RCF算法与IF算法思想上是比较类似的,前者可以看成是在IF算法上做了一些改进。针对IF算法中没有考虑到的时间序列因素,RCF算法考虑了该因素,并且在数据样本采样策略上作出了一些改进,使得异常值检测相对IF算法变得更加准确和高效,并能更好地应用于流式数据检测。
IF算法
RCF算法
上图展示了IF算法和RCF算法对于异常值检测的异同。我们可以看出原始数据中有两个突变异常数据值,对于后一个较大的突变异常值,IF算法和RCF算法都检测了出来,但对于前一个较小的突变异常值,IF算法没有检测出来,而RCF算法依然检测了出来,这意味着RCF有更好的异常值检测性能。
异常值检测应用实践
理论还需结合实践,下面我们将以某应用从2016.08.16至2019.09.21的日活变化情况为例,对异常值检测的实际应用场景予以介绍:
从上图中可以看出该应用的日活存在着一些显着的异常值(比如红色圆圈部分),这些异常值可能由于活动促销或者更新迭代出现bug导致日活出现了比较明显的波动。下面分别用基于统计的方法和基于模型的方法对该日活序列数据进行异常值检测。
基于3σ法则(基于统计)
RCF算法(基于模型)
从图中可以看出,对于较大的突变异常值,3σ法则和RCF算法都能较好地检测出来, 但对于较小的突变异常值,RCF算法则要表现得更好。
总结
上文为大家讲解了异常值检测的方法原理以及应用实践。综合来看,异常值检测算法多种多样 ,每一种都有自己的优缺点和适用范围,很难直接判断哪一种异常检测算法是最佳的, 具体在实战中,我们需要根据自身业务的特点,比如对计算量的要求、对异常值的容忍度等,选择合适的异常值检测算法。
接下来,个推也会结合自身实践,在大数据异常检测方面不断深耕,继续优化算法模型在不同业务场景中的性能,持续为开发者们分享前沿的理念与最新的实践方案。
⑷ 综述:广义的分布外检测(异常检测、开集识别、OOD检测)
Generalized Out-of-Distribution Detection: A Survey Jingkang Yang, Kaiyang Zhou, Yixuan Li, and Ziwei Liu https://github.com/Jingkang50/OODSurvey
分布外(Out-Of-Distribution,OOD)检测对确保机器学习系统的可靠性和安全性至关重要。例如,在自动驾驶中,当遇到它从未见过、无法给出安全决策的非常规情形或物体,我们需要驾驶系统发出警告并且将控制权交给人类。自2017年被提出起,这个问题越来越受研究者关注,各种解决方案层出不穷,大致包括:基于分类的、基于密度的、基于重构的、基于距离的方法。与此同时,其他几个问题在动机和方法上与分布外检测紧密相关,这些问题包括:异常检测(Anomaly Detection,AD)、新类检测(Novelty Detection)、开集识别(Open Set Recognition,OSR)和离群检测(Outlier Detection,OD)。尽管他们各自定义和问题设定不同,这些问题经常使读者和实践者感到困惑,这导致有些现有工作误用了这些术语。实际上,AD、ND、OSR、OOD、OD这五个问题能够统一在广义的分布外检测框架下,都可以视作分布外检测的特例或子任务,并且能够轻易地被区分。这篇综述通过总结最新的技术发展对这五个问题做了深入的回顾,并以该领域的开放挑战和潜在的研究方向作结。
可信的视觉识别系统不仅仅在已知的情境下能给出精确预测,还应该能检测到未知的样本并且丢弃或将它们交给用户来做安全地处理。
比如,一个训练良好的食物分类器应该丢弃像用户自拍照之类的非食物图片,而不是胡乱判定其属于某已知的食物类别。在安全要求极高的应用中,比如无人驾驶,系统应该在它碰到不寻常的、未在训练中见到的情形或物体时发出警告并将控制权交给司机。
大多数现有机器学习模型都基于封闭世界假设(the closed-world assumption)来训练,即测试集和训练集独立同分布,或者说两者来源于同一分布(in-distribution)。然而,当模型被部署在开放世界场景(open-world scenario)中,测试样本的分布可以是取自不同于训练集分布的分布的(out of distribution),因而需要被谨慎处理。分布的变化可能是语义漂移(比如,OOD样本取自别的类别)、协变量漂移(也称输入漂移,比如OOD样本取自其他领域??)。
只考虑语义漂移和协变量漂移两类漂移。
异常检测目的在于在测试阶段检测异常的样本,“异常”指的是偏离预定义的“正常”。这种偏离可能是协变量漂移或是语义漂移导致的。异常检测可以分为两个子任务:
与异常检测的区别 :1) 动机上,新类检测中并不像异常检测把没见过的“新”样本看做错误的或是有害的,而是将珍视这些新样本为后续模型的学习资源;2)新类检测首要关注的是语义漂移;3)新类检测中,没有限制ID样本属于单个类,在训练集中可以有多个类别的样本。
新类检测目的在于检测出不属于任何训练类别的测试样本。检测到的新奇样本通常预备用于未来程序的构建,比如特异性更强的分析、当前模型的增量学习等。依据训练类别数量的差异,新类检测分为:
OSR需要一个多类别分类器来同时1)精确地分类 训练类别的 测试样本(ID);2)识别出测试样本中 不属于训练类别 的样本(OOD)。
OSR = multi-class ND
需要模型拒绝标签迁移的样本以保证预测可靠性和安全性
分布外检测目的在于检测测试样本
当某个样本显着区别于其他的样本时,认为它是“离群”的。在异常检测、新类检测、开集识别、分布外检测的问题设定中,都存在这训练-测试的流程,要挑出测试中出现的不属于训练分布的样本。
而离群检测无“训练分布”、“测试分布”,而是直接挑出所有可见样本中显着区别于其他的那些样本。
给定同构的ID数据,最直接的方法是1)基于密度的方法,这些方法估计ID的密度,拒绝那些偏离估计的OOD的测试样本。其他的方法包括:2)依靠图片重构的质量来识别异常样本,3)直接学习一个决策边界来区分ID和OOD样本,4)基于距离的方法,5)基于元学习的方法
基于密度的方法尝试去建模正常数据(ID数据)的分布,这种做法基于一个实践假设:异常的测试样本在估计的密度模型下游较低的概率值,而正常样本概率值较高。
参数密度估计假设ID样本的密度能够被表示为某种定义好的分布。一种方法是在训练数据上拟合一个多变量高斯分布,并且度量测试样本与训练样本的期望之间的马氏距离(协方差距离,计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系)。其他的工作采用了更复杂的假设,认为训练分布是混合的高斯分布或是泊松分布等。
非参数密度估计考虑了更贴合实际的情形:预定义的分布不能够建模真实分布。可以简单地用直方图对训练分布进行建模。核密度估计(KDE)进一步使用核函数作为离散直方图的连续替代版,它可以灵活地使用点权重和带宽去控制估计的分布。
虽然经典的密度估计方法在很多任务上获得了很好的AD性能,但它们更适合低维任务。
对于计算机视觉任务中的高维数据,这些方法的计算性和可伸缩性受到影响。为缓解维数灾难,有些方法通过特征工程降维[277],[278]。
通过由潜在嵌入重建出输入,自编码器能学到无标签数据的高效表达。变分自编码器将输入的图片编码为服从高斯分布的潜在向量。习得的潜在嵌入可被视为输入的低维表示。传统密度估计方法可以应用在这些深度表示之上。
生成对抗网络由一个生成网络和一个判别网络构成,两者在零和博弈中相互竞争。典型地,生成网络学习从潜在空间到所研究数据分布的映射,而判别网络试图分辨生成器生成的数据和真实数据。然而,不同于基于自编码器/变分自编码器的范式,少了一个编码器使得GAN难以直接为一张输入图片找到相应的嵌入。针对这个问题,ADGAN [90] 对一个给定的样本,在潜在空间搜索一个好的表示。如果找不到这样的表示,这个样本被认为是异常的。该方法计算代价极高。
规范化的流描述了一个概率分布经过一系列可逆映射的转化过程。通过重复施加变量变化的规则,初始的密度“流”过了一系列可逆映射。因此,使用规范化的流的方法能够直接估计输入空间的可能性。基于流的方法有优雅的数学表示,但是它们同样仅对低维特征敏感。若不进行降维,基于流的方法计算代价高。
除通过生成式模型获取可视化嵌入外,一些方法主要通过扩充模型容量来增加提取到的特征的表示能力,这或许可以让正常(ID)能被更精确地特征化为密度估计。这些策略包括数据增强,对抗训练,蒸馏,损失函数增强,使用浅表/局部特征。
基于能量的方法使用一个标量能量评分来表述变量概率密度,这个标量采用非标准化的负对数概率,
然而,和标准的深度学习模型相比,训练基于能量的方法代价昂贵,因为马尔可夫链蒙特卡罗法(MCMC,在概率空间,通过随机采样估算兴趣参数的后验分布)采样和估计需要积分运算。
为解决这个难题,研究者提出了评分匹配方法和随机梯度之类的方法来支持高效训练。
现有工作也探索了使用频域分析方法做异常检测。人类通过图片的低频信息来理解图片,而CNN更多依赖高频信息来做决策。人们提出了CNN核平滑和谱引导的数据增强之类的方法去抑制高频分量的影响。还有一些工作发现,对低频分量的对抗攻击也很难被检测到,因此提出
基于频率的方法专注于感官异常检测(尤其是检测对抗样本),或许不适用于语义异常检测。
基于重构的方法的核心在于在ID数据上训练得到的编解码器(encoder-decoder)框架通常对ID和OOD样本返回不同的效果。
模型表现的差异可以被用作异常检测的指标。模型表现的差异可以用特征空间的差异或是重构误差来度量。
系数重构假定每个正常样本都能被有限个基础函数精确重构,而异常数据的重构开销则更大,因此生成了稠密表示。稀疏表示的典型技巧包括基于L1正则的核PCA和低阶嵌入网络。
重构误差方法依赖于以下假设:在正常数据上训练得到的重构模型在输入为正常测试样本时会输出更高质量的结果。深度重构模型(包括自编码器AE、变分自编码器VAE、生成对抗网络GAN和U-Net等)都能够被用作这类方法的backbone。
除去这种结合AE/VAE和重构误差这种标准做法,其他方法使用了更加精细的策略,比如通过memorized normality重构,调整模型架构、部分/有条件的重构。
在半监督设定下的异常检测中,CoRA分别在ID样本和OOD样本上训练,得到两个自编码器。这两个自编码器的重构误差被用作异常检测的指标。
GAN中的判别器本质上是 通过计算重构误差 实现异常检测。更进一步,GAN的变种,比如去噪声的GAN和类别-条件GAN通过 增加重构难度 获得了更好的性能。有些方法 利用重构图片在下游任务中的表现来进一步放大异常样本的重构误差 。集成也能够优化模型性能。
异常检测、单类别的新类检测通常被形式化为无监督学习问题,将所有的ID样本看做一类。
【283】做了完全有监督的异常检测
半监督的异常检测中,模型训练时用到了无标签数据。
PU学习针对这个问题被提出
自监督方法3.3.3
单个类别分类直接学到一个决策边界
未完成
共性:ID样本的类别(训练类别)为多个。
差异:开集识别还需要精确地给ID样本分类,而新类检测只需得到区分ID/OOD的二分类器。
由于开集识别和多类别新类检测的训练类别为多个,大多数方法都是基于分类的。其余方法包括基于ID原型的以及基于重构的。极少数模型是基于密度的。
为了解决
开集识别和多类新类检测都关注ID样本包含多个类别的情形。分类问题中,一般采用独热编码来编码类别信息。然而,独热编码忽略了类别间的内在联系。举例来说,“狗”-“猫”,“狗”-“车”之间有相同的距离显然不合情理。有些工作考虑这一点,尝试利用新类的标签空间上的信息来解决这个新类检测问题。重分配大的语义空间,形成已知类别的层次化分类
基于标签组织重设,自上而下的分类策略和分组softmax训练被证实有效。应一组工作使用词向量嵌入来自动地构建标签空间。【169】中稀疏独热标签被几组产生自不同NLP模型的稠密词向量替代,形成了多个回归头来做鲁棒的训练。
测试时,标签(同所有不同头给出的嵌入向量距离最小的标签被作为预测结果输出,
如果这个最小距离超出阈值,这个样本被分类为“新”。近期工作进一步采用语言-图片预训练模型输出的特征来更好地检测新类,图片编码空间中也包含来自标签空间的丰富特征。)
基于距离的开集识别方法需要“原型”来实现class-conditional。维持ID样本的分类性能。
基于类别的聚类和原型(prototyping)操作在分类器提取到的视觉特征上进行。
OOD样本能够通过计算样本与聚类之间的距离而被识别。
有些方法还引入了对比学习来为已知类别学到更加紧密的聚类,从而拉远ID和OOD样本之间的距离。
CROSR【177】通过拼接分类器和用于距离计算的重构模型给出的可视化嵌入来在拓展的特征空间中得到强化的特征。除了使用分类器给出的特征,GMVAE【178】使用重构VAE来提取特征,将训练集的嵌入建模为一个多中心的混合高斯分布以便后续基于距离的操作。使用最近邻的分类器也适用于开集识别问题。通过存储训练样本,最近邻距离比值被用于在测试中识别未知样本。
基于重构的方法希望ID和OOD样本被重构时表现不同。这种差异能够在潜在特征空间或重构图片的像素空间中被捕捉到。
通过将已知类别的图片转化为稀疏表示,开集样本由于相对稠密能被识别出。用于稀疏编码的技巧包括:疏密指数(sparsity concentration index)【180】和核虚空间方法(kernel null space method)【181,182】。
通过固定在ID样本训练得到的多分类视觉编码器来维持在ID样本上的分类性能,C2AE训练一个以表情按向量为条件的解码器,使用极值理论估计重构后的图片来区分未知类别。后续的工作使用条件高斯分布,使得不同潜在特征逼近类内(class-wise)高斯模型,以达到在分类已知类别样本的同时能拒绝未知类别样本。其他方法生成反事实(counterfactual)图片来帮助模型更关注语义。对抗防御【186】也以这种思路去增强模型鲁棒性。
后处理检测的方法优点在于无需修改训练程序和目标就可以轻易应用。这一点对现实生产环境中的OOD检测方法很重要。早期的ODIN是一个使用temperature scaling和输入扰动来放大ID/OOD差别的后处理方法。该方法中,一个足够大的temperature有很强的平滑作用,能够将softmax值转换到logit空间(),从而有效区分ID和OOD样本。注意这种方式与信心校准不同,它采用了更温和的T
而校准更关注表达ID样本真实的正确概率
ODIN的评分最大化了ID和OOD样本之间的差异,可能从预测信心的角度看不再有意义。
基于这个见解,近期【189】提出使用能量分值来做OOD检测,该方法不需要超参数并且性能与ODIN相当甚至更好。能量函数将logit输出通过便捷的 logsumexp 运算符映射为标量。能量值相对低的测试样本被认为是ID的,反之为OOD。
【55】进一步提出了联合能量值(JointEnergy score)
为OOD检测定制的基于信心的方法能够通过设计信心估计分支和类别数据增强(结合leaving-out留一策略、对抗训练、更强的数据增强、不确定性建模、利用理想深度的特征)来实现。
特别地,为了增强对协变量偏移的敏感性,一些方法关注神经网络中间层的隐藏表示。泛化的ODIN通过使用DeConf-C作为训练目标来扩展ODIN,选择ID数据上的扰动尺度作为超参。
由于ODIN需要模型训练过程,它未被归类到后处理方法。
为了得到质量更优的隐藏层特征以便进行密度估计,分层的 Mahalanobis距离、 Gram Matrix等技巧被引入。
OOD检测的另一分支利用收集到的OOD样本集(离群样本集),在训练中帮助模型学到ID和OOD的差异。
总的来说,采用离群点暴露的OOD检测能达到明显更优的性能。然而,其性能受给定OOD样本和真实OOD样本间相关性强弱影响明显,如何将OOD由已经暴露的OOD泛化到更广泛的OOD还需进一步探索。
离群点暴露方法依赖于OOD训练数据可获取这一强假设,该条件在实际可能不成立。在OOD数据不可获取时,一些方法尝试去合成OOD样本从而让ID和OOD可区分。现有工作利用GAN来生成OOD训练样本并使模型输出均匀(uniform 正态???)的预测,从而在低密度区域生成边界样本,或者类似地,生成高置信度的OOD样本。
现有的OOD检测方法主要依赖输出或特征空间来给出OOD评分,而忽视了梯度空间的信息。ODIN【188】首次探索了使用梯度信息检测OOD。ODIN使用经过预处理的输入,其预处理为施加由输入梯度得来的细微扰动。ODIN扰动的目标在于增强模型对预测标签的信心从而增加任何给定输入的softmax值。最终,可以找到能使ID和OOD输入的softmax评分差异更大的扰动,从而使得它们更能被区分,使得OOD检测性能更好。ODIN仅隐式地通过扰动来利用梯度。GradNorm则使用梯度向量的范数,从softmax输出和正态概率分布的KL散度反向传播。
贝叶斯模型是一类统计模型,应用贝叶斯法则来推测模型中所有的不确定性。其中,最有代表性的是贝叶斯神经网络,该方法通过马尔可夫链蒙特卡洛方法、拉普拉斯方法、变分推断来构成模型的认知不确定性,从模型的后验分布中采样。它们最明显的缺陷在于预测不精确,计算代价高使得它们难以用于实际。近期工作尝试了几种less principled(理论性较弱??)的近似,包括 MC-dropout [224] 和深度融合 [225],299] 用于更快、更好地估计不确定性。这些方法在OOD不确定性估计上不太有竞争力。更进一步的探索需要在保留贝叶斯原理的优势的同时,采用自然梯度变分推理,从而能够采用实用且可负担的现代深度学习训练。狄利克雷先验网络Dirichlet Prior Network (DPN) 也在OOD检测中被运用,使用对模型不确定性、数据不确定性以及分布不确定性三个不同来源的不确定性进行不确定性建模,出现了一系列工作 [227], [228], [229]。
近期工作推进了更贴近实际应用的大规模OOD检测。研究的两个方向是:将OOD检测扩展到大的语义空间、利用大型的预训练模型。例如,【168】指出,在基于CIFAR benchmark数据得到的方法在语义空间更大的benchmark ImageNet上并不奏效,这强调了在大型真实设定下评估OOD检测的必要性。为解决上述挑战,MOS的关键理念是将大的语义空间解构为有相似概念的更小的群组,这简化了已知和未知数据之间的决策边界。强有力的预训练模型在各种任务、模态都达到了惊人的性能。同期的工作 [171], [230], [231] 证实预训练过的transformer在特定的困难的OOD任务上性能显着改善。
OOD检测领域中,基于密度的方法用一些概率模型显式地建模分布内数据,并将低密度区域的测试数据标记为OOD。即使OOD检测在分布内数据为多类别的情形下和异常检测不同,3.1.2节中的密度估计方法能够通过将分布内数据统一成一个整体而直接适用于OOD检测。当分布内含多个类别时,class-conditional高斯分布能够显式地建模分布内数据,因而分布外样本能够根据输出的预测概率而被识别【207】。基于流的方法 [92], [232], [233], [234]也可被用于概率建模。直接估计OOD概率似乎是一种自然的解决方法,也有一些方法 [235], [236], [237] 通过给OOD样本输出更高的概率预测值来实现OOD检测。【238】尝试使用likelihood ratio来解决这个问题。【239】发现,对输入复杂度,概率值存在明显偏差,提出了一种基于概率值比例的方法来削减输入复杂度的影响。近期的方法转而使用新的评分,例如likelihood regret【240】或是集成多个密度模型【236】。整体上,生成式模型的训练和优化难度几乎是不可接受的,它们的性能也往往落后于基于分类的方法(3.3)
基于距离的方法基本理念在于,测试中OOD样本应当相对远离分布内类别的中心(centroid)或原型(prototype)。【207】使用相对所有类别中心的最小Mahalanobis距离来检测。一个后续工作【241】将图片分为前景和背景,再计算这两个空间间的Mahalanobis距离比例。一些工作使用测试样本特征和类别特征间的余弦相似度来确定OOD样本【242】、【243】。被训练特征的的第一奇异向量一维的子空间
更进一步,其他工作利用了径向基函数核距离(distance with radial basis function kernel)、输入的嵌入向量到类别中心的欧拉距离。
OOD检测领域自出现以来发展迅速,其解决方案从基于分类的、基于密度的、再到基于距离的。在多类别设定下,典型的OOD检测是开集识别问题(第4节),在类别空间Y中精确分类分布内的测试样本,并且丢弃语义不被Y所支持的分布外样本。然而,OOD检测包含了更广泛的学习任务(比如,多标签分类)和解法(比如,密度估计和离群点暴露)。一些方法放宽了开集检测的限制条件,并且达到了更强的性能。
离群检测需要所有样本可见,其目标是检测出那些显着偏离大多数的分布的样本。离群检测方法通常是转导式的,而不是归纳式的。 [13], [14], [15], [16]综述主要回顾了数据挖掘领域的离群检测方法。以下主要回顾离群检测方法,尤其是为计算机视觉设计的使用深度神经网络的方法。即使深度学习方法极少能直接解决离群检测问题,数据清洗程序(从开集脏数据学习的先决条件)和开集半监督学习的方法也在解决离群检测问题。
离群检测模型的基本理念是将整个数据集建模为一个高斯分布,将偏离均值超过三杯标准差的样本标记为离群【300】【301】。其他带参数的概率方法利用Mahalanobis距离[266] 和高斯混合模型 [302]来建模数据密度。和“三倍标准偏离”规则类似,四分位距也可通过构建传统的无参数概率模型来检测离群样本【247】。为了鲁棒和简化,局部离群因子(local outlier factor)方法【248】借助给定点的邻居和它自身局部可达性的比值,去估计给定点的密度。RANSAC【252】迭代地估计数学模型的参数来拟合数据并且找到对估计贡献较少的样本作为离群点。
总体上,经典的异常检测的密度方法比如,核密度估计(3.1节),也可应用于离群检测。即便这些方法由于图片数据维度太高而应用困难,也可以通过降维方法【253,254】和基于最近邻的密度方法(3.1节)来缓解。
检测离群的一个简易方法是计数某特定半径内的邻居数量,或者度量第k近邻居的距离【303,304】。以下主要介绍基于聚类的方法和基于图的方法。
DBSCAN【255】依照基于距离的密度来积聚样本构成聚类。处在主要聚类之外的样本被识别为离群样本。后续工作通过考虑聚类标签的信心改良了聚类的方式【256】。
另一类方法利用数据点之间的关系,并构造邻域图[305], [306](或其变体[307]),利用图的属性和图挖掘技巧来找到异常的样本【257,258】,比如图聚类[259], [260]、图分割【308】、使用图神经网络的标签传播【261】。
⑸ 如何判别测量数据中是否有异常值
一般异常值的检测方法有基于统计的方法,基于聚类的方法,以及一些专门检测异常值的方法等,下面对这些方法进行相关的介绍。
1. 简单统计
如果使用pandas,我们可以直接使用describe()来观察数据的统计性描述(只是粗略的观察一些统计量),不过统计数据为连续型的,如下:
df.describe()红色箭头所指就是异常值。
以上是常用到的判断异常值的简单方法。下面来介绍一些较为复杂的检测异常值算法,由于涉及内容较多,仅介绍核心思想,感兴趣的朋友可自行深入研究。
4. 基于模型检测
这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。如果模型是簇的集合,则异常是不显着属于任何簇的对象;如果模型是回归时,异常是相对远离预测值的对象。
离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。
比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。
优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
5. 基于近邻度的离群点检测
统计方法是利用数据的分布来观察异常值,一些方法甚至需要一些分布条件,而在实际中数据的分布很难达到一些假设条件,在使用上有一定的局限性。
确定数据集的有意义的邻近性度量比确定它的统计分布更容易。这种方法比统计学方法更一般、更容易使用,因为一个对象的离群点得分由到它的k-最近邻(KNN)的距离给定。
需要注意的是:离群点得分对k的取值高度敏感。如果k太小,则少量的邻近离群点可能导致较低的离群点得分;如果K太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
5. 基于密度的离群点检测
从基于密度的观点来说,离群点是在低密度区域中的对象。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。
优缺点:(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
6. 基于聚类的方法来做异常点检测
基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇,那么该对象属于离群点。
离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。这也是k-means算法的缺点,对离群点敏感。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。
优缺点:(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;(3)产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
7. 专门的离群点检测
其实以上说到聚类方法的本意是是无监督分类,并不是为了寻找离群点的,只是恰好它的功能可以实现离群点的检测,算是一个衍生的功能。
⑹ 异常点检测方法
一、基本概念
异常对象被称作离群点。异常检测也称偏差检测和例外挖掘。
常见的异常成因:数据来源于不同的类(异常对象来自于一个与大多数数据对象源(类)不同的源(类)的思想),自然变异,以及数据测量或收集误差。
异常检测的方法:
(1)基于模型的技术:首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显着属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象。
(2)基于邻近度的技术:通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象。
(3)基于密度的技术:仅当一个点的局部密度显着低于它的大部分近邻时才将其分类为离群点。
二、异常点检测的方法
1、统计方法检测离群点
统计学方法是基于模型的方法,即为数据创建一个模型,并且根据对象拟合模型的情况来评估它们。大部分用于离群点检测的统计学方法都是构建一个概率分布模型,并考虑对象有多大可能符合该模型。离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。异常检测的混合模型方法:对于异常检测,数据用两个分布的混合模型建模,一个分布为普通数据,而另一个为离群点。
聚类和异常检测目标都是估计分布的参数,以最大化数据的总似然(概率)。聚类时,使用EM算法估计每个概率分布的参数。然而,这里提供的异常检测技术使用一种更简单的方法。初始时将所有对象放入普通对象集,而异常对象集为空。然后,用一个迭代过程将对象从普通集转移到异常集,只要该转移能提高数据的总似然(其实等价于把在正常对象的分布下具有低概率的对象分类为离群点)。(假设异常对象属于均匀分布)。异常对象由这样一些对象组成,这些对象在均匀分布下比在正常分布下具有显着较高的概率。
优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
2、基于邻近度的离群点检测。
一个对象是异常的,如果它远离大部分点。这种方法比统计学方法更一般、更容易使用,因为确定数据集的有意义的邻近性度量比确定它的统计分布更容易。一个对象的离群点得分由到它的k-最近邻的距离给定。离群点得分对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m^2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
3、基于密度的离群点检测。
从基于密度的观点来说,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。需要小心的选择d,如果d太小,则许多正常点可能具有低密度,从而具有高离群点得分。如果d太大,则许多离群点可能具有与正常点类似的密度(和离群点得分)。使用任何密度定义检测离群点具有与基于邻近度的离群点方案类似的特点和局限性。特殊地,当数据包含不同密度的区域时,它们不能正确的识别离群点。
为了正确的识别这种数据集中的离群点,我们需要与对象邻域相关的密度概念,也就是定义相对密度。常见的有两种方法:(1)使用基于SNN密度的聚类算法使用的方法;(2)用点x的密度与它的最近邻y的平均密度之比作为相对密度。
使用相对密度的离群点检测(局部离群点要素LOF技术):首先,对于指定的近邻个数(k),基于对象的最近邻计算对象的密度density(x,k) ,由此计算每个对象的离群点得分;然后,计算点的邻近平均密度,并使用它们计算点的平均相对密度。这个量指示x是否在比它的近邻更稠密或更稀疏的邻域内,并取作x的离群点得分(这个是建立在上面的离群点得分基础上的)。
优缺点:
(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;
(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);
(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
4、基于聚类的技术
一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇。这个方法可以和其他任何聚类技术一起使用,但是需要最小簇大小和小簇与其他簇之间距离的阈值。这种方案对簇个数的选择高度敏感。使用这个方案很难将离群点得分附加到对象上。一种更系统的方法,首先聚类所有对象,然后评估对象属于簇的程度(离群点得分)(基于原型的聚类可用离中心点的距离来评估,对具有目标函数的聚类技术该得分反映删除对象后目标函数的改进(这个可能是计算密集的))。基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。还有一种更复杂的方法:取一组不能很好的拟合任何簇的特殊对象,这组对象代表潜在的离群点。随着聚类过程的进展,簇在变化。不再强属于任何簇的对象被添加到潜在的离群点集合;而当前在该集合中的对象被测试,如果它现在强属于一个簇,就可以将它从潜在的离群点集合中移除。聚类过程结束时还留在该集合中的点被分类为离群点(这种方法也不能保证产生最优解,甚至不比前面的简单算法好,在使用相对距离计算离群点得分时,这个问题特别严重)。
对象是否被认为是离群点可能依赖于簇的个数(如k很大时的噪声簇)。该问题也没有简单的答案。一种策略是对于不同的簇个数重复该分析。另一种方法是找出大量小簇,其想法是(1)较小的簇倾向于更加凝聚,(2)如果存在大量小簇时一个对象是离群点,则它多半是一个真正的离群点。不利的一面是一组离群点可能形成小簇而逃避检测。
优缺点:
(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;
(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;
(3) 产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;
(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
新颖性和离群值检测
离群值检测:训练数据包含离群值,即与其他观测值相距甚远的观测值。离群检测估计器会尝试拟合训练数据最集中的区域,忽略异常观察。
新颖性检测:训练数据不受异常值的污染,有兴趣检测新观察值是否是异常值。该情况下离群值也称为新颖性。
离群值检测和新颖性检测均用于异常检测,离群值检测称为无监督异常检测,新颖性检测称为半监督异常检测。离群值检测的情况下,离群值/异常不能形成密集的群集,可假设离群值/异常位于低密度区域;新颖性检测的情况下,只要新颖性/异常位于训练数据的低密度区域,就可以形成密集的簇。
通过对玩具数据集进行异常检测比较异常检测算法
数据集中包含一种或两种模式(高密度区域),以说明算法处理多模式数据的能力。
对于每个数据集,将生成15%的样本作为随机均匀噪声。该比例是OneClassSVM的nu参数和其他异常值检测算法的污染参数提供的值。离群值之间的决策边界以黑色显示,但是LOF除外,因为当采用LOF用于离群值检测时,没有适用于新数据的预测方法。
OneClassSVM对异常值敏感,对异常值检测执行的不好。当训练集不受异常值污染时,此估计器最适合新颖性检测。即不适用在高维中进行离群值检测或者不对基础数据的分布进行任何假设,OneClassSVM在这些情况下可能会根据其超参数给出有用的结果。
covariance EllipticEnvelope(协方差椭圆密度)假定数据是高斯分布并学习一个椭圆。在数据不是单峰时,会退化。此估计器对异常值具有鲁棒性。
IsolationFrorest和LocalOutlierFactor针对多模式数据集效果显着。LOF针对第三种数据集,明显优于其它三种估计器,该数据集中两种模式的密度不同。LOF的局部方面,即它仅将一个样本的异常评分与其邻居评分作比较,从何体现了该方法的优势。
针对最后一个均匀分布在超立方体中的数据集,很难说一个样本比另一个样本异常得多。除了OneClassSVM有些过拟合外,所有估计器都针对该情况提出不错的解决方案。针对这种情况,应该仔细观察样本的异常分数,性能好的估算器应该为所有样本分配相似的分数。
使用局部离群因子(LOF)进行离群值检测
LOF算法是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差。其中密度远低于其邻居的样本为异常值。
LOF算法的优势在于同时考虑了数据集的局部和全局属性:即使在异常样本具有不同底层密度的数据集中,仍能保持良好性能。问题不在于样本有多孤立,而在于样本相对于周围邻域有多孤立。
通常考虑的邻居数量(1)大于群集必须包含的最小样本数量,以便其他样本可以是相对于该群集的局部离散值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。
具有局部异常值的新颖性检验
LOF是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差,密度远低于其邻居的样本为异常值。LOF用于新颖性检验时,切勿在训练集上使用预测、决定函数、实例得分,会导致结果错误。只能对新的看不见的数据(不在训练集中)使用这些方法。
通常考虑邻居数量(1)大于群集必须包含的最小样本数,以便其他样本可以是相对于该群集的局部离群值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。
隔离林
在高维数据集中执行异常检测的一种有效方法是使用随机森林,分离的观察通过随机选择一个函数,随机选择所选择的特征的最大值和最小值之间的分割值。递归分区可用树结构表示,隔离样本所需的拆分数量等于从根节点到终止结点的路径长度。随机树的森林中的平均路径长度是对正态性和决策函数的度量。随机分区产生的异常路径明显较短,因此如果随机树森林为特定样本生成的较短路径,则该树代表的值很可能是异常的。
OneClassSVM
无监督的离群值检测,支持高维分布,基于libsvm
不假定数据分布的任何参数形式,可以更好的对数据的复杂形状进行建模,能够捕获真实的数据结构,难点在于调整核函数宽度参数,以便在数据散布矩阵的形状和数据过度拟合的风险间取得折中。
协方差椭圆密度
用于检测高斯分布数据集中的异常值的对象
经验协方差估计(作为非稳健估计)受到观测值异质结构的高度影响;鲁棒协方差估计能够集中于数据分布的主要模式,但是它坚持假设数据是高斯分布,产生了对数据结构的某些估计,在一定程度上是准确的。
HBOS单维效果极佳,但是标准差方法的mask 掩码效应严重。例如 数据通常在100以内,但是有两个异常点,500,1000000。这个算法就不能检出500这个异常点。
对比而言,孤立森林理论上更适合大数据的异常检测,且无掩码效应。孤立森林确定异常时训练只用样本数据。每颗树样本数量默认只有256个,默认只用100颗树。所以理论上25600个样本就能确定海量数据中的异常点了。
Sklearn的 isolation forest 例子默认是读入全量数据再采样。如果配上warm up 选项就能分批放入采样。
异常检测的深度学习研究综述
⑺ 入侵检测系统异常检测方法有什么
入侵检测技术基础 1. IDS(入侵检测系统)存在与发展的必然性 (1)网络安全本身的复杂性,被动式的防御方式显得力不从心。(2)有关供触垛吠艹杜讹森番缉防火墙:网络边界的设备;自身可以被攻破;对某些攻击保护很弱;并非所有威胁均来自防火墙外部。(3)入侵很容易:入侵教程随处可见;各种工具唾手可得 2. 入侵检测(Intrusion Detection) ●定义:通过从计算机网络或计算机系统中的若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和遭到袭击的迹象的一种安全技术。入侵检测的分类(1)按照分析方法/检测原理分类 ●异常检测(Anomaly Detection):基于统计分析原理。首先总结正常操作应该具有的特征(用户轮廓),试图用定量的方式加以描述,当用户活动与正常行为有重大偏离时即被认为是入侵。前提:入侵是异常活动的子集。指标:漏报率低,误报率高。用户轮廓(Profile):通常定义为各种行为参数及其阀值的集合,用于描述正常行为范围。特点:异常检测系统的效率取决于用户轮廓的完备性和监控的频率;不需要对每种入侵行为进行定义,因此能有效检测未知的入侵;系统能针对用户行为的改变进行自我调整和优化,但随着检测模型的逐步精确,异常检测会消耗更多的系统资源 ●误用检测(Misuse Detection):基于模式匹配原理。收集非正常操作的行为特征,建立相关的特征库,当监测的用户或系统行为与库中的记录相匹配时,系统就认为这种行为是入侵。前提:所有的入侵行为都有可被检测到的特征。指标:误报低、漏报高。攻击特征库:当监测的用户或系统行为与库中的记录相匹配时,系统就认为这种行为是入侵。特点:采用模式匹配,误用模式能明显降低误报率,但漏报率随之增加。攻击特征的细微变化,会使得误用检测无能为力。
⑻ 异常检测方法 二
离群点是一个数据对象,它显着不同于其他数据对象,好像它是被不同的机制产生的一样。有时也称非离群点为“正常数据”,离群点为“异常数据”。
离群点不同于噪声数据。噪声是被观测变量的随机误差或方差。一般而言,噪声在数据分析(包括离群点分析)中不是令人感兴趣的。如在信用卡欺诈检测,顾客的购买行为可以用一个随机变量建模。一位顾客可能会产生某些看上去像“随机误差”或“方差”的噪声交易,如买一份较丰盛的午餐,或比通常多要了一杯咖啡。这种交易不应该视为离群点,否则信用卡公司将因验证太多的交易而付出沉重代价。因此,与许多其他数据分析和数据挖掘任务一样,应该在离群点检测前就删除噪声。
离群点检测是有趣的,因为怀疑产生它们的机制不同于产生其他数据的机制。因此,在离群点检测时,重要的是搞清楚为什么检测到的离群点被某种其他机制产生。通常,在其余数据上做各种假设,并且证明检测到的离群点显着违反了这些假设。
离群点可以分成三类:全局离群点、情境(或条件)离群点和集体离群点。
在给定的数据集中,一个数据对象是全局离群点,如果它显着的偏离数据集中的其他对象。全局离群点是最简单的一类离群点,大部分的离群点检测方法都旨在找出全局离群点。
在给定的数据集中,一个数据对象是情境离群点,如果关于对象的特定情境,它显着的偏离其他对象。情境离群点又称为条件离群点,因为它们条件的依赖于选定的情境。一般地,在情境离群点检测中,所考虑数据对象的属性划分成两组:
情境属性 :数据对象的情境属性定义对象的情境。一般为静态属性变量,如信用卡欺诈检测中,不同年龄、不同地区的人消费情况是不同的,先按照静态属性将人群大致分类,再检测每一类的离群点,会得到更好的结果。
行为属性 :定义对象的特征,并用来评估对象关于它所处的情境是否为离群点。在上述例子中,行为属性可以是消费金额,消费频率等
情境离群点分析为用户提供了灵活性,因为用户可以在不同情境下考察离群点,这在许多应用中都是非常期望的。
给定一个数据集,数据对象的一个子集形成集体离群点,如果这些对象作为整体显着的偏离整个数据集。如一家供应链公司,每天处理数以千计的订单和出货。如果一个订单的出货延误,则可能不是离群点,因为统计表明延误时常发生。然而,如果有一天有100个订单延误,则必须注意。这100个订单整体来看,形成一个离群点,尽管如果单个考虑,它们每个或许都不是离群点。你可能需要更详细地整个考察这些订单,搞清楚出货问题。
与全局和情境离群点检测不同,在集体离群点检测中,不仅必须考虑个体对象的行为,而且还要考虑对象组群的行为。因此,为了检测集体离群点,需要关于对象之间联系的背景知识,如对象之间的距离或相似性测量方法。
离群点检测的统计学方法对数据的正常性做假定。假定数据集中的正常对象由一个随机过程(生成模型)产生。因此,正常对象出现在该随机模型的高概率区域中,而低概率区域中的对象是离群点。
离群点检测的统计学方法的一般思想是:学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把它们作为离群点。有许多不同方法来学习生成模型,一般而言,根据如何指定和如何学习模型,离群点检测的统计学方法可以划分成两个主要类型: 参数方法和非参数方法。
参数方法: 假定正常的数据对象被一个以为参数的参数分布产生。该参数分布的概率密度函数给出对象被该分布产生的概率。该值越小,越可能是离群点。
非参数方法: 并不假定先验统计模型,而是试图从输入数据确定模型。非参数方法的例子包括直方图和核密度估计。
假定数据集由一个正态分布产生,然后,可以由输入数据学习正态分布的参数,并把低概率的点识别为离群点。
在正态分布的假定下,区域包含99.7%的数据,包含95.4%的数据,包含68.3%的数据。视具体情况而定,将其区域外的数据视为离群点。
这种直截了当的统计学离群点检测方法也可以用于可视化。例如盒图方法使用五数概况绘制一元输入数据:最小的非离群点值(Min)、第一个四分位数(Q1)、中位数(Q2)、第三个四分位数(Q3)和最大的非离群点值(Max)。
四分位数极差(IQR)定义为Q3-Q1。比Q1小1.5倍的IQR或者比Q3大1.5倍的IQR的任何对象都视为离群点,因为Q1-1.5 IQR和Q3+1.5 IQR之间的区域包含了99.3%的对象。
(1)使用马哈拉诺比斯距离检测多元离群点。
对于一个多元数据集,设为均值向量。对于数据集中的对象,从到的马哈拉诺比斯(Mahalanobis)距离为其中S是协方差矩阵。是一元数据,可以对它进行离群点检测。如果被确定为离群点,则也被视为离群点。
(2)使用统计量的多元离群点检测。
在正态分布的假设下,统计量可以用来捕获多元离群点。对于对象,统计量是
其中,是在第维上的值,是所有对象在第维上的均值,而是维度。如果对象的统计量很大,则该对象是离群点。
(3)使用混合参数分布
在许多情况下,数据是由正态分布产生的假定很有效。然而,当实际数据很复杂时,这种假定过于简单。在这种情况下,假定数据是被混合参数分布产生的。
混合参数分布中用期望最大化(EM)算法来估计参数。具体情况比较复杂,可以参考韩家炜的《数据挖掘:概念与技术》一书。
在离群点检测的非参数方法中,“正常数据”的模型从输入数据学习,而不是假定一个先验。通常,非参数方法对数据做较少假定,因而在更多情况下都可以使用。
使用直方图检测离群点
包括如下两步:
步骤1: 构造直方图。尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。如指定直方图的类型(等宽或等深的)和其他参数(如直方图中的箱数或每个箱的大小)。与参数方法不同,这些参数并不指定数据分布的类型(如高斯分布)。
步骤2: 检测离群点。为了确定一个对象是否是离群点,可以对照直方图检验它。在最简单的方法中,如果该对象落入直方图的一个箱中,则该对象被看做是正常的,否则被认为是离群点。
对于更复杂的方法,可以使用直方图赋予每个对象一个离群点得分。一般可以令对象的离群点得分为该对象落入的箱的容积的倒数。得分越高,表明是离群点的概率越大。
使用直方图作为离群点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。一方面,如箱尺寸太小,则由很多正常对象都会落入空的或稀疏箱,因而被误识别为离群点。这将导致很高的假正例率或低精度。相反,如果箱尺寸太大,则离群点对象可能渗入某些频繁的箱中,这将导致很高的假负例率或召回率。为了解决这些问题,使用核密度估计来估计数据的概率密度分布。具体参考韩家炜的《数据挖掘:概念与技术》。
给定特征空间中的对象集,可以使用距离度量来量化对象间的相似性。基于邻近性的方法假定:离群点对象与它最近邻的邻近性显着偏离数据集中其他对象与它们近邻之间的邻近性。
有两种类型的基于邻近性的离群点检测方法:基于距离的和基于密度的方法。基于距离的离群点检测方法考虑对象给定半径的邻域。一个对象被认为是离群点,如果它的邻域内没有足够多的其他点。基于密度的离群点检测方法考察对象和它近邻的密度。这里,一个对象被识别为离群点,如果它的密度相对于它的近邻低得多。
对于待分析的数据对象集D,用户可以指定一个距离阈值r来定义对象的合理邻域。对于每个对象o,可以考察o的r-邻域中的其他对象的个数。如果D中大多数对象都远离o,即都不在o的r-邻域中,则o可以被视为一个离群点。
令是距离阈值,是分数阈值。对象是一个离群点,如果
其中是距离度量。
如何计算-离群点?一是嵌套循环方法,时间复杂度为。当数据集很大时,该方法的开销很大。为了改进性能,可以用基于网格的方法来实现。具体见韩家炜《数据挖掘》一书。
基于距离的离群点检测从全局考虑数据集。由于以下两个原因,这种离群点被看成“全局离群点”:
l 例如,一个-离群点至少远离(用参数r定量)数据集中的对象。换言之,这种离群点远离数据的大多数。
l 为了检测基于距离的离群点,需要两个距离参数,它们用于每个离群点对象。
现实世界的许多数据集都呈现更复杂的结构,那里对象可能关于其局部邻域,而不是关于整个数据分布而被视为离群点。如下图,基于距离的离群点检测方法不能捕获像o1和o2这样的局部离群点。
那么,如何确切地定义如图所示的局部离群点?这里关键的思想是,需要把对象周围的密度与对象邻域周围的密度进行比较。基于密度的离群点检测方法的基本假定是:非离群点对象周围的密度与其邻域周围的密度类似,而离群点对象周围的密度显着不同于其邻域周围的密度。
基于聚类的方法通过考察对象与簇之间的关系检测离群点。直观地,离群点是一个对象,它属于小的偏远簇,或不属于任何簇。
这导致三种基于聚类的离群点检测的一般方法。考虑一个对象。
l 该对象属于某个簇吗?如果不,则它被识别为离群点。
l 该对象与最近的簇之间的距离很远吗?如果是,则它是离群点。
l 该对象是小簇或稀疏簇的一部分吗?如果是,则该簇中的所有对象都是离群点。
下面对每一种方法考察一个例子。
例1 把离群点检测为不属于任何簇的对象。如图1所示,使用基于密度的聚类方法,如DBSCAN,注意到黑色点都属于簇,白色点a不属于任何簇,因而被认为是离群点。
图1 对象a是离群点,因为 它不属于任何簇
图2 离群点(a,b,c)都(关于簇中心)远离距它们最近的簇
例2 使用到最近簇的距离的基于聚类的离群点检测。如图2所示,使用k-均值聚类方法,可以把图2中的数据点划分成3个簇,如图中不同符号所示,每个簇中心用“+”标记。对于每个对象o,都可以根据该对象与最近簇中心的距离,赋予该对象一个离群点得分。假设到o的最近中心为c,则o与c之间的距离为dist(o,c),c与指派到c的对象之间的平均距离为L,比率度量与平均值的差异程度。在图2中,点a,b和c都相对远离它们的对应中心,因而被怀疑是离群点。
例3 检测小簇中的离群点
迄今为止我们看到的每种方法都只检测个体离群点,因为它们一次把一个对象与数据集中的簇进行比较。然而,在大型数据中,一些离群点可能是类似的,并且形成一个小簇。例如,在入侵检测中,使用相同手段攻击系统的黑客可能形成一个簇。迄今为止所讨论的方法可能被这种离群点所欺骗。
为了解决这一问题,第三种基于聚类的离群点检测方法识别小簇或稀疏簇,并宣告这些簇中的对象也是离群点。这种方法的一个例子是FindCBLOF算法,其方法如下。
(1) 找出数据集中的簇,并把它们按大小降序排列。该算法假定大部分数据点都不是离群点,它使用一个参数来区别大簇和小簇。任何至少包含数据集中百分之(如,=90%)数据点的簇都被视为大簇,而其余的簇被看成小簇。
(2) 对于每个数据点赋予基于簇的局部离群点因子(CBLOF),对于属于大簇的点,它的CBLOF是簇的大小和该点与簇的相似性的乘积。对于属于小簇的点,它的CBLOF用小簇的大小和该点与最近的大簇的相似性的乘积计算。
CBLOF用统计学方法定义点和簇之间的相似性,代表点属于簇的概率。该值越大,点与簇越相似。CBLOF值可以检测远离任何簇的离群点。
基于聚类的离群点检测方法具有如下优点。首先,它们可以检测离群点,而不要求数据是有标号的,即它们以无监督方式检测。它们对许多类型的数据都有效。簇可以看成是数据的概括,一旦得到簇,基于聚类的方法只需要把对象与簇进行比较,以确定该对象是否是离群点,这一过程通常很快,因为与对象总数相比,簇的个数通常很小。
基于聚类的方法的缺点是:它的有效性高度依赖于所使用的聚类方法。这些方法对于离群点检测而言可能不是最优的。对于大型数据集,聚类方法通常开销很大,这可能成为一个瓶颈。
如果训练数据具有类标号,则离群点检测可以看做分类问题。基于分类的离群点检测方法的一般思想是,训练一个可以区分“正常”数据和离群点的分类模型。
基于分类的离群点检测方法通常使用一类模型(单分类模型SVDD),即构造一个仅描述正常类的分类器,不属于正常类的任何样本都被视为离群点。
基于分类的方法和基于聚类的方法可以联合使用,以半监督的方式检测离群点。
例通过半监督学习检测离群点
如上图所示,其中对象被标记为“正常”或“离群点”,或者没有标号。使用基于聚类的方法,发现一个大簇C和一个小簇C1。因为C中的某些对象携带了标号“正常”,因此可以把该簇的所有对象(包括没有标号的对象)都看做正常对象。在离群点检测中,使用这个簇的一类模型来识别离群点。类似的,因为簇C1中的某些对象携带标号“离群点”,因此宣布C1中的所有对象都是离群点。未落入C模型中的任何对象(如a)也被视为离群点。
与一般的离群点检测相比,识别情境离群点需要分析对应的情境信息。情境离群点检测方法可以根据情境是否可以清楚地识别而分成两类。
这类方法适用于情境可以被清楚识别的情况,其基本思想是把情境离群点检测问题转换成典型的离群点检测问题。具体地说,对于给定的数据对象,用两步来评估该对象是否是离群点。第一步,使用对象的情境属性识别对象的情境。第二步,使用一种传统的离群点检测方法,估计该对象的离群点得分。
在某些应用中,清楚地把数据划分成情境是不方便的或不可行的。这时,可以关于情境对正常行为建模。使用一个训练数据集,这种方法训练一个模型,关于情境属性的值,预测期望的行为属性值。然后,为了确定一个数据对象是否是情境离群点,可以在该对象的情境属性上使用该模型。如果该对象的行为属性值显着地偏离该模型的预测值,则该对象被宣布为情境离群点。
通过使用连接情境和行为的预测模型,这些方法避免直接识别具体情境。许多分类和预测技术都可以用来构建这种模型,如回归、马尔科夫模型和有穷状态自动机等等。
与情境离群点检测一样,集体离群点检测方法也可以划分为两类。第一类方法把问题归结为传统的离群点检测。其策略是识别结构单元,把每个结构单元(例如,子序列、时间序列片段、局部区域或子图)看做是一个数据对象,并提取特征。这样,集体离群点检测问题就转换成在使用提取的特征构造的“结构化对象”集上的离群点检测。一个结构单元代表原数据集中的一组对象,如果该结构单元显着地偏离提取的特征空间中的期望趋势,则它是一个集体离群点。
为集体离群点检测预先定义结构单元可能是困难的,或者是不可能的。因此,第二类方法直接对结构单元的期望行为建模。例如,为了在时间序列中检测离群点,一种方法是从序列中学习马尔科夫模型。因此,一个子序列被宣布为集体离群点,如果它显着地偏离该模型。
一般地,高维数据的离群点检测方法应该应对以下挑战:
l 离群点的解释:不仅应该能够识别检测离群点,而且能够提供离群点的解释。离群点的解释可能是,例如,揭示离群点的特定子空间,或者关于对象的“离群点性”的评估。这种解释可以帮助用户理解离群点的含义和意义。
l 数据的稀疏性:这些方法应该能处理高维空间的稀疏性。随着维度的增加,对象之间的距离严重地被噪声所左右。因此,高维空间中的数据通常是稀疏的。
l 数据子空间:它们应该以合适的方式对离群点建模,例如,自适应现实离群点的子空间和捕获数据的局部变化。在所有的子空间上使用固定的距离阈值来检测离群点捕食一种好想法,因为两个对象之间的距离随着维度增加而单调增加。
l 关于维度的可伸缩性:随着维度的增加,子空间的数量指数增加。包含所有可能的子空间的穷举组合探索不是可伸缩的选择。
高维数据的离群点检测方法可以划分成三种主要方法,包括扩充的传统离群点检测、发现子空间中的离群点和对高维离群点建模。
一种高维数据离群点检测方法是扩充的传统离群点检测方法。它使用传统的基于邻近性的离群点模型。然而,为了克服高维空间中邻近性度量恶化问题,它使用其他度量,或构造子空间并在其中检测离群点。
HilOut算法就是这种方法的一个例子。HitOut找出基于距离的离群点,但在离群点检测中使用距离的秩,而不是绝对距离。具体地说,对于每个对象o,HitOut找出o的k个最近邻,记作nn1(o),nn2(o)……nnk(o),其中k是一个依赖于应用的参数。参数o的权重定义为
所有对象按权重递减序定秩。权重最高的top-p个对象作为离群点输出,其中p是另一个用户指定的参数。
HilOut算法计算每个对象的k-最近邻开销很大,当维度很高并且数据很大时不能伸缩。
另一种方法则是通过维归约,把高维离群点检测问题归结为较低维上的离群点检测。其基本思想是,把高维空间归约到低维空间,那里标准的距离度量仍然能够区分离群点。如果能够找到这样的较低维空间,则可以用传统的离群点检测方法。
为了降低维度,可以对离群点检测使用或扩充一般的特征特征选择和提取方法。例如,可以用主成分分析(PCA)来提取一个低维空间。
高维数据中离群点检测的另一种方法是搜索各种子空间中的离群点。其唯一的优点是,如果发现一个对象是很低维度的子空间的离群点,则该子空间提供了重要信息,解释该对象为什么和在何种程度上是离群点。
如何检测子空间中的离群点,一种方法是基于网格的子空间离群点检测。具体做法见韩家炜《数据挖掘》。
另一种方法是试图直接为高维离群点建立一个新模型。这种方法通常避免邻近性度量,而是采用新的启发式方法来检测离群点。具体做法见韩家炜《数据挖掘》。
⑼ 异常检测(二)——传统统计学方法
统计学方法有效性高度依赖于给定数据所做的统计的模型假设是否成立。
异常检测的统计学方法的一般思想是:学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把他们作为异常点
例如:正态分布的3个 之外的点为异常点,箱线图中超过2个Q的点为异常点
根据如何指定和学习模型,异常检测的统计学方法可以划分为两个主要的类型:参数方法和非参数方法
参数方法 假定正常的数据对象被一个以 为参数的参数分布产生。该参数分布的概率密度函数 给出对象 被该分布产生的概率。该值越小, 越可能成为异常点。
非参数方法 并不假定先验统计模型,而是试图从输入数据确定模型。非参数方法通常假定参数的个数和性质都是灵活的,不预先确定(所以非参数方法并不是说模型是完全无参的,完全无参的情况下从数据学习模型是不可能的)。
仅涉及一个属性或变量的数据称为一元数据。我们假定数据由正态分布产生,然后可以由输入数据学习正态分布的参数,并把低概率的点识别为异常点。
假定输入数据集为 ,数据集中的样本服从正态分布,即 ,我们可以根据样本求出参数 和 。
求出参数之后,我们就可以根据概率密度函数计算数据点服从该分布的概率。正态分布的概率密度函数为
如果计算出来的概率低于阈值,就可以认为该数据点为异常点。
阈值是个经验值,可以选择在验证集上使得评估指标值最大(也就是效果最好)的阈值取值作为最终阈值。
例如常用的3sigma原则中,如果数据点超过范围 ,那么这些点很有可能是异常点。
这个方法还可以用于可视化。箱线图对数据分布做了一个简单的统计可视化,利用数据集的上下四分位数(Q1和Q3)、中点等形成。异常点常被定义为小于Q1-1.5IQR或大于Q3+1.5IQR的那些数据。
用Python画一个简单的箱线图:
涉及两个或多个属性或变量的数据称为多元数据。许多一元异常点检测方法都可以扩充,用来处理多元数据。其核心思想是把多元异常点检测任务转换成一元异常点检测问题。例如基于正态分布的一元异常点检测扩充到多元情形时,可以求出每一维度的均值和标准差。对于第 维:
计算概率时的概率密度函数为
这是在各个维度的特征之间相互独立的情况下。如果特征之间有相关性,就要用到多元高斯分布了。
在许多情况下假定数据是由正态分布产生的。当实际数据很复杂时,这种假定过于简单,可以假定数据是被混合参数分布产生的。
在异常检测的非参数方法中,“正常数据”的模型从输入数据学习,而不是假定一个先验。通常,非参数方法对数据做较少假定,因而在更多情况下都可以使用。
例子:使用直方图检测异常点。
直方图是一种频繁使用的非参数统计模型,可以用来检测异常点。该过程包括如下两步:
步骤1:构造直方图。使用输入数据(训练数据)构造一个直方图。该直方图可以是一元的,或者多元的(如果输入数据是多维的)。
尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。例如,用户必须指定直方图的类型(等宽的或等深的)和其他参数(直方图中的箱数或每个箱的大小等)。与参数方法不同,这些参数并不指定数据分布的类型。
步骤2:检测异常点。为了确定一个对象是否是异常点,可以对照直方图检查它。在最简单的方法中,如果该对象落入直方图的一个箱中,则该对象被看作正常的,否则被认为是异常点。
对于更复杂的方法,可以使用直方图赋予每个对象一个异常点得分。例如令对象的异常点得分为该对象落入的箱的容积的倒数。
使用直方图作为异常点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。一方面,如果箱尺寸太小,则许多正常对象都会落入空的或稀疏的箱中,因而被误识别为异常点。另一方面,如果箱尺寸太大,则异常点对象可能渗入某些频繁的箱中,因而“假扮”成正常的。
BOS全名为:Histogram-based Outlier Score。它是一种单变量方法的组合,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好。其基本假设是数据集的每个维度相互独立。然后对每个维度进行区间(bin)划分,区间的密度越高,异常评分越低。
HBOS算法流程:
1.为每个数据维度做出数据直方图。对分类数据统计每个值的频数并计算相对频率。对数值数据根据分布的不同采用以下两种方法:
静态宽度直方图:标准的直方图构建方法,在值范围内使用k个等宽箱。样本落入每个桶的频率(相对数量)作为密度(箱子高度)的估计。时间复杂度:
2.动态宽度直方图:首先对所有值进行排序,然后固定数量的 个连续值装进一个箱里,其 中N是总实例数,k是箱个数;直方图中的箱面积表示实例数。因为箱的宽度是由箱中第一个值和最后一个值决定的,所有箱的面积都一样,因此每一个箱的高度都是可计算的。这意味着跨度大的箱的高度低,即密度小,只有一种情况例外,超过k个数相等,此时允许在同一个箱里超过 值。
时间复杂度:
2.对每个维度都计算了一个独立的直方图,其中每个箱子的高度表示密度的估计。然后为了使得最大高度为1(确保了每个特征与异常值得分的权重相等),对直方图进行归一化处理。最后,每一个实例的HBOS值由以下公式计算:
推导过程:
假设样本p第 i 个特征的概率密度为 ,则p的概率密度可以计算为: 两边取对数: 概率密度越大,异常评分越小,为了方便评分,两边乘以“-1”: 最后可得:
1.异常检测的统计学方法由数据学习模型,以区别正常的数据对象和异常点。使用统计学方法的一个优点是,异常检测可以是统计上无可非议的。当然,仅当对数据所做的统计假定满足实际约束时才为真。
2.HBOS在全局异常检测问题上表现良好,但不能检测局部异常值。但是HBOS比标准算法快得多,尤其是在大数据集上。