异常检测--基于相似度的方法
#异常检测——基于相似度的方法
主要内容包括:
- 基于距离的度量
- 基于密度的度量
文章目录
-
- 1、概述
- 2、基于距离的度量
-
- 2.1 基于单元的方法
- 2.2 基于索引的方法
- 3、基于密度的度量
-
- 3.1 k-距离(k-distance(p)):
- 3.2 k-邻域(k-distance neighborhood):
- 3.3 可达距离(reachability distance):
- 3.4 局部可达密度(local reachability density):
- 3.5 局部异常因子:
- 4、练习
- 参考资料:
1、概述
“异常”通常是一个主观的判断,什么样的数据被认为是“异常”的,需要结合业务背景和环境来具体分析确定。
实际上,数据通常嵌入在大量的噪声中,而我们所说的“异常值”通常指具有特定业务意义的那一类特殊的异常值。噪声可以视作特性较弱的异常值,没有被分析的价值。噪声和异常之间、正常数据和噪声之间的边界都是模糊的。异常值通常具有更高的离群程度分数值,同时也更具有可解释性。
在普通的数据处理中,我们常常需要保留正常数据,而对噪声和异常值的特性则基本忽略。但在异常检测中,我们弱化了“噪声”和“正常数据”之间的区别,专注于那些具有有价值特性的异常值。在基于相似度的方法中,主要思想是异常点的表示与正常点不同
2、基于距离的度量
基于距离的方法是一种常见的适用于各种数据域的异常检测算法,它基于最近邻距离来定义异常值。 此类方法不仅适用于多维数值数据,在其他许多领域,例如分类数据,文本数据,时间序列数据和序列数据等方面也有广泛的应用。
基于距离的异常检测有这样一个前提假设,即异常点的 k kk 近邻距离要远大于正常点。解决问题的最简单方法是使用嵌套循环。 第一层循环遍历每个数据,第二层循环进行异常判断,需要计算当前点与其他点的距离,一旦已识别出多于 k kk 个数据点与当前点的距离在 D DD 之内,则将该点自动标记为非异常值。 这样计算的时间复杂度为O ( N 2 ) O(N^{2})O(N2),当数据量比较大时,这样计算是及不划算的。 因此,需要修剪方法以加快距离计算。
2.1 基于单元的方法
在基于单元格的技术中,数据空间被划分为单元格,单元格的宽度是阈值D和数据维数的函数。具体地说,每个维度被划分成宽度最多为 D 2 ⋅ d \frac{D}{{2 \cdot \sqrt d }}2⋅d
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrxOTupS-1611237077193)(img/UWiX5C7kCHx5yX7O9yQm9F1ndg-QgMqS3BAwIWPB40k.original.fullsize-1609839833441.png)]
以二维情况为例,此时网格间的距离为 D 2 ⋅ d \frac{D}{{2 \cdot \sqrt d }}2⋅d
- 单元格中两点之间的距离最多为 D / 2 D/2D/2。
- 一个点与 L 1 L_{1}L1 邻接点之间的距离最大为 D DD。
- 一个点与它的 L r LrLr 邻居(其中r rr > 2)中的一个点之间的距离至少为D DD。
唯一无法直接得出结论的是 L 2 L_{2}L2 中的单元格。 这表示特定单元中数据点的不确定性区域。 对于这些情况,需要明确执行距离计算。 同时,可以定义许多规则,以便立即将部分数据点确定为异常值或非异常值。 规则如下:
- 如果一个单元格中包含超过 k kk 个数据点及其 L 1 L_{1}L1 邻居,那么这些数据点都不是异常值。
- 如果单元 A AA 及其相邻 L 1 L_{1}L1 和 L 2 L_{2}L2 中包含少于 k kk 个数据点,则单元A中的所有点都是异常值。
此过程的第一步是将部分数据点直接标记为非异常值(如果由于第一个规则而导致它们的单元格包含 k kk 个点以上)。 此外,此类单元格的所有相邻单元格仅包含非异常值。 为了充分利用第一条规则的修剪能力,确定每个单元格及其 L 1 L_{1}L1 邻居中点的总和。 如果总数大于 k kk ,则所有这些点也都标记为非离群值。
接下来,利用第二条规则的修剪能力。 对于包含至少一个数据点的每个单元格 A AA,计算其中的点数及其 L 1 L_{1}L1 和 L 2 L_{2}L2 邻居的总和。 如果该数字不超过 k kk,则将单元格A AA 中的所有点标记为离群值。 此时,许多单元可能被标记为异常值或非异常值。
对于此时仍未标记为异常值或非异常值的单元格中的数据点需要明确计算其 k kk 最近邻距离。即使对于这样的数据点,通过使用单元格结构也可以更快地计算出 k kk 个最近邻的距离。考虑到目前为止尚未被标记为异常值或非异常值的单元格A AA。这样的单元可能同时包含异常值和非异常值。单元格 A AA 中数据点的不确定性主要存在于该单元格的 L 2 L_{2}L2 邻居中的点集。无法通过规则知道 A AA 的 L 2 L_{2}L2 邻居中的点是否在阈值距离 D DD 内,为了确定单元 A AA 中数据点与其L 2 L_{2}L2 邻居中的点集在阈值距离 D DD 内的点数,需要进行显式距离计算。对于那些在 L 1 L_{1}L1 和 L 2 L_{2}L2 中不超过 k kk 个且距离小于 D DD 的数据点,则声明为异常值。需要注意,仅需要对单元 A AA 中的点到单元A AA的L 2 L_{2}L2邻居中的点执行显式距离计算。这是因为已知 L 1 L_{1}L1 邻居中的所有点到 A AA 中任何点的距离都小于 D DD,并且已知