【Educoder数据挖掘实训】异常值检测-值域法

【Educoder数据挖掘实训】异常值检测-值域法

开挖!

这个题中 l o f lof lof算法给的很抽象,先用比较通俗的方式说一下:
首要想法是找到不合群的点,也就是异常点。采用的方法是对局部可达密度进行判断。相较于其他普通的简单基于聚类的算法,这个算法有两个优点:

  1. 可以应对下列问题:
    在这里插入图片描述
    在上图中,显然 p p p是一个异常点。但是可能根据常规的聚类算法很难排除点 p p p。原因是点 p p p是相较于 C 2 C_2 C2来说的异常点,可是 p p p C 2 C_2 C2中点的距离和 C 1 C_1 C1中点的平均距离差不多,所以常规的算法无法处理。但是 p p p l o f lof lof算法中密度显然很低,可以被标记出来。
  2. l o f lof lof算法中,不会像传统异常点检测算法一样直接给出哪些点是异常点,二是会给出每个点的密度。这样可以自己更新阈值更方便后续处理,或者说 l o f lof lof算法能更好的处理特殊情况。

那么什么是 l o f lof lof算法呢?先定义几个函数:
d ( p , q ) d(p,q) d(p,q)表示点到点的距离;
d k ( p ) d_k(p) dk(p):第 k k k距离,表示所有点到 p p p的距离里,从小到大排序的第 k k k个;
N k ( p ) N_k(p) Nk(p):第 k k k距离邻域:表示所有点到 p p p的距离里,不大于 d k ( p ) d_k(p) dk(p)的,不难看出 ∣ N k ( p ) ∣ ≥ k |N_k(p)|\ge k Nk(p)k
r e a c h _ d i s t k ( o , p ) = m a x ( d k ( o ) , d ( o , p ) ) reach\_dist_k(o,p)=max(d_k(o), d(o,p)) reach_distk(o,p)=max(dk(o),d(o,p)):第 k k k可达距离,显然在 o o o的第 k k k邻域里的点,点 o o o到这些点的第 k k k可达距离都为第 k k k距离。
l r d k ( p ) = 1 / ( ∑ o ∈ N k ( p ) r e a c h _ d i s t k ( o , p ) ∣ N k ( p ) ∣ ) lrd_k(p) = 1/(\frac{\sum_{o\in N_k(p)} reach\_dist_k(o,p)}{|N_k(p)|}) lrdk(p)=1/(Nk(p)oNk(p)reach_distk(o,p)):点 p p p的第 k k k局部可达密度;
L O F k ( p ) = ∑ o ∈ N k ( p ) l r d k ( o ) l r d k ( p ) ∣ N k ( p ) ∣ = ∑ o ∈ N k ( p ) l r d k ( o ) ∣ N k ( p ) ∣ / l r d k ( p ) LOF_k(p) = \frac{\sum_{o\in N_k(p)}\frac{lrd_k(o)}{lrd_k(p)}}{|N_k(p)|} = \frac{\sum_{o\in N_k(p)}lrd_k(o)}{|N_k(p)|} /lrd_k(p) LOFk(p)=Nk(p)oNk(p)lrdk(p)lrdk(o)=Nk(p)oNk(p)lrdk(o)/lrdk(p):局部离群因子,即将点 p p p N k ( p ) N_k(p) Nk(p)邻域内所有点的平均局部可达密度与点的局部可达密度做比较,通过这个值来反应点 p p p是不是异常点。

所以其实我们要做的就是求出所有点的 L O F k ( p ) LOF_k(p) LOFk(p)
显然有一种做法是 n 3 n^3 n3,即暴力枚举所有点和 k k k,这样当然是没问题的。
而且在数据挖掘中往往时间并不占据主要考虑对象,所以时间复杂度显得不是很重要。
但是显然有更优化的方法,比如用 K D T r e e KDTree KDTree来优化这个过程或者 B a l l T r e e Ball_Tree BallTree来优化,效果都是很好的。


当然这都不是我们考虑的范围, P y t h o n Python Python已经给出了相应的函数,我们只需要拿来用即可。
但是可能有一个问题,就是上述的 k k k到底取多少,题目里也并没有明确强调。经过实验取 10 10 10即可, P y t h o n Python Python函数中默认是 20 20 20
在求出所有密度之后我们在用 f i t _ p r e d i c t fit\_predict fit_predict函数进行预测即可,其中为 − 1 -1 1的点就是异常点。
代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor
# 导入数据
abc = pd.read_csv('deaths.csv')
## 只分析其中的Population和Lat两个变量
abc = abc[["Population","Lat"]]###begin###
lof = LocalOutlierFactor(n_neighbors = 10)
###将lof作用于数据集
score = lof.fit_predict(abc)
ans = 0
for scr in score :if scr == -1 :ans += 1
print("检测出的异常值数量为:", ans)
###end####

一些问题和思考:

  1. 首先,这些算法 P y t h o n Python Python中都应相应的函数,只需要拿来用即可,关键要考虑清楚输入和输出的格式要求和数据类型。
  2. 这里 n _ n e i g h b o r s = 10 n\_neighbors = 10 n_neighbors=10并不是强制要求,而是我们采用 f i t _ p r e d i c t fit\_predict fit_predict函数进行异常点检测时恰好 k k k需要取到 10 10 10,我们如果换一种阈值可能就需要 k k k是另一个值。
  3. 对于 k k k值更深层次的理解:这里的 k k k并不具备单调属性。很容易被误解成以每个点周围的 k k k个点为聚类考虑问题。显然并不是,比如我们将 k k k 10 10 10枚举到 20 20 20,得到的异常点个数并不是单调的:在这里插入图片描述
    这其中的原因是: k k k并不是一个越大越宽松或者越大越严谨的可操控量, k k k只是一个算法中的变量。对于一个未知的数据我们并不能确定 k k k的值来找到最好的异常点检测方案。换句话说,对于不同的数据找到最合适的 k k k恰恰是我们应用 l o f lof lof算法的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/521240.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch之通过search after和scroll解决深度分页问题

写在前面 通过from,size来进行分页查询时,如下: 当from比较大时会有深度分页问题,问题产生的核心是coordinate node需要从每个分片中获取fromsize条数据,当from比较大,整体需要获取的数据量也会比较大&am…

MongoDB安装教程(附带安装包)

目录 解压安装包 傻瓜式安装 选择安装目录 安装完成 启动验证 验证成功 解压安装包 选择所需要的进行安装 傻瓜式安装 选择安装目录 安装完成 启动验证 mongod --dbpathD:\mongodb\data\db 验证成功

vue 使用谷歌地图 @googlemaps/js-api-loader 进行模糊搜索

<template><div class"map"><div class"mapLeftStyle"><el-inputv-model"input"placeholder"请输入内容"class"controls"input"chnageinput"><i slot"prefix" class"e…

关于JVM的小总结(待补充)

JVM组成及他们之间的关系 装载类子系统字节码执行引擎运行时数据区 装载类子系统 类加载器字节码调节器类加载运行时数据区 字节码执行引擎 运行时数据区 线程私有 虚拟机栈本地方法栈程序计数器 线程共享 堆方法区&#xff08;元空间&#xff09;

SpringBoot配置加载顺序和SpringBoot分离打包:将jar包与lib依赖、配置文件分开

文章目录 一、SpringBoot配置加载顺序1.SpringBoot配置优先级&#xff08;1&#xff09;命令行参数&#xff08;2&#xff09;配置文件 二、SpringBoot分离打包&#xff1a;将jar包与lib依赖、配置文件分开1.pom文件配置2.打包后的目录结构 一、SpringBoot配置加载顺序 官方文…

是什么短波与超短波通信,水利短波通信系统详解

1、短波通信 频率在3—30MHZ。依靠无线电波从电离层反射传播实现通信。实际使用的工作频率与通信线路长度及地理位置有关&#xff0c;而且随昼夜、季节和太阳黑子活动周期而变。 短波通信易受电离层骚扰等活动的影响&#xff0c;而且频率拥挤&#xff0c;干扰严重&#xff0c;通…

vue实现文字手工动态打出效果

vue实现文字手工动态打出效果 问题背景 本文实现vue中&#xff0c;动态生成文字手动打出效果。 问题分析 话不多说&#xff0c;直接上代码&#xff1a; <template><main><button click"makeText"><p class"text">点击生成内容…

SAM多目标跟踪与分割TAM论文解读Track Anything: Segment Anything Meets Videos

一、总结 1. 简介 发表时间&#xff1a;2023年4月28日 论文&#xff1a;[2304.11968] Track Anything: Segment Anything Meets Videos (arxiv.org)https://arxiv.org/abs/2304.11968代码&#xff1a;gaomingqi/Track-Anything: Track-Anything is a flexible and interacti…

javascript正则深入

文章目录 一、前言二、高级`API`2.1、模式匹配的用法`(x)`2.2、非捕获括号的模式匹配`(?:x)`2.3、先行断言`x(?=y)`2.4、后行断言`(?<=y)x`2.5、正向否定查找`x(?!y)`2.6、反向否定查找`(?<!y)x`2.7、字符集合和反向字符集合的用法 `[xyz] / [^xyz]`2.8、词边界和非…

MacOS包管理工具homebrew使用教程

MacOS包管理工具homebrew使用教程 1.概述与安装2.基本使用3.其他常用命令 1.概述与安装 homebrew是Mac OS X上的强大的包管理工具&#xff0c;可以高效管理各种软件包 安装&#xff1a; 1、安装xcode&#xff1a; xcode-select --install2、一行命令下载&#xff1a; /bin…

四川宏博蓬达法律咨询:专业领航,法治路上的坚实后盾

在法治社会中&#xff0c;法律咨询服务扮演着举足轻重的角色。四川宏博蓬达法律咨询&#xff0c;作为业界的佼佼者&#xff0c;以其正规可靠的服务赢得了广大客户的信赖和好评。今天&#xff0c;我们就来一起了解一下这家在法律服务领域备受赞誉的企业。 一、正规资质&#xff…

Java Day5 常用API

文章目录 1、Math2、System3、Runtime4、BigDecimal5、Date日期6、SimpleDateFormat 1、Math double s1.2;System.out.println(Math.ceil(s));//2.0System.out.println(Math.floor(s));//1.0int a-1;System.out.println(Math.abs(a));//1System.out.println(Math.pow(2, 2));//…