异常检测2

task2:基于统计学的异常检测

1.概念

异常检测的统计学方法有两种:
参数方法:假定数据对象由以Θ为参数的参数分布产生,该参数分布的概率密度函数f给出对象x在该分布下出现的概率,该概率值越小,说明是异常值的可能性越大。
非参数方法:不假定先验统计模型,从输入数据确定模型。非参数方法并非无参数,其通常假定参数的个数和性质都是灵活的,不预先确定。

2.参数方法

2.1基于正态分布的一元异常点检测

首先,假定数据分布符合正态分布,然后通过输入数据学习正态分布的参数,并把低概率的点作为异常点。
下面是通过输入来确定正态分布的均值与方差:
在这里插入图片描述
当均值与方差确定后就可以根据PDF(概率密度函数)来对x的概率进行计算,设定一个阈值,μ+σ,μ+2σ或μ+3σ(另一边对称),当x 的概率小于该位置的概率时将x看作异常点。
在这里插入图片描述
可以通过有序排列的数据的上下四分位数(Q1,Q3)、中位数等形成箱线图,对数据分布进行可视化,,来直观体现哪些点为异常点(一般处于Q1-1.5IQR与Q3+1.5IQR区间的点被定义为异常点)。IQR是指一组数据的第一和第三四分位点数之间的差值,IQR=Q3-Q1.

import numpy as np
def outliers_iqr(data):
	q1,q3=np.percentile(data,[25,75])
	iqr=q3-q1
	lower_bound=q1-1.5*iqr
	upper_bound=q3+1.5*iqr
	return np.where((data>upper_bound)|(data<lower_bound))

箱线图可以通过seaborn库来实现:

import seaborn as sns
sns.boxplot(data)

2.2多元异常点检测

核心思想:将多元任务转化为一元任务
当X=(x1,x2,…,xm),时P(X)=p(x1)p(x2)…p(xm),因此可以得到当xi与xj相互独立时的多元正态分布的PDF:
在这里插入图片描述
如果特征之间存在相关性,P(X)就不能由上述式子得到,此时需用多元高斯分布进行求解:
在这里插入图片描述
μ表示第i个特征下,所有样本数据的均值,∑表示第i个特征的协方差,可以看出,多元高斯分布的PDF与属性独立时的PDF在形式上是一样的,唯一的不同是其用矩阵的乘法代替了多个概率相乘,体现了属性之间的相关性。

ps:当多元高斯分布模型的协方差矩阵∑为对角矩阵,且对角线上的元素为各自一元高斯分布模型的方差时,二者是等价的。因为当∑为对角阵时,Σ−1也为对角阵,只有在对应属性的位置存在非零值,而其他位置都为0,这样就不存在属性相关,然后对角线的值为方差,就与特征相互独立时的PDF一致了。

大多数情况下,数据分布是符合高斯分布的,但是也会出现不符合的情况,此时就需要使用混合高斯分布。混合高斯分布使用的算法一般有EM。

from sklearn import mixture
mgm=mixture.BayesianGaussianMixture(n_components=n_components)
mgm_2=mixture.GaussianMixture(n_components=n_components)
mixture.gaussian_mixture

上面提供了两种高斯混合模型,GaussianMixture使用的是EM算法,BayesianGaussianMixture使用的是Variational Inference model(可以自适应最佳的簇数).

3.非参数方法

非参数方法对数据做较少的假定,可以适用于更多的场合。
直方图是一种频繁使用的非参数统计模型,可以用来检测异常点。
尽管非参数方法并不假定任何先验统计模型,但是通常确实要求用户提供参数,以便由数据学习。例如,用户必须指定直方图的类型(等宽的或等深的)和其他参数(直方图中的箱数或每个箱的大小等)。与参数方法不同,这些参数并不指定数据分布的类型。
简单判断:如果该对象落入直方图的一个箱中,则该对象被看作正常的,否则被认为是异常点。
复杂判断:使用直方图赋予每个对象一个异常点得分。例如令对象的异常点得分为该对象落入的箱的容积的倒数。
使用直方图作为异常点检测的非参数模型的一个缺点是,很难选择一个合适的箱尺寸。

4.基于角度的方法

主要思想:数据边界上的数据很可能将整个数据包围在一个较小的角度内,而内部的数据点则可能以不同的角度围绕着他们。
在这里插入图片描述
如果数据点与其余点离得较远,则潜在角度可能越小。因此,具有较小角度谱的数据点是异常值,而具有较大角度谱的数据点不是异常值。
考虑三个点X,Y,Z。如果对于任意不同的点Y,Z,有:
在这里插入图片描述
这是一个加权余弦,因为分母包含L2-范数,其通过距离的逆加权进一步减小了异常点的加权角。
然后,通过改变数据点Y和Z,保持X的值不变计算所有角度的方法。相应地,数据点X的基于角度的异常分数(ABOF)∈ D为:
在这里插入图片描述
VarY,Z∈D:表示所有角度的方差

5.HBOS

HBOS全名为:Histogram-based Outlier Score
一种单变量方法的组合,其基本假设是数据集的每个维度相互独立,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好。对每个维度进行区间(bin)划分,区间的密度越高,异常评分越低。
HBOS算法流程:
1.为每个数据维度做出数据直方图。对分类数据统计每个值的频数并计算相对频率。对数值数据根据分布的不同采用以下两种方法:
(1)静态宽度直方图:标准的直方图构建方法,在值范围内使用k个等宽箱。样本落入每个桶的频率(相对数量)作为密度(箱子高度)的估计。时间复杂度:O(n)
(2)动态宽度直方图:首先对所有值进行排序,然后固定数量的N/k个连续值装进一个箱里,其中N是总实例数,k是箱个数;直方图中的箱面积表示实例数。因为箱的宽度是由箱中第一个值和最后一个值决定的,所有箱的面积都一样,因此每一个箱的高度都是可计算的。这意味着跨度大的箱的高度低,即密度小,只有一种情况例外,超过k个数相等,此时允许在同一个箱里超过N/k值。
时间复杂度:O(n×log(n))
2.对每个维度都计算了一个独立的直方图,其中每个箱子的高度表示密度的估计。然后为了使得最大高度为1(确保了每个特征与异常值得分的权重相等),对直方图进行归一化处理。
最后,每一个实例的HBOS值由以下公式计算:
在这里插入图片描述
HBOS在全局异常检测问题上表现良好,但不能检测局部异常值。但是HBOS比标准算法快得多,尤其是在大数据集上。

6.Z-score

Z-score表示一个数据点离均值有多少个标准差:Z=(xi-μ)/σ,任何Z-score大于3或者小于-3都被认为是异常值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值