导航菜单

学会五种常用异常值检测方法,亡羊补牢不如积谷防饥

美高梅澳门娱乐

学习五种常见的异常值检测方法,修复饥饿比防止饥饿更好。

从awardsdatacience中选出

作者:Will Badr

机器的核心编译

参与:韩芳,拍摄

通过识别故障来检测异常对任何企业都很重要。作者总结了五种检测异常的方法。我们来看看吧。

什么是异常/异常值?

ae7ecba7ca6049b19f88cd6372120c89.jpeg

在统计学中,异常值是不属于特定组的数据点,并且是与其他值相差很远的异常观察。异常值是一种与其他结构良好的数据不同的观察结果。

例如,您可以清楚地看到此列表中的异常值:[20,24,22,19,29,18,* 4300 *,30,18]

当观察是一堆数字并且是一维的时,很容易识别异常值,但如果有数千个观察或数据是多维的,您可能需要一种更智能的方法来检测这些异常值。

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

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

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

我们需要检测异常的另一个原因是,在为机器学习模型准备数据集时,重要的是检测所有异常值并解决它们,或者第一次找出存在这些异常值的原因。

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

方法1 - 均方误差

在统计中,如果数据分布近似正常,那么大约68%的数据将在平均值的一个标准差内,约95%将在两个标准偏差内,并且约99.7%将在三个标准内。区别之内。

b5a116cd76674213b6215eff45334bfa.jpeg

因此,如果您的任何数据点超过标准偏差的三倍,则这些点很可能是异常值或异常值。

Importnumpy asnp

Importmatplotlib.pyplot asplt

种子(1)

异常=[]

#乘以并通过随机数添加以获得一些实际值

数据=np.random.randn(50000)* 20+ 20

#在一维数据集上检测异常值的功能。

Deffind_anomalies(random_data):

#设置上限和下限为3标准差

Random_data_std=STD(random_data)

Random_data_mean=平均值(random_data)

Anomaly_cut_off=random_data_std * 3

Lower_limit=random_data_mean - anomaly_cut_off

Upper_limit=random_data_mean + anomaly_cut_off

打印(LOWER_LIMIT)

#生成异常值

Foroutlier inrandom_data:

如果有的话> upper_limit oroutlier< lower_limit:

Anomalies.append(离群值)

Returnanomalies

Find_anomalies(数据)

此代码的输出是一组大于80或小于-40的值。请注意,输入的数据集是一维的。接下来,我们将探讨一些更高级的多维数据集方法。

方法2 - 框图

e4304664a68648d59fd317f2d07d9918.png

箱形图是由其四分位数形成的数字数据的图形描绘。这是一种非常简单但有效的可视化异常值的方法。将上触角和下触角视为数据分布的边界。低于晶须的任何数据点可被视为异常值或异常值。以下是绘制方块图的代码:

Importseaborn assns

Importmatplotlib.pyplot asplt

Sns.boxplot(data=random_data)

上面的代码绘制了以下图像。如您所见,任何高于75或低于-35的点都被视为异常值。结果非常接近上面的方法1。

38ec94d53c1549e8b8bbb0ec91b817e5.png

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

简单来说,任何数据集或任何观察集都可以根据数据的值和它们与整个数据集的比较分为四个定义的间隔。四分位数将数据分为三个点和四个区间。

四分位数范围对于定义异常值非常重要。它是第三个四分位数和第一个四分位数之间的差异(IQR=Q3 -Q1)。在这种情况下,异常值被定义为低于触角的观测值(或Q1?1.5x IQR)或高于框图上的触手(或Q3 + 1.5x IQR)。

093fb8dd579e425a9d3332a7a1313844.jpeg

维基百科

beb03492e5fa43dc87d46898663b6ca6.jpeg

方法3-DBScan聚类

DBScan是一种用于将数据分组的聚类算法。它还用于单维或多维数据中基于密度的异常检测。其他聚类算法(例如k均值和分层聚类)也可用于检测异常值。在这种情况下,作者将显示使用DBScan的示例。在开始之前,您需要了解一些重要的概念:

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

边界点与核心点位于同一个集群中,但前者远离集群中心。

9b934c86bced4c98b58f2b1a0faf06a5.jpeg

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

任何其他点称为噪声点,它们是不属于任何群集的数据点。它们可能是异常的或非异常的,需要进一步研究。

上述代码的输出为94.这是噪声点的总数。 SKLearn标记噪声点为-1。该方法的缺点是尺寸越大,精度越低。您还需要做出一些假设,例如估计eps的正确值,这可能是一个挑战。

从sklearn.cluster导入DBSCAN

种子(1)

Random_data=np.random.randn(50000,2)* 20 + 20

Outlier_detection=DBSCAN(min_samples=2,eps=3)

簇=outlier_detection.fit_predict(random_data)

列表(簇状物).Count之间的(-1)

方法4 - 孤立森林

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

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

该算法适用于高维数据集,并且已被证明是检测异常的非常有效的方法。由于本文侧重于实现而非理论,因此作者不打算进一步讨论算法的工作原理。然而,周志华的论文《Isolation Forest》涵盖了它的工作原理的所有细节。

从sklearn.ensemble导入IsolationForest

将numpy导入为np

Np.random.seed(1)

Random_data=np.random.randn(50000,2)* 20 + 20

Clf=IsolationForest(限制='新',max_samples=100,random_state=1,污染='自动')

Preds=clf.fit_predict(random_data)

Predsfrom sklearn.ensemble导入IsolationForest

将numpy导入为np

Np.random.seed(1)

Random_data=np.random.randn(50000,2)* 20 + 20

Clf=IsolationForest(限制='新',max_samples=100,random_state=1,污染='自动')

Preds=clf.fit_predict(random_data)

Preds

该代码输出序列中每个数据点的预测结果。如果结果为-1,则此特定数据点是异常值。如果为1,则表示数据点不是异常值。

方法5-鲁棒随机砍伐森林

随机砍伐森林(RCF)算法是亚马逊用于异常检测的无监督算法。它还可以通过关联异常分数来工作。较低得分值表示数据点正常,较高得分值表示数据存在异常。

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

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

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

https://youtu.be/yx1vf3uapX8

本文提供了与孤立森林相比的一些性能基准。这项研究的结果表明,RCF比孤立的森林更准确,更快。

3b4e6c0712e7401e884ecacf8030c8e8.jpeg

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

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

结论

我们生活的世界中的数据每秒都在增长。如果使用不正确,数据将随着时间的推移而降低。查找在线或离线数据集中的异常情况识别业务中的问题,主动构建解决方案以在问题发生之前发现问题,甚至在探索性数据分析(EDA)阶段为ML准备数据集至关重要。

,查看更多