Python中的异常检测算法

2025年1月5日 | 阅读 7 分钟

什么是异常?

异常是指在其他数据集点中 noticed 的数据点,并且在数据中不具有正常行为。这些数据点与数据集的正常行为模式不同。 在某些情况下,数据点及其特征超出了模型的预期模式,从而在数据集中产生了异常。

异常的分类

  • 事件变化:它显示与之前正常行为不同的突然变化。
  • 漂移:它们在很长一段时间内显示出数据缓慢、单向的变化。
  • 异常值:它显示了一个短暂的异常模式,看起来像数据集中非系统性的行为。

Python 中的异常检测

异常检测是一种无监督数据处理技术,有助于从数据集中检测异常。异常检测用于检测欺诈交易、疾病检测等。它还处理具有高类别不平衡的案例研究。有几种技术可以检测异常并帮助构建强大的数据科学模型。

异常检测是识别、过滤或转换来自分析管道的异常的过程。在 Python 中有多种检测异常的方法。我们可以训练机器学习模型来实时检测异常。还可以使用统计方法(如均值、中位数和分位数)来检测异常。数据可视化和探索性数据分析技术也可用于检测异常。

为什么需要异常检测?

异常检测主要用于垃圾邮件检测、欺诈交易等。在现实生活中,异常检测可用于分类任务,尤其是在训练数据具有高类别不平衡的情况下。它还可以用于预测设备故障、检测 IT 故障、DDoS 攻击和云成本管理。

异常检测也用于网络安全,因为它可以评估大量数据流,从而检测流量模式、访问请求的变化等。它还用于构建大多数用于入侵检测系统、防火墙和安全工具的安全应用程序和服务。

用于异常检测的算法和方法

有不同的异常检测算法,包括监督、无监督和半监督算法。

  • 监督算法:这些算法是在标记数据上训练的。它根据与正常数据的偏差来检测异常数据点。
  • 无监督算法:这些算法在未标记数据上训练。它使用统计技术,根据与数据分布的偏差来检测异常数据点。
  • 半监督算法:这些算法共同依赖于监督和无监督学习技术。它在标记和未标记数据上进行训练。

监督异常检测中的算法

  • 支持向量机
  • K-近邻 (k-NN)
  • 随机森林

无监督异常检测中的算法

  • 人工神经网络 (ANNs)
  • 隔离森林
  • 高斯混合模型
  • 基于密度的噪声应用空间聚类 (DBSCAN)

半监督异常检测中的算法

  • 迁移学习
  • 预训练模型

无监督异常检测模型通过计算不同点之间的距离来启动数据的基本分布或轮廓,以检测异常。无监督方法可用于未标记的数据集,这减少了大量训练数据的手动标记。

人工神经网络是无监督异常检测技术中最好的算法之一。我们可以对大量未标记数据训练人工神经网络,以找到复杂的模式来分类异常。它可用于检测图像中的异常。

基于密度的噪声应用空间聚类是无监督异常检测技术中的另一种方法。它学习错误的模式并过度拟合数据中的趋势。它首先以无监督的方式检测异常值。它根据高点密度连续区域形成数据簇。

监督异常检测技术需要具有异常或非正常标签的标记数据。这些情况下的训练更加困难。因此,它使用具有不平衡数据的分类任务。主要目标是对数据进行分类,而不是正确搜索异常数据。仅通过对数据进行分类,我们可以获得 98% 的准确率。通常,监督技术不适用于检测异常,因为它们不会将异常与数据集分开。

用于检测异常的半监督算法使用监督和无监督数据。首先,它将在未标记的数据集上进行训练。然后,将对异常数据进行微调训练好的模型,以检测数据分布中的异常。

让我们详细了解其中一些算法。

1. DBSCAN

基于密度的噪声应用空间聚类是一种聚类机器学习算法,用于在无监督的情况下对正常数据进行聚类并检测异常值。聚类后的数据点基于高密度连续区域来确定形成的簇。使用这种基于密度的聚类方法可以轻松地发现簇,因为异常值存在于任何簇之外。

并非所有点都被分配到簇。DBSCAN 使用两个参数:minPts(集群中使用的最小数据点数)和 eps(集群中需要保留的点的最小距离)。

当没有点可以访问时,算法会随机选择一个新点。它将递归地检查点以查找 eps 距离内的点。当前点在 eps 距离内的点必须属于同一簇。当获得 minPts 个点时,就会形成一个簇。一旦形成簇,就不能添加其他点,然后算法会选择其他随机的未访问点。

实施

DBSCAN 算法随机选择一个点,并沿指定路径递归移动它。它将检查落在最近邻居的 eps 距离内的点。这些点将被分配到同一簇,它将递归地遵循这些步骤并形成不同的簇。当覆盖所有点时,它将定义异常值,包括不属于任何簇的点。

对于异常检测,数据集必须干净,因为距离是算法最重要的方面。Python 在 sklearn 包下提供了实现 DBSCAN 算法的方法。DBSCAN 是 sklearn.cluster 包的一个模块。

在模型拟合和训练模型之后,检测到的异常值和簇存储在 DBSSCAN.labels 中。DBSCAN.core_sample_indices_ 函数返回分配给簇的样本索引。这些函数可以获取拟合数据中剩余的索引和异常值。

2. 支持向量机

它是一种监督机器学习模型,用于分类。通过将数据投影到备用向量空间来创建子平面,从而有效地对数据进行分类。SVM 算法在异常检测方面有两类,它训练模型以最大化向量空间中不同数据组之间的间隔。SVM 也可以使用多类方法。

超出范围的点确定异常。One-class SVM 算法广泛用于检测分布中的异常。它检查数据点是否属于正常类或非二元类。它使用非线性函数,将训练数据投影到更高维空间。超平面可以分隔向量。

Python 在 sklearn 包下提供了实现 SVM 算法的方法。One-class SVM 是 sklearn.svm 包的一个模块。

3. 隔离森林模型

这种用于异常检测的算法使用基于树的方法,通过无监督方法在数据上训练模型来隔离异常。它像随机森林一样随机初始化决策树,并将节点分割成不同的分支。为了检测异常,隔离森林模型需要深入到数据中,因为异常是与整个数据不同的数据点。

它跨所有决策树将异常与数据集隔离。Python 在 sklearn 包下提供了实现 Isolation Forest 算法的方法。隔离森林是 sklearn.ensemble 包的一个模块,称为 IsolationForest()。它包含不同的参数,包括 n_estimator,给出树的数量;max_samples,它构建树;以及重要的 contamination factor,它确定训练数据中异常数据的比例。确定 contamination factor 所需的异常数量很困难。这是该算法的一个主要缺点。

4. 使用自动编码器的异常检测

自动编码器使用半监督方法来检测数据中的异常。自动编码器有许多需要训练的参数,这些参数需要大量数据进行调整。我们需要预训练自动编码器以教会模型了解数据以检测异常。然后,需要使用标记数据对模型进行微调,以训练模型,该模型将在学习后检测数据中的异常或异常情况。

在训练期间,自动编码器将输入数据编码为低维空间。它从数据中提取重要特征,以学习如何转换数据(以最小的错误解码数据)。自动编码器包含两个部分:编码器和解码器,分别负责降维和重构编码数据。