非监督异常点检测算法总结——没有想到矩阵分解和编码解码器也是一种思路

非监督异常点检测算法总结

 

一、基于密度

1) d(p,o):两点po之间的距离; 

2) k-distance:第k距离 

对于点p的第k距离dk(p)定义如下: 

p的第k距离,也就是距离pk远的点的距离,如图。 

 

 

3) k-distance neighborhood of p:第k距离邻域 

p的第k距离邻域Nk(p),就是p的第k距离即以内的所有点,包括第k距离。 

因此p的第k邻域点的个数 |Nk(p)|≥k 上图中,p的第k邻域就是圆里面的点,包括边界上的点。

4) reach-distance:可达距离 

o到点p的第k可达距离定义为: 

reachdistancek(p,o)=max{k−distance(o),d(p,o)} 

也就是,点o到点p的第k可达距离,至少o的第k距离,或者为op间的真实距离。 

这也意味着,离点o最近的k个点,o到它们的可达距离被认为相等,且都等于dk(o) 

如图,o1p的第5可达距离为d(p,o1)o2p的第5可达距离为d5(o2) 

 

 

5) local reachability density:局部可达密度 

点p的局部可达密度表示为:

lrdk(p)=1/(∑o∈Nk(p)reach−distk(p,o)|Nk(p)|)

表示点p的第k邻域内所有点到p的可达距离的平均数的倒数。 (其实也就是用平均举例的倒数作为密度)

这个值的含义可以这样理解,首先这代表一个密度,密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。如果p和周围邻域点是同一簇,那么可达距离越可能为较小的dk(o),导致可达距离之和较小,密度值较高;如果p和周围邻居点较远,那么可达距离可能都会取较大值d(p,o),导致密度较小,越可能是离群点。 

6) local outlier factor:局部离群因子 (score)

p的局部离群因子表示为:

LOFk(p)=∑o∈Nk(p)lrdk(o)lrdk(p)|Nk(p)|=∑o∈Nk(p)lrdk(o)|Nk(p)|/lrdk(p)

表示点p的邻域点Nk(p)的局部可达密度与点p的局部可达密度之比的平均数。 

如果这个比值越接近1,说明p的其邻域点密度差不多,p可能和邻域同属一簇;如果这个比值越小于1,说明p的密度高于其邻域点密度,p为密集点;如果这个比值越大于1,说明p的密度小于其邻域点密度,p越可能是异常点。 

主要是通过比较每个点p和其邻域点的密度来判断该点是否为异常点,如果点p的密度越低,越可能被认定是异常点。至于密度,是通过点之间的距离来计算的,点之间距离越远,密度越低,距离越近,密度越高,完全符合我们的理解。而且,因为lof对密度的是通过点的第k邻域来计算,而不是全局计算,因此得名为“局部”异常因子,这样,对于分散度不同的聚类,lof完全可以正确处理,而不会因为数据密度分散情况不同而错误的将正常点判定为异常点。 

 

 

二、基于矩阵分解

思路:选取特征主成分,将原数据映射到主成分坐标系实现降维。再把降维后的数据映射回原数据的坐标系

主成分:数据差异性大的方向

先计算不同特征的方差,第一个主成分方向就是方差最大的特征的方向,方差从大到小排列取前N,构成N维新坐标系,

 

 

 

 

 

 

 

 

 

根据重构之后的数据和原数据比较,得到误差score作为异常点的评价分数

 

 

三、Replicator Neural Network

 

输入和输出是一样的,都是每条数据的特征值

整个流程相当于把数据先压缩再恢复。

在神经网络传输的时候,中间使用了 tanh 函数和 sigmoid 函数。这个神经网络是训练一个从输入层到输出层的恒等函数(identity mapping),传输的时候从输入层开始压缩数据,然后到了第二个隐藏层的时候开始解压数据。训练的目标就是使得整体的输出误差足够小,整体的误差是由所有的样本误差之和除以样本的个数得到的。

第二层和第四层的激活函数都是tanh

第三层是一个阶梯函数,图像如下

 

 

 

  

 参考资料:

https://zr9558.com/2016/06/23/outlierdetectiontwo/

https://zr9558.com/2016/06/12/replicator-neural-networks/

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/bonelee/p/9174744.html