什么是异常/离群点?

在统计学中,离群点是并不属于特定族群的数据点,是与其它值相距甚远的异常观测。离群点是一种与其它结构良好的数据不同的观测值。

例如,你可以很清楚地看到这个列表中的离群点:[20,24,22,19,29,18,*4300*,30,18]

当观测值是一堆数字且都是一维时,辨别离群点很容易,但如果有数以千计的观测值或数据是多维的,你可能会需要更机智的方法来检测这些离群点。

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

检测离群点或异常值是数据挖掘的核心问题之一。数据的爆发和持续增长以及物联网设备的传播,使我们重新思考处理异常的方式以及通过观察这些异常来构建的应用场景。

我们现在可以通过智能手表和手环每几分钟检测一次心率。检测心率数据中的异常可以帮助预测心脏疾病。交通模式中的异常检测可以帮助预测事故。异常检测还可用于识别网络基础设施和服务器间通信的瓶颈。因此,基于异常检测构建的使用场景和解决方案是无限的。

我们需要检测异常的另一个原因是,当为机器学习模型准备数据集时,这一点很重要:检测所有的离群点并解决它们或者第一时间弄清楚为什么会存在这些离群点。

下面,作者将从最简单的方法开始,带领我们探索五种检测异常的常用方法。

方法 1—均方差

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

因此,如果你有任何数据点超过标准差的 3 倍,那么这些点很有可能是异常值或离群点。

下面看一些代码。

import numpy as np
import matplotlib.pyplot as plt
seed(1)
anomalies = []# multiply and add by random numbers to get some real values
data = np.random.randn(50000)  * 20 + 20# Function to Detection Outlier on one-dimentional datasets.
def find_anomalies(random_data):# Set upper and lower limit to 3 standard deviationrandom_data_std = std(random_data)random_data_mean = mean(random_data)anomaly_cut_off = random_data_std * 3lower_limit  = random_data_mean - anomaly_cut_off upper_limit = random_data_mean + anomaly_cut_offprint(lower_limit)# Generate outliersfor outlier in random_data:if outlier > upper_limit or outlier < lower_limit:anomalies.append(outlier)return anomaliesfind_anomalies(data)

这段代码的输出是一组大于 80 或小于-40 的值。注意,输入的数据集是一维的。接下来,我们探索一些用于多维数据集的更先进方法。

方法 2—箱形图

箱形图是数字数据通过其四分位数形成的图形化描述。这是一种非常简单但有效的可视化离群点的方法。考虑把上下触须作为数据分布的边界。任何高于上触须或低于下触须的数据点都可以认为是离群点或异常值。这里是绘制箱形图的代码:

import seaborn as sns
import matplotlib.pyplot as pltsns.boxplot(data=random_data)

上述代码绘制了下图。正如你所看到的,任何高于 75 或低于-35 的点都被认为是离群点。结果和上面方法 1 非常接近。

箱形图剖析:

四分位间距 (IQR) 的概念被用于构建箱形图。IQR 是统计学中的一个概念,通过将数据集分成四分位来衡量统计分散度和数据可变性。

简单来说,任何数据集或任意一组观测值都可以根据数据的值以及它们与整个数据集的比较情况被划分为四个确定的间隔。四分位数会将数据分为三个点和四个区间。

四分位间距对定义离群点非常重要。它是第三个四分位数和第一个四分位数的差 (IQR = Q3 -Q1)。在这种情况下,离群点被定义为低于箱形图下触须(或 Q1 − 1.5x IQR)或高于箱形图上触须(或 Q3 + 1.5x IQR)的观测值。

来源:维基百科

方法 3—DBScan 聚类

DBScan 是一种用于把数据聚成组的聚类算法。它同样也被用于单维或多维数据的基于密度的异常检测。其它聚类算法比如 k 均值和层次聚类也可用于检测离群点。在本例中,作者将展示一个使用 DBScan 的示例。在开始之前,需要先了解一些重要的概念:

核心点:为了理解核心点的概念,我们需要访问一些用于定义 DBScan 任务的超参数。第一个超参数是 min_samples。这只是形成簇所需的最小核心点数量。第二个重要的超参数是 eps。eps 可以视为同一个簇中两个样本之间的最大距离。

边界点与核心点位于同一个簇中,但前者距离簇的中心要远得多。

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

其它任何点都被称作噪声点,它们是不属于任何簇的数据点。它们可能是异常的或非异常的,需要进一步研究。

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

from sklearn.cluster import DBSCAN
seed(1)
random_data = np.random.randn(50000,2)  * 20 + 20outlier_detection = DBSCAN(min_samples = 2, eps = 3)
clusters = outlier_detection.fit_predict(random_data)
list(clusters).count(-1)

方法 4—孤立森林

孤立森林是一种无监督学习算法,属于组合决策树家族。这种方法和以上所有方法都不同。之前的所有方法都在试图寻找数据的常规区域,然后将任何在此定义区域之外的点都视为离群点或异常值。

这种方法的工作方式不同。它明确地隔离异常值, 而不是通过给每个数据点分配一个分数来分析和构造正常的点和区域。它利用了这样一个事实:异常值只是少数,并且它们具有与正常实例非常不同的属性值。

该算法适用于高维数据集,并且被证明是一种非常有效的异常检测方法。由于本文关注的是实现,而不是理论,因此作者不打算进一步讨论算法的工作原理。但是,周志华合著的论文《Isolation Forest》涵盖了其工作方式的全部细节。

from sklearn.ensemble import IsolationForest
import numpy as np
np.random.seed(1)
random_data = np.random.randn(50000,2)  * 20 + 20clf = IsolationForest( behaviour = 'new', max_samples=100, random_state = 1, contamination= 'auto')
preds = clf.fit_predict(random_data)
predsfrom sklearn.ensemble import IsolationForest
import numpy as np
np.random.seed(1)
random_data = np.random.randn(50000,2)  * 20 + 20clf = IsolationForest( behaviour = 'new', max_samples=100, random_state = 1, contamination= 'auto')
preds = clf.fit_predict(random_data)
preds

这段代码会输出序列中每个数据点的预测结果。如果结果是-1,说明这个特定数据点是离群点。如果是 1,就说明该数据点不是离群点。

方法 5—Robust Random Cut Forest

Random Cut Forest (RCF) 算法是亚马逊用于异常检测的无监督算法。它也通过关联异常分数来工作。较低的分数值表示数据点点是正常的,较高的分数值则表示数据中存在异常。

「低」和「高」的定义取决于应用,但一般实践表明,超过平均分三个标准差的分数被认为是异常的。算法的细节可以在论文《Robust Random Cut Forest Based Anomaly Detection On Streams》里找到。

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

作者在下面的视频中更详细地解释了这个概念:

https://youtu.be/yx1vf3uapX8

本文给出了与孤立森林相比的一些性能基准。本文的研究结果表明,RCF 比孤立森林更准确、更快速。

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

https://github.com/awslabs/amazon-sagemaker-examples/tree/master/introduction_to_amazon_algorithms/random_cut_forest

结论

我们生活的世界里数据每秒钟都在增长。如果使用不当,数据会随着时间而贬值。在在线数据流或离线数据集中发现异常对于识别业务中的问题,主动构建解决方案以在问题发生之前发现问题,甚至在探索性数据分析(EDA)阶段为 ML 准备数据集都至关重要。

五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest相关推荐

  1. 五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest)

    https://blog.csdn.net/u013328485/article/details/95043012

  2. 字体设计:五种常用的字体修改方法,让你的文字更好看

    第一:笔画替代法 笔画替换,.以原来文字为基础,用其中的一个笔画或者多个笔画通过其他的方式来进行替换,可以是另字体笔画的嫁接,也可以接触其他的图形的创意表达. 第二:细节添加 根据设计要表达的内容进行 ...

  3. 五种常用异常值检测方法

    Toggle navigation 首页 产业趋势 专家观察 CISO洞察 决策研究 登录 APP下载 数据挖掘最前线:五种常用异常值检测方法 安全运营 机器之心 2019-07-05 通过鉴别故障来 ...

  4. 数据挖掘最前线:五种常用异常值检测方法

    通过鉴别故障来检测异常对任何业务来说都很重要.本文作者总结了五种用于检测异常的方法,下面一起来看看吧. 什么是异常/离群点? 在统计学中,离群点是并不属于特定族群的数据点,是与其它值相距甚远的异常观测 ...

  5. 剔除异常值栅格计算器_基于数据流的异常检测: Random Cut Forest

    一.解决的问题 数据是实时产生的,对数据进行批处理所花费的成本太高了,数据产生的价值被低估 在高维数据下,如何能发现异常的维度? If my time-series data with 30 feat ...

  6. 二极管ss14测量_各种常用二极管的检测方法

    各种常用二极管的检测方法 半导体二极管又称为晶体二极管,具有明显的单向导电性,是各种电器设备 中应用较为广泛的一种半导体元器件,也是日常维修中经常碰到的一种元器件, 常见的有普通二极管.稳压二极管.发 ...

  7. 基于密度的异常值检测方法整理

    基于密度的异常值检测方法的原理认为正常样本点所处的类簇密度要高于异常点样本所处的类簇密度.为解决实际异常值检测情况 中出现的问题,有一种基于局部异常因子 LOF 方法.

  8. springBoot整合rabbitmq并测试五种常用模型

    之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队 ...

  9. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

最新文章

  1. centos6.5 mysql 远程访问_centos6.5 mysql 设置支持远程ip访问
  2. python详细安装教程linux-Python 环境安装步骤
  3. 一个能描述erp系统的小故事。
  4. 锐捷服务器虚拟化技术_数据中心边缘虚拟交换(IEEE 802.1Qbg)技术白皮书
  5. 直播马上开始│走进腾讯云物联网
  6. udp 使用connect优点_nodejs源码分析第十九章 -- udp模块
  7. 服务器向客户机发信息,服务器如何主动给客户端发消息
  8. vim默认设置的配置
  9. Linux下配置服务器节点上的时区
  10. pytorch 神经网络构造
  11. linux 脚本监控程序,用shell脚本实现监控程序自动重启
  12. 手机端自动播放网页背景音乐代码
  13. 游戏图形引擎中 Shader Systen 的设计
  14. RS-485上下拉电阻选择
  15. 计算字符串长度函数大全
  16. 如何优雅地记录操作日志
  17. 爬虫日记之05两种Web请求渲染过程(附图解和网站实例)
  18. 【风宇冲】动画系统Mecanim
  19. matplotlib漫画风格(XKCD)
  20. SpringCloud 之 注册中心

热门文章

  1. 安装window7系统解决不能使用驱动精灵安装声卡驱动问题
  2. 分布式数据库中间件对比总结MyCat Cobar Sharding-jdbc
  3. am3352 lcd显示提前记录
  4. python爬微博数据中心_怎样用python爬新浪微博大V所有数据?
  5. python怎么爬取新浪微博数据中心_基于Python的新浪微博位置数据获取方法研究....
  6. 公司名称备份,我自己做个记录
  7. Midas GTS NX 的四面体模型转为 3DEC的模型 c++源码 (Tetrahedron to 3DEC)
  8. DEC-DA:Deep Embedded Clustering with Data Augmentation
  9. sai球体绘制和上色教程
  10. 职业学校计算机教师培训计划书,学校教师信息技术培训计划方案