数据集 S 中的对象 o 是具有参数 p 和 d 的基于距离 (DB) 的异常值,即 DB (p, d),如果 S 中对象的最小分数 p 位于距哦。换句话说,它可以将基于距离的异常值视为没有足够邻居的对象,而不是依赖于统计测试。
邻居根据与给定对象的距离表示。与基于统计的方法相比,基于距离的异常值检测概括或合并了标准分布不一致性测试背后的思想。因此,基于距离的异常值也称为统一异常值或 UO 异常值。
基于距离的异常值检测可防止与将观察到的分布拟合到某个标准分布和选择不一致测试相关的过度计算。对于某些不一致测试,可以显示如果对象 o 根据给定的测试是异常值,那么对于某些正确表示的 p 和 d,o 也是 DB (p, d) 异常值。
例如,如果与平均值相差 3 个或更多标准差的对象被视为异常值,考虑到正态分布,那么这种表示可以由 DB(0.9988, 0.13s)-异常值“统一”。已经创建了几种用于挖掘基于距离的异常值的有效算法,如下所示 -
基于索引的算法- 给定一个数据集,基于索引的算法有助于多维索引结构,包括 R 树或 kd 树,以搜索每个对象 o 在该对象周围半径 d 内的邻居。令 M 为异常值的 d 邻域内的最大对象数。因此,一旦发现对象 o 的 M + 1 个邻居,就可以确定 o 不是异常值。该算法具有最低的情况复杂度 O(k * n2),其中 k 是维度,n 是数据集中的对象数量。
嵌套循环算法- 嵌套循环算法与基于索引的算法具有相同的评估复杂性,但避免索引结构构建并尝试最小化 I/O 的数量。它将内存缓冲区分为两半,将数据设置为几个逻辑块。
基于单元的算法- 它可以避免 O(n 2 ) 计算复杂度,为内存驻留数据集开发了基于单元的算法。它的复杂度是 O (e k + n),其中 c 是基于单元格数量的常数,k 是维数。
在这种方法中,数据空间被划分为边长类似于 $\frac{d}{\sqrt[2]{k}}$的单元格。每个单元格周围有两层。
第一层是一个单元格厚,而第二层是 $\sqrt[2]{k}$单元格厚,四舍五入到最接近的整数。该算法逐个单元而不是逐个对象地计算异常值。对于给定的单元格,它会累积三个计数,包括单元格中、单元格和第一层中的对象数以及单元格中和两层中的对象数。