最常用的异常检测方法

简介: 最常用的异常检测方法

1.什么是异常/异常值


2dfc6cd081824faaaf2969616db55722.png

在统计学中,离群值是不属于某个总体的数据点,它是一种与其他值相差甚远的异常观察,是一种与其他结构良好的数据不同的观察值。


例如,您可以清楚地看到列表中的异常值:[20,24,22,19,29,184300,30,18]当观察值只是一组数字并且是一维时,很容易识别它,但是当你有数千个观察值或多维值时,你需要更聪明的方法来检测这些值。


2.异常值的作用


离群点的检测是数据挖掘的核心问题之一。数据的不断扩展和持续增长以及物联网设备的普及,使我们重新思考我们处理异常的方式,以及通过观察这些异常情况可以构建的用例。


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


我们需要检测异常的另一个原因是,在为机器学习模型准备数据集时,检测所有异常值非常重要,要么去掉它们,要么分析它们,以了解为什么会有异常。

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


3.异常值检测方法


3.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 deviation
    random_data_std=std(random_data)
    random_data_mean=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
    print(lower_limit)
    #Generate outliers
    for outlier in random_data:
        if outlier > upper_limit or outlier <lower_limit:
    return anomalies


3.2 箱体图


箱体图是通过分位数对数值数据的图形化描述。这是一种非常简单但有效的方法来可视化异常值。把上下胡须(whisker)看作是数据分布的边界。任何显示在胡须上方或下方的数据点都可以被视为异常值或异常值。下面是绘制箱体图的代码:


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


上面的代码显示下面的图。如您所见,它认为高于75或低于-35的所有数据都是异常值。结果与上述方法1非常接近。

箱体图解析


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


简单地说,根据数据的值以及它们与整个数据集的比较,任何数据集或任何一组观测值被划分为四个定义的区间。四分位数将数据分为三个点和四个区间。


90c0b092dda04c5483188be931d571cc.png

四分位间距(IQR)很重要,因为它用于定义异常值。它是第三个四分位数和第一个四分位数之间的差值(IQR=Q3-Q1)。这种情况下的异常值定义为低于(Q1−1.5x IQR)或boxplot下须或以上(Q3+1.5x IQR)或boxplot上须的观测值。

609980db719f49d4b498538a23e2b075.png


3.3 DBScan聚类


DBScan是一种将数据分组的聚类算法。它也可以作为一种基于密度的异常检测方法,无论是单维数据还是多维数据。其他的聚类算法,如k-means 和hierarchal聚类也可以用来检测异常值。在本例中,我将向您展示一个使用DBScan的示例,但是在开始之前,让我们先介绍一些重要的概念。DBScan有三个重要概念:


核心点:为了理解核心点的概念,我们需要关注一些用于定义DBScan作业的超参数。第一个超参数(HP)是min_samples。这只是组成集群所需的最小核心点数量。第二重要的超参数HP是eps。eps是两个样本被视为在同一个聚类之间的最大距离。

边界点与核心点在同一个集群中,但距离集群中心远得多。


dfbc01443d6447ab80f86cd6e0174ccd.png

其他的一切都被称为噪声点,那些是不属于任何簇的数据点。它们可以是异常的或非异常的,需要进一步的研究。现在,让我们看看代码。


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


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


3.4 孤立森林


孤立森林是一种无监督学习算法,属于集成决策树家族。这种方法不同于以往的所有方法。之前所有的方法都是试图找到数据的正常区域,然后识别出这个定义区域之外的任何异常值或异常值。


这种方法的效果不同。它显式地隔离异常值,而不是通过为每个数据点分配分数来分析和构造正常点和区域。它利用了一个事实,即异常是少数数据点,并且它们的属性值与正常实例的属性值大不相同。该算法适用于高维数据集,是一种非常有效的异常检测方法。由于本文关注的是实现,而不是技术诀窍,因此我将不再进一步讨论算法的工作原理。此文将详细介绍它的工作原理。

现在,让我们探索一下代码:


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


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


3.5 随机森林


随机森林(RCF)算法是亚马逊用于检测异常的无监督算法。它也通过关联异常分数来工作。低分值表示数据点被视为“正常”。高值表示数据中存在异常。“低”和“高”的定义取决于应用,但通常的做法是,分数超过平均分的三个标准差被视为异常。

相关文章
|
7月前
|
机器学习/深度学习 运维 算法
大模型开发:描述一种用于异常检测的技术或算法。
LOF算法是一种无监督异常检测技术,通过比较数据点局部密度识别离群点。它计算每个点的局部离群因子得分,得分高则异常可能性大。主要步骤包括:距离度量、k近邻搜索、计算局部可达密度和LOF得分,然后设定阈值识别异常点。适用于入侵检测、故障检测等场景,Python中可使用scikit-learn库实现。
101 1
|
6月前
|
运维 算法 安全
异常检测算法及其在安全领域的应用
【6月更文挑战第4天】在数字化时代,数据安全至关重要,异常检测算法扮演着守护者角色。它能自动学习正常行为模式,及时发现网络攻击和欺诈行为。非监督式异常检测算法尤其重要,如基于距离的方法,通过计算数据点间距离识别偏离常规的点。Python的scikit-learn库可实现这一算法。异常检测不仅应用于金融领域的欺诈检测,还广泛用于工业监控、医疗诊断和社交媒体分析,为多领域数据安全提供保障。随着技术进步,异常检测将更智能、高效,成为数据安全的重要防线。
172 2
|
4月前
|
机器学习/深度学习 运维 算法
基于距离度量学习的异常检测:一种通过相关距离度量的异常检测方法
异常是数据集中显著偏离多数观察值的记录。例如,在由多个紧密簇构成的数据集中,远离这些簇的孤立点常被视为异常。检测这类异常的传统方法依赖于距离度量,如欧几里得距离或Gower距离,但这些方法可能无法妥善处理特征间的复杂关系或权重问题。为此,本文介绍了一种基于距离度量学习的方法,特别是利用随机森林来评估记录间的相似性。此方法通过构建能够区分真实数据与合成数据的随机森林模型,进而依据记录在树结构中的路径一致性来衡量其相似度。异常记录往往会在多数树中到达较少记录所在的叶节点。
58 1
基于距离度量学习的异常检测:一种通过相关距离度量的异常检测方法
|
5月前
|
机器学习/深度学习 运维 数据挖掘
无监督学习在异常检测中的应用
【7月更文挑战第14天】无监督学习在异常检测中的应用具有重要意义,其可以帮助我们发现数据中的潜在异常模式,提高异常检测的效率和准确性。通过不断的研究和探索,我们可以进一步完善无监督学习方法在异常检测中的应用,为实际应用提供更加可靠和有效的解决方案。
|
5月前
|
机器学习/深度学习 运维 算法
Doping:使用精心设计的合成数据测试和评估异常检测器的技术
在这篇文章中,我们将探讨测试和评估异常检测器的问题(这是一个众所周知的难题),并提出了一种解决方案被称为“Doping”方法。使用Doping方法,真实数据行会被(通常是)随机修改,修改的方式是确保它们在某些方面可能成为异常值,这时应该被异常检测器检测到。然后通过评估检测器检测Doping记录的效果来评估这些检测器。
56 0
|
7月前
|
机器学习/深度学习 人工智能
【机器学习】有哪些指标,可以检查回归模型是否良好地拟合了数据?
【5月更文挑战第16天】【机器学习】有哪些指标,可以检查回归模型是否良好地拟合了数据?
|
7月前
|
机器学习/深度学习 运维 算法
【视频】检测异常值的4种方法和R语言时间序列分解异常检测
【视频】检测异常值的4种方法和R语言时间序列分解异常检测
|
7月前
|
运维 算法 C++
时间序列分解和异常检测方法应用案例
时间序列分解和异常检测方法应用案例
|
7月前
|
运维 算法 C++
R语言时间序列分解和异常检测方法应用案例
R语言时间序列分解和异常检测方法应用案例
|
7月前
|
数据采集 机器学习/深度学习 算法
【机器学习】数据清洗之识别异常点
【机器学习】数据清洗之识别异常点
328 1