维c精华推荐:推荐用于简单一维场景的异常检测技术

我有一个场景,我有几千个数据实例。数据本身表示为单个整数值。我希望能够检测到实例何时是极端离群值。

例如,使用以下示例数据:

a = 10
b = 14
c = 25
d = 467
e = 12

d显然是一个异常,我想在此基础上执行一个特定的操作。

我很想尝试使用我对特定领域的知识来检测异常。例如,找出与平均值的距离是有用的,并根据启发式方法进行检查。但是,我认为如果我研究更通用,更强大的异常检测技术可能会更好,这些技术背后有一些理论。

由于我的数学工作知识有限,我希望找到一种简单的技术,例如使用标准偏差。希望数据的单维性质将使这是一个很常见的问题,但如果需要更多的信息,请发表评论,我会提供更多信息。

编辑:我想我会添加更多关于数据的信息,以及我所尝试的内容,以防它使一个答案比另一个更正确。

这些值都是正的和非零的。我预计这些值将形成正态分布。这种期望是基于域的直觉而不是通过分析,如果这不是一件坏事,请让我知道。在聚类方面,除非也有标准算法来选择 k 值,否则我很难将该值提供给 k-Means 算法。

我想为离群值 / 异常采取的行动是将其呈现给用户,并建议数据点基本上从数据集中删除(我不会进入他们将如何做到这一点,但这对我的领域是有意义的),因此它不会被用作另一个函数的输入。

到目前为止,我已经尝试了三西格玛,并在我有限的数据集上进行了 IQR 异常值测试。IQR 标志值不够极端,三西格玛指出了更符合我的领域直觉的实例。

有关算法,技术或资源链接以了解此特定场景的信息是有效且受欢迎的答案。

对于简单的一维数据,推荐的异常检测技术是什么?

48

查看three-sigma rule

mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

另一种方法是IQR outlier test

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN  x is a mild outlier
IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN  x is an extreme outlier

此测试通常由Box plots(由晶须表示)采用:

boxplot

EDIT:

对于您的情况(简单的 1D 单变量数据),我认为我的第一个答案非常适合。

@smaclell建议使用 K-means 来查找离群值。除了它主要是一种聚类算法(实际上不是一种离群值检测技术)之外,k-means 的问题在于它需要事先知道聚类数量 K 的良好值。

更适合的技术是DBSCAN:基于密度的聚类算法。基本上,它将具有足够高密度的区域扩展为簇,这将是密度连接点的最大集合。

dbscan_cering

DBSCAN 需要两个参数:epsilonminPoints。它从一个未被访问的任意点开始。然后,它找到起始点距离epsilon内的所有相邻点。

如果邻居数大于或等于minPoints,则形成一个簇。起点及其邻居被添加到该簇中,起点被标记为已访问。然后,该算法递归地对所有邻居重复评估过程。

如果邻居的数量小于minPoints,则将该点标记为噪声

如果集群被完全扩展 (到达范围内的所有点都被访问),则算法继续迭代通过剩余的未访问点,直到它们被耗尽。

最后,被标记为噪声的所有点的集合被认为是异常值

2

您可以使用多种聚类技术来尝试识别数据中的中心趋势。我们在模式识别课程中大量使用的一种算法是K-Means。这将使您能够识别是否有多个相关的数据集,例如bimodal distribution。这确实需要您了解期望有多少个集群,但是相当有效且易于实现。

在你有了手段之后,你可以尝试找出任何一点是否远离任何手段。你可以定义“远”,但我建议 @ Amro 的建议作为一个很好的起点。

有关聚类算法的更深入讨论,请参阅聚类条目。

0

经常使用三西格玛规则和 IQR 测试,并且有几种简单的算法来检测异常。

The three-sigma rule is correct
mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

IQR 测试应为:

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
If x >  Q75  + 1.5 * IQR or  x   < Q25 - 1.5 * IQR THEN  x is a mild outlier
If x >  Q75  + 3.0 * IQR or  x   < Q25 – 3.0 * IQR THEN  x is a extreme outlier
0

这是一个老话题,但仍然缺乏一些信息。

显然,这可以看作是单变量异常值检测的情况。上面介绍的方法有几个优点和缺点。这里有一些弱点:

用均值和西格玛检测异常值具有明显的缺点,即均值和西格玛依赖于异常值本身。

The case of the small sample limit (see question for example) is not adequately covered by,3 sigma,K-Means,IQR etc.And I could go on...However the statistical literature offers a simple metric:the median absolute deviation.(Medians are in

我认为这个问题可以在几行 python 代码中解决,如下所示:

import numpy as np
import scipy.stats as sts
x = np.array([10, 14, 25, 467, 12]) # your values
np.abs(x - np.median(x))/(sts.median_abs_deviation(x)/0.6745) #MAD criterion

随后,您拒绝高于某个阈值(数据分布的 97.5 个百分点)的值,在假设正态分布的情况下,阈值为 2.24。

array([ 0.6745  ,  0.      ,  1.854875, 76.387125,  0.33725 ])

或者被拒绝的 467 条。

当然,有人可能会争辩说,MAD(如所示)也假设一个正常的 dist。因此,为什么上面的参数 2(小样本)在这里不适用?答案是 MAD 具有很高的分解点。很容易从不同的分布中选择不同的阈值点,并得出相同的结论:467 是异常值。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(347)
Chun a i:python:在列表中为i打印i
上一篇
Linux查看cpu实时频率的命令:linux:不能用cpupower设置cpu频率调节器 (ACPI故障)
下一篇

相关推荐

  • cvt变速箱结构图解:CVT变速箱的工作原理

    CVT变速箱是一种无级变速箱,它的结构由两个部分组成:输入轴和输出轴。输入轴由发动机驱动,输出轴将变速箱的输出转移到车轮上。输入轴上安装有一个可变的滑轮,它可以改变输入轴的传动比,从而改变变速箱的输出比。另外,输入轴上还安装有一个液压系统,它可以控制滑轮的位置,从而改变输入轴的传动比。…

    2023-04-02 04:00:04
    0 35 92
  • xcode代码格式化快捷键:使用Command + I快速格式化Xcode代码

    格式化的方法格式化的方法Xcode代码格式化快捷键:Option+Command+F…

    2023-07-13 12:44:06
    0 35 57
  • cv树洞柒夜事件CV树洞中的秘密与惊奇

    cv树洞柒夜事件是一个有趣的计算机视觉活动,它提供了一种新的方式来利用计算机视觉技术来探索和发现景观。它始于2020年7月,由一群热爱计算机视觉的研究者和开发者发起,他们希望通过使用机器学习技术来探索景观中的精彩之处。cv树洞柒夜事件的目标是使用机器学习技术来探索景观中的精彩之处,并利用这些发现来改善景观设计。参与者需要使用机器学习技术来探索景观,并利用这些发现来改善景观设计。参与者可以使用Python,OpenCV,TensorFlow等技术来完成任务,并将其发布在GitHub上。…

    2023-01-09 12:42:42
    0 27 30
  • win10怎么cmd打开设置:如何在Windows 10中使用CMD打开设置

    打开“开始”菜单,点击搜索框,输入cmd,然后按下回车键。在弹出的命令提示符窗口中,输入以下代码:start ms-:…

    2023-06-07 01:59:36
    0 17 42
  • win7安装cad2020:如何在Windows 7上安装AutoCAD 2020

    从官网下载CAD 2020的安装包,并双击安装文件;按照安装向导的提示,选择安装语言、安装位置和安装类型;…

    2023-09-28 00:41:59
    0 63 23
  • java protected关键字:使用protected关键字保护类成员的优点

    示例示例关键字是java中的修饰符,它可以修饰类、变量和方法。修饰类:修饰的类只能在同一个包内被访问,如果子类继承了修饰的父类,则子类可以在不同包内访问父类的成员。…

    2023-04-18 04:45:37
    0 82 66
  • codeblocks手机版下载一款强大的跨平台编程工具

    CodeBlocks是一款免费的、开源的、跨平台的C/C++ IDE,支持多种编程语言,可以用来编写、调试和编译代码。目前CodeBlocks的手机版本只支持Android系统,而且只支持C语言,不支持C++。…

    2023-06-25 04:48:50
    0 17 30
  • go和come的区别:去吧!来吧!改变你的未来

    示例示例go和come的区别:Go是一个动词,表示“去”的意思,指的是从一个地方到另一个地方的运动。Come是一个动词,表示“来”的意思,指的是从另一个地方到当前地方的运动。…

    2023-05-25 16:09:00
    0 12 65

发表评论

登录 后才能评论

评论列表(73条)