盘点5种最频繁使用的检测异常值的方法(附Python代码)

news2024/12/23 16:10:35

本文介绍了数据科学家必备的五种检测异常值的方法。

无论是通过识别错误还是主动预防,检测异常值对任何业务都是重要的。本文将讨论五种检测异常值的方法。

文章目录

      • 什么是异常值?
      • 为什么我们要关注异常值?
      • 技术提升
      • 方法1——标准差
      • 方法2——箱线图:
      • 方法3——DBScan集群
      • 方法4——孤立森林
      • 方法5——Robust Random Cut Forest
      • 结论

什么是异常值?

在统计学中,异常值是指不属于某一特定群体的数据点。它是一个与其他数值大不相同的异常观测值,与良好构成的数据组相背离。

例如,你可以清楚地看到这个列表里的异常值:[20, 24, 22, 19, 29, 18, 4300, 30, 18].

当观测值仅仅是一堆数字并且是一维时,很容易识别出异常值。但是,当你有成千上万的观测值或者是多维度时,你将需要更多巧妙的办法来检测出那些异常值。这就是本文要讨论的内容。

为什么我们要关注异常值?

检测异常值是数据挖掘中的核心问题之一。数据的不断扩增和持续增长,以及物联网设备的普及,让我们重新思考处理异常值的方法和观测异常值构建出的用例。

现在,我们拥有可以检测我们每分钟心跳的智能手表和腕带。检测心跳数据的异常值有助于预防与心脏有关的疾病。交通模式中的异常值有助于预防交通事故。异常值检测还可以用来识别服务器之间的网络基础设施和通信的障碍。因此,建立在检测异常值之上的用例和解决方案是无穷无尽的。

另一个我们需要检测异常值的理由是,当为机器学习模型准备数据集时,检测出所有的异常值,并且要么移除它们、要么分析它们来了解它们最初存在的原因是非常重要的。

现在,让我们从最简单的方法开始探索5种常用的检测异常值的方法。

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

方法1——标准差

在统计学中,如果一个数据分布式近似正态分布,那么大约68%的数据值在平均值的前后一个标准差范围内,大约95%的数据值在平均值的前后两个标准差范围内,大约99.7%的数据值在前后三个标准差的范围内。

因此,如果你有任何出现在三个标准差范围外的数据点,那么那些点就极有可能是异常值。

让我们看看代码。

这段代码的输出结果是一个大于80或小于-40的数据列表。请注意,我传入的数据集是一个一维数据集。现在,让我们探索对于多维数据集的更高级的方法。

方法2——箱线图:

箱线图是指通过分位数对数值型数据的图形化描述。这是一种非常简单但有效的异常值可视化方法。把上下须触线看作数据分布的上下边界。任何出现在下须触线下面或上须触线上面的数据点可以被看作异常值。下面是绘制箱线图的代码:

上面的代码输出如下的箱线图。如你所见,它把大于75或小于-35的值看作异常值。这个结果非常接近上述的方法1得到的结果。

箱线图分解:

四分位差的概念是被用来绘制详细图的。四分位差是统计学中通过将数据集划分为四分位数来衡量统计离散度和数据可变性的概念。

简而言之,任何数据集或任何观察值的集合被划分为四个基于数据值和它们与整个数据集比较后而定义的区间。四分位数是指将数据分为三个点和四个区间的数据点。

四分位差是重要的,因为它用于定义异常值。它是第三个四分位数和第一个四分位数的差(IQR=Q3-Q1). 这种情况下的异常值被定义为低于(Q1-1.5IQR)或低于箱线图下须触线或高于(Q3+1.5IQR)或高于箱线图上须触线的观测值。

Source Wikipedia

方法3——DBScan集群

DBScan是一种用于将数据分组的集群算法。它也是一种被用于基于密度的对于一维或多维数据的异常检测方法。其他的像k-均值和层次聚类的集群算法也可以用于检测异常值。在本例中,我将向您展示一个使用DBScan的案例。但是在开始前,我们先介绍一些重要概念。DBScan有三个重要概念:

  • 核心点:为了理解核心点,我们需要访问一些用于定义DBScan工作的超参数。第一个超参数是最小值样本(min_samples)。这只是形成集聚的核心点的最小数量。第二重要的超参数eps,它是两个被视为在同一个簇中的样本之间的最大距离。

  • 边界点:是与核心点在同一集群的点,但是要离集群中心远得多。

Source:https://stackoverflow.com/questions/34394641/dbscan-clustering-what-happens-when-border-point-of-one-cluster-is-considered

  • 其他的点被称为噪声点,那些数据点不属于任何集群。它们可能是异常点,可能是非异常点,需要进一步调查。现在让我们看看代码。

上述代码的输出值是94。这是噪声点的总数。SKLearn将噪声点标记为(-1)。这种方法的缺陷就是维数越高,精度越低。你还需要做出一些假设,比如估计eps的正确值,而这可能是有挑战性的。

方法4——孤立森林

孤立森林是一种无监督学习的算法,属于集成决策树族。这种方法与前面的方法都不同。所有前面的方法是试图找到数据的正常区域,然后将所定义区域外的任何值视为异常值。

这种方法的工作原理不同。它是明确的孤立异常值,而不是通过给每个点分配一个分数来构造正常的点和区域。它充分利用了这样一个事实:异常值只占数据的小部分,并且它们有与正常值大不相同的属性。该算法适用于高维数据集,并且被证实是一种非常有效的检测异常值的方法。由于本文关注的是实现而不是专门知识,我将不深入探讨算法的工作原理。但是,这篇文章中涵盖了它的所有工作原理细节。

https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

现在,让我们探索代码:

该代码将输出数组中每个数据点的预测值。如果结果是-1,那意味着这个特定的数据点是一个异常值。如果结果是1,那么意味着该数据点不是异常值。

方法5——Robust Random Cut Forest

Robust Random Cut Forest算法是亚马逊用于检测异常值的无监督算法。它也通过关联异常分数来工作。低的分数值表示数据点是“正常的”,高的值表示数据中存在异常。“低”和“高”的定义取决于应用,但是一般实践表明,超过平均值三个标准差的分数被认为是异常的。算法的细节可以在这篇文章中找到。

http://proceedings.mlr.press/v48/guha16.pdf

这个算法的最大优势是它可以处理非常高维的数据。它还可以处理实时数据流(内置AWS Kinesis Analytics)和离线数据。

我可以在如下的视频里更加详细的解释这个概念:

https://youtu.be/yx1vf3uapX8

该算法的论文给出了一些与孤立森林相比较的性能标准。论文结果表明,RCF比孤立森林更加准确和快速。

完整的案例代码可以在这里找到:

amazon-sagemaker-examples/introduction_to_amazon_algorithms/random_cut_forest at master · aws/amazon-sagemaker-examples · GitHub

结论

我们生活在一个数据每分每秒都在剧增的世界里。数据如果使用不当便会随着时间贬值。于在线数据流或离线数据集中发现异常值,对于识别商业中的问题或主动构建解决方案以在问题发生之前发现潜在的问题,或者甚至在探索性数据分析(EDA)阶段为ML准备数据集都是至关重要的。我期待你能认为本文有用,在下面的评论区让我知道你的想法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenEnergyMonitor】开源的能源监控系统--项目介绍

OpenEnergyMonitor1. 系统框架2.项目组成2.1 emonPi模块:2.1.1 emonpi的安装:2.1.2 emonTx & emonBase 安装2.1.3 emonTx Wifi 安装:2.1.4 添加额外的 emonTx 节点:2.1.5 添加额外的emonTx-节点监控三项电源2.1.6 添加 emonTH 温度节点2.…

【Vue核心】8.计算属性

1. 定义: 要用的属性不存在,要通过已有属性计算得来。 2. 原理 底层借助了objcet.defineproperty方法提供的getter fllsetter. 3. get两数什么时候执行? (1),初次读取时会执行一次。 (2),当依赖的数据发生改变时会被再次调用。 4. 优势 与methods实现相比,内部有缓存机…

进厂手册:Git 学习笔记(详解命令)

文章目录git 对象通过git对象进行文件的保存git对象的缺点树对象构建树对象提交对象高层命令工作区的文件状态git reset hard 咋用以及用错了怎么恢复git checkout vs git resetGit存储后悔药工作区暂存区版本库reset三部曲checkout深入理解tag远程上的相关操作ssh登入一些个人…

[附源码]计算机毕业设计家庭整理服务管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode刷题复盘笔记—一文搞懂动态规划之213. 打家劫舍 II问题(动态规划系列第十八篇)

今日主要总结一下动态规划完全背包的一道题目,213. 打家劫舍 II 题目:213. 打家劫舍 II Leetcode题目地址 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一…

快速排序详解

快速排序,简称快排。其实看快速排序的名字就知道它肯定是一个很牛的排序,C语言中的qsort和C中的sort底层都是快排。 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法…

Opencv 基本操作五 各种连通域处理方法

在深度学习中,尤其是语义分割模型部署的结果后处理中,离不开各类形态学处理方法,其中以连通域处理为主;同时在一些传统的图像处理算法中,也需要一些形态学、连通域处理方法。为此,整理了一些常用的连通域处…

leetcode每日一题寒假版:1691. 堆叠长方体的最大高度 (hard)( 换了皮的最长递增子序列)

2022-12-10 1691. 堆叠长方体的最大高度 (hard) 🚩 学如逆水行舟,不进则退。 —— 《增广贤文》 题目描述: 给你 n 个长方体 cuboids ,其中第 i 个长方体的长宽高表示为 cuboids[i] [width(i), length(i), height(i)]&#xf…

Docker补充知识点--自定义网络实现直连容器

前面介绍docker镜像的秘密这篇知识点的时候,https://blog.csdn.net/dudadudadd/article/details/128200522,提到了docker容器也有属于自己的IP的概念,默认的Docker容器是采用的是bridge网络模式。并且提到了一嘴自定义网卡配置,本…

java基于Springboot的健身房课程预约平台-计算机毕业设计

项目介绍 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 本健身网站系统是针…

Unity纹理优化:缩小包体

Android打包apk大小约:475M 查看打包日志:Console→Open Editor Log; 或者依赖第三方插件:build reports tool(在unity store里可以下载); 定位问题 经过排查后,发现项目中纹理占比很高&#…

分布式能源的不确定性——风速测试(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

(6)Pytorch数据处理

Pytorch 数据处理 要点总结 1、功能 Dataset:准备数据集,一般会针对自己的数据集格式重写Dataset,定义数据输入输出格式 Dataloader:用于加载数据,通常不用改这部分内容 2、看代码时请关注 Dataloader中collate_fn 传入…

【云原生】K8s Ingress rewrite与TCP四层转发讲解与实战操作

文章目录一、背景二、K8s Ingress安装三、K8s Ingress rewrite 讲解与使用1)配置说明2)示例演示1、部署应用2、配置ingress rewrite转发(http)3、配置ingress rewrite转发(https)【1】创建证书(…

音视频- iOS图像采集

本文主要总结一下,如何使用AVFoundation的功能来实现图像的采集,主要用到了AVFoundation中的一些类,采集的结构如下图,引用自iOS开发者官网: AVCaptureSession 采集会话,其主要功能从整体上来掌管图像采集的…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(五)交流耦合栅极驱动电路

交流耦合栅极驱动电路 1.计算耦合电容 2.耦合电容器的启动瞬变 3.总结 栅极驱动路径中的交流耦合可为栅极驱动信号提供简单的电平位移。交流耦合的主要作用是修改主MOSFET 的开通和关断栅极电压,而高侧栅极驱动则不同,它最需要关注的是缩小较大的电势差…

软件安全测试-web安全测试基础

目录 1. Web安全的测试范围 2.Web安全的四要素 3. Web安全的分类 4. Web安全的类别排名​ 5. 零时差攻击 6. Web安全的载体 7. 了解软件安全测试相关的Cooike,Session,Token 7.1 会话级鉴权及认证技术 7.2 会话安全管理需要授权和鉴权两个步骤 …

单例模式(史上最全)

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

0121 动态规划 Day10

剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。…

Python——翻转字符串

题目介绍 以空格为分割,将字符串中的每个单词的字母位置不变,单词顺序从后往前翻转 例如:I am a student. 变成:student. a am I Python中的标准库是为了提高程序员开发效率,减少学习成本,而设计的一系列方…