【Datawhale第25期组队学习】Task04:基于相似度的方法

文章目录

一、概念

专注于有价值的异常值。
主要思想:异常点的表示与正常点不同。

二、基于距离的度量

基于最近邻距离来定义异常值。 此类方法不仅适用于多维数值数据,在其他许多领域,例如分类数据,文本数据,时间序列数据和序列数据等方面也有广泛的应用。
基于距离的异常检测有这样一个前提假设,即异常点的 近邻距离要远大于正常点。解决问题的最简单方法是使用嵌套循环。
第一层:循环遍历每个数据。
第二层:循环进行异常判断。
缺点:若数据量较大,不划算。
解决方案:修剪方法以加快距离计算。

1.基于单元的方法

数据空间被划分为单元格,单元格的宽度是阈值D和数据维数的函数。每个维度被划分成宽度最多为 D/2根号a个单元格。在给定的单元以及相邻的单元中存在的数据点满足某些特性,这些特性可以让数据被更有效的处理。
网格单元的数量基于数据空间的分区,并且与数据点的数量无关。
缺点:不适用于更高维度的数据。

2.基于索引的方法

利用多维索引结构(如 树、 树)来搜索每个数据对象A在半径D范围 内的相邻点。
缺点:该算法在数据集的维数增加时具有较好的扩展性,但是时间复杂度的估算仅考虑了搜索时间,而构造索引的任务本身就需要密集复杂的计算量。

三、基于密度的度量

基于密度的算法主要有局部离群因子(LocalOutlierFactor,LOF),以及LOCI、CLOF等基于LOF的改进算法。

1. k-距离(k-distance§)

以对象p为中心,对数据集 D中的所有点到 的距离进行排序,距离对象 p第k近的点 Ok与p之间的距离就是k-距离。

2. k-邻域(k-distance neighborhood)

在二维平面上展示出来的话,对象p的k-邻域实际上就是以对象p为圆心、k-距离为半径围成的圆形区域。就是说,k-邻域已经从“距离”这个概念延伸到“空间”了。

3. 可达距离(reachability distance)

有了邻域的概念,我们可以按照到对象 的距离远近,将数据集D内的点按照到 o的距离分为两类:
若 p在对象o的k-邻域内,则可达距离就是给定点 p关于对象o的k-距离;
若 p在对象 o的k-邻域外,则可达距离就是给定点 p关于对象o的实际距离。

可达距离的设计是为了减少距离的计算开销, 的k-邻域内的所有对象 的k-距离计算量可以被显著降低,相当于使用一个阈值把需要计算的部分“截断”了。这种“截断”对计算量的降低效果可以通过参数来控制, 的值越高,无需计算的邻近点越多,计算开销越小。但是另一方面, 的值变高,可能意味着可达距离变远,对集群点和离群点的区分度可能变低。因此,如何选择 值,是LOF算法能否达到效率与
效果平衡的重要因素。

4. 局部可达密度(local reachability density)

我们可以将“密度”直观地理解为点的聚集程度,就是说,点与点之间距离越短,则密度越大。在这里,我们使用数据集D中对象p与对象o的k-邻域内所有点的可达距离平均值的倒数(注意,不是导数)来定义局部可达密度。

计算其邻域内的所有对象o到给定点p的可达距离平均值。给定点p的局部可达密度越高,越可能与其邻域内的点 属于同一簇;密度越低,越可能是离群点。

5. 局部异常因子

得到lrd(局部可达密度)以后就可以将每个点的lrd将与它们的k个邻点的lrd进行比较,得到局部异常因子LOF。更具体地说,LOF在数学上是对象 的邻居点 O的lrd平均值与 的lrd的比值。

的局部可达密度越低,且它的 近邻的平均局部可达密度越高,则 的LOF值越高。
LOF数值,就是我们所需要的离群点分数。

上一篇:[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除


下一篇:使用using释放资源