快捷搜索:  汽车  科技

异常值识别标准:5种检测异常值方法含代码分享

异常值识别标准:5种检测异常值方法含代码分享上面的代码输出如下的箱线图。如你所见,它把大于75或小于-35的值看作异常值。这个结果非常接近上述的方法1得到的结果。箱线图是指通过分位数对数值型数据的图形化描述。这是一种非常简单但有效的异常值可视化方法。把上下须触线看作数据分布的上下边界。任何出现在下须触线下面或上须触线上面的数据点可以被看作异常值。下面是绘制箱线图的代码:因此,如果你有任何出现在三个标准差范围外的数据点,那么那些点就极有可能是异常值。让我们看看代码。这段代码的输出结果是一个大于80或小于-40的数据列表。请注意,我传入的数据集是一个一维数据集。现在,让我们探索对于多维数据集的更高级的方法。

异常值是指不属于某一特定群体的数据点。它是一个与其他数值大不相同的异常观测值,与良好构成的数据组相背离。当你有成千上万的观测值或者是多维度时,你将需要更多巧妙的办法来检测出那些异常值。

异常值识别标准:5种检测异常值方法含代码分享(1)

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

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

标准差

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

异常值识别标准:5种检测异常值方法含代码分享(2)

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

让我们看看代码。

异常值识别标准:5种检测异常值方法含代码分享(3)

异常值识别标准:5种检测异常值方法含代码分享(4)

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

箱线图

异常值识别标准:5种检测异常值方法含代码分享(5)

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

异常值识别标准:5种检测异常值方法含代码分享(6)

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

异常值识别标准:5种检测异常值方法含代码分享(7)

箱线图分解:

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

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

异常值识别标准:5种检测异常值方法含代码分享(8)

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

异常值识别标准:5种检测异常值方法含代码分享(9)

DBScan集群

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

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

异常值识别标准:5种检测异常值方法含代码分享(10)

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

异常值识别标准:5种检测异常值方法含代码分享(11)

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

孤立森林

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

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

异常值识别标准:5种检测异常值方法含代码分享(12)

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

Robust Random Cut Forest

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

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


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

文章部分素材来源:大数据文摘

猜您喜欢: