数据挖掘笔记(7)-离群点检测

离群点检测是为了发现数据集中与其它大部分数据显著不同的数据点,建模的的时候通常将离群点视为噪声丢弃。离群点虽然会影响建模的准确率,但是在特定的应用中,离群点蕴含着更大的研究价值,比如从银行卡刷卡记录数据的离群点分析某用户是否存在异常刷卡行为,再比如运动员上场比赛前的体能特征数据中离群点分析该运动员是否嗑药了。下面来介绍几种常用的离群点检测方法:

一、基于统计模型的离群点检测
通过估计概率分布的参数来建立一个概率分布模型,如果数据点不能很好的拟合该模型,那就意味着它可能不服从该概率分布,那它就可能是一个离群点。
(1)一元正太分布中的离群点检测
正太分布是统计学最常用的分布之一,对于很多的数据集的某些属性都可以假定它服从正太分布,建立正太分布模型来检查离群点。
正太分布的概率密度如下:
在这里插入图片描述
其中总体均值μ和总体标准差σ属于未知参数,可以通过样本信息(给定的数据集)来估计,样本均值X拔是总体均值μ的无偏估计,修正样本方差是总计方差的无偏估计。
得到估计参数μ^ 和 σ^后我们就得到了正太概率分布模型,可以接着利用标准化X=(X-μ)/σ将正太概率分布模型变为标准正太分布模型。
对于N(0,1)分布来说,数据点出现在尾部的概率很小,通常来讲数据点出现在正负3倍的标准差之外的区域的概率很小,仅有0.0027,所以说可以将离均值超过3倍标准差的值视为离群点。

(2)混合模型的离群点检测
混合模型:
混合模型是一种特殊的统计模型,它包含多个概率分布,每一个分布对应一个簇(数据集中的一部分数据),而每个分布的参数就是对该簇的相关描述。通常混合模型的概率分布统一取正太分布,但是每个分布的参数不同。
混合模型的参数求解:
(一般用EM算法迭代来求参数集合A,这里讲一点点原理)
假定混合模型中有K个概率分布,每个概率分布的权重用Wj (1<= j <=K)表示且所有权重之和等于1,每个概率分布的参数用αj 表示,A={α1,α2,…,αk}是所有参数的集合,现有m个样本用χ={x1,x2,…,xm}表示,接下来用极大似然法求模型参数。

① 在所以参数已知的情况下(赋初值),任一样本 x 来自第 j 个分布的概率为p(x ; αj),则可得任一样本 x 来自该混合模型的概率为:
在这里插入图片描述
② 计算样本集χ={x1,x2,…,xm}中的样本都是来自该混合模型的概率:
在这里插入图片描述
③ 将过程②中的概率进行转化,便于求对数似然。样本集χ={x1,x2,…,xm}中的样本都是来自该混合模型等价于将样本集分成k个子集,每个子集对应一个概率分布,用Mj (1<= j <=K)表示这k个子集,PMj(x)表示第 j 个子集对应的概率分布,所以化简②式的概率公式如下:
在这里插入图片描述
④ 求对数似然函数
似然函数如下:
在这里插入图片描述
对数似然为:
在这里插入图片描述
⑤ 使得④式中的对数似然取最大值对应的参数集合A就是该混合模型的最佳参数。

用于离群点检测的混合模型:
用于离群点检测的混合模型认为数据集χ={x1,x2,…,xm}可以分为两个部分,一个是M(x)代表大多数正常数据的分布,另一个是N(x)代表离群点数据的分布,M通常由数据集信息估计得到,N通常取均匀分布。所以用于离群点检测的混合模型可取如下结构:
在这里插入图片描述
用于离群点检测混合模型的参数求解(最大化似然函数):
在这里插入图片描述
在这里插入图片描述
求出最佳参数集合A之后就得到了较优的混合模型,对数据集中的数据点进行测试,那些拟合效果不是很好的数据点可能是离群点。

(3)基于统计模型的离群点检测的优缺点
在数据集庞大并且数据分布已知的情况采用基于统计模型的离群点检测会非常有效而且可靠。但是对于数据分布未知或者多维的数据集来说,用该方法来检验离群点可能达不到理想的效果。

二、基于邻近度的离群点检测
(1)思想
基于邻近度的离群点检测的思想非常简单,一般来讲离群点肯定远离大部分正常的数据,通过计算每个数据点的k-最近邻距离来度量该数据点是否远离大部分的数据点,并且用每个数据点的k-最近邻距离作为该数据点的离群点得分,距离越大,离群点得分越大,所以离群点的最大值是距离函数的能取到的最大值,离群点的最小值则为0。算出每个数据点的k-最近邻距离之后,通过给定的距离阈值就可以筛选出离群点。
数据点的k-最近邻距离指的是该数据点与第k个离它最近的数据点的距离,距离的计算一般采用欧氏距离。
(2)基于邻近度的离群点检测的优缺点
该方法虽然理解起来简单,但是一般需要O(m 2)的时间(m为数据点个数),对于大型数据集来说代价太大。此外,该方法的距离阈值使用的是全局阈值,对于具有不同密度区域的数据集该方法可能会找不出局部离群点
如下图:
图中C点是全局离群点,因为C点距离两个簇都远,基于邻近度的离群点检测肯定会检测出C点。而D点离一个簇很远,离另一个簇很近,所以它是局部离群点,D点的k-最近邻距离肯定小于我们给定的距离阈值,所以D点最终不会被视为离群点。
在这里插入图片描述
三、基于密度的离群点检测
(1)思想
基于密度的离群点检测认为离群点一般都来自低密度区域,计算每个数据点周围的密度,通过给定密度的阈值检测离群点。
(2)计算每个数据点周围的密度
①基于邻近度的密度
该方法定义每个数据点周围的密度为它到最近的k个数据点的距离的平均数的倒数,所以距离越小,密度越高。
公式如下:
N(x,k)为距离数据点x最近的k个数据点的集合,|N(x,k)|为该集合数据元素的个数。
在这里插入图片描述
②基于计数的密度
该方法定义每个数据点周围的密度为以该数据点为圆心,d为半经的圆内包含的数据点的个数。所以d的选择显的尤为重要,如果d太小,正常点具有的密度可能很小。
③基于相对密度的密度
该方法用每个数据点的相对密度作为它周围的密度。
每个数据点的相对密度定义为该数据点密度与k个最近邻数据点的平均密度之比。
公式如下:
在这里插入图片描述
(3)基于密度的离群点检测的优缺点
与基于邻近度的离群点检测方法一样,基于密度的离群点检测方法必然都具有O(m2)的时间复杂度,对于大型数据集代价太大,并且基于邻近度的密度和基于计数的密度对于具有不同密度区域的数据里来说并不适合,基于相对密度的密度给出了数据点是离群点程度的定量度量,即使是具有不同密度区域的数据集,该密度也能达到很好度量效果。

四、基于聚类的离群点检测
聚类算法可以将内部结构相关的数据点聚集在一起形成一个簇,所以聚类当然可以找出内部结构与其它大部分数据点不相关的离群点。
(1)思想
①一种简单的方法
一种简单的基于聚类的离群点检测方法是永远丢弃远离其它簇的小簇,这时候需要确定怎样才算是‘远离’,怎样才算是‘小簇’。关于’远离’可以定义为如果一个簇与它最邻近的簇的距离超过给定的最大距离阈值,那么就认为这个簇‘远离’其它的所有簇,关于‘小簇’可以定义为如果该簇包含的数据点个数小于给定的最小簇大小阈值,那么就认为这个簇是个‘小簇’。所以如果一个簇被认为是远离其它簇的小簇,那么有理由怀疑这个‘小簇’内的数据点都是离群点。
②一种更系统的方法
一种更系统的基于聚类的离群点检测方法是先聚类所有数据点,然后评估每个数据点属于簇的程度。该方法对基于原型的聚类(比如k-means)比较适合,因为它可以通过计算数据点到它的簇中心的距离度量该数据点属于该簇的程度,也相当于是把数据点到它的簇中心的距离作为该数据点的离群点得分,距离越大,得分越高,越被认为是离群点。

(2)基于聚类的离群点检测需要处理的问题

①评估对象属于簇的程度
该问题面向基于原型的聚类,虽然它把数据点到它的簇中心的距离作为该数据点的离群点得分,但是如果数据集具有不同密度区域,使用该方法来评估效果不佳,因为小密度区域中的数据点的离群点得分肯定普遍要小。
解决办法:
要采用数据点到簇原型的相对距离来度量对象属于簇的程度,这对于具有不同密度区域的数据集同样适合。

簇质心: 簇的质心与计算距离时采用的距离函数有关。
当距离函数采用曼哈顿距离,簇的质心为簇的中位数
当距离函数采用平方欧几里德距离,簇的质心为簇的均值。
当距离函数采用余弦距离,簇的质心为簇的均值。
当距离函数采用Bregman 散度,簇的质心为簇的均值。

相对距离: 数据点到簇质心的距离与簇内所有数据点到簇质心的距离的中位数之比。

②选择簇的个数
像k-means等这类聚类算法不能自动确定簇的个数,所以用这类算法来进行离群点检测必然依赖于簇个数的选择。比如有一个包含10个数据点的小簇,数据点之间挨得很近,当指定的簇个数比较少时,这个小簇可能作为某个大簇的一部分,因为大簇相对来说密度小,数据点之间比较分散,所以这个小簇很可能被认为是离群点簇;当指定的簇个数比较多时,这个小簇就可能被认为是一个正常的簇。

解决办法:
方法一:选择不同的簇个数重复分析离群点
方法二:找出大量的小簇,因为小簇趋向于更加凝聚,如果在存在大量小簇的情况下一个数据点被认为离群点,则它多半是真的离群点。

(3)基于聚类的离群点检测的优缺点

  • 聚类算法是对含有离群点的数据集进行聚类,由于离群点对于聚类形成的簇有很大影响,所以用聚类形成的簇来分析离群点会影响离群点的质量。
  • 通过找‘小簇’的方法来找离群点带有主观色彩,最小簇大小阈值和最大距离阈值的给定决定了离群点的质量。
  • 通过衡量数据点属于该簇的程度来找离群点和基于邻近度检测离群点方法一样,具有O(m2)的时间复杂度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章