非监督异常点检测算法总结——没有想到矩阵分解和编码解码器也是一种思路
非监督异常点检测算法总结
一、基于密度
1) d(p,o):两点p和o之间的距离;
2) k-distance:第k距离
对于点p的第k距离dk(p)定义如下:
p的第k距离,也就是距离p第k远的点的距离,如图。
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距离,或者为o、p间的真实距离。
这也意味着,离点o最近的k个点,o到它们的可达距离被认为相等,且都等于dk(o)。
如图,o1到p的第5可达距离为d(p,o1),o2到p的第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/