使用Python+Pycaret进行异常检测

📅 发布时间:2026/9/2 16:43:00
使用Python+Pycaret进行异常检测
以发现数据里的模式、偏差以及异常为目的的异常检测, 其所提供的途径里, 这些模式、偏差和异常可不是局限于模型的标准行为范围之内的。随着数据呈现出指数级增长的态势, 对数据展开分析, 进而得出能够作为形成重要业务决策基础的见解, 这已然成为一种普遍存在的趋势。我们不但需要对数据进行分析, 而且还得准确地去解释数据。识别出异常, 并且确定异常行为, 如此一来能够让我们寻觅到最佳的解决方案。概述介绍异常检测可以应用于各种领域。下面列出了其中一些。为什么是 它属于一个具备开源特性、低代码特点的机器学习库, 该库能够支持多种功能, 比如说存在这样一种情况, 即在仅仅几行代码之中, 就能够帮助为部署建模而进行数据准备。提供了一些的功能包括学习目标安装在你的 中安装最新版本的 并开始使用pip3 install pycaret导入必要的库首先导入整个项目所需的必要库。import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np导入数据集from pycaret.datasets import get_data all_datasets get_data(‘index’)现在我们可以看到所有列出的具有默认机器学习任务的数据集。我们只需要访问通过()函数可以获得的异常数据。df get_data(‘anomaly’) df.head()探索和描述此数据集以查找缺失值并获得统计分布。df.describe() df.info()探索性异常检测分析此刻, 我们能够运用各类可视化方式, 对数据集中的异常值以及异常予以阐释。Swarm 图使用melt()函数获取数据集的Swarm图。plt.rcParams[figure.figsize] (10,8) sns.swarmplot(xvariable, yvalue, datapd.melt(df)) plt.show()这是我们所有列的Swarm图箱形图经由箱形图将数据集进行可视化呈现, 此情形使得我们清晰确切地知晓所占据数据比例较大部分所处的具体位置。sns.boxplot(xvariable, yvalue, datapd.melt(df)) plt.show()这些图将帮助我们感知我们的模型是否能够跟踪它们。散点图两个特征之间存在的一种关系体是线性关系, 凭借散点图我们能够加以确定。Col1与Col2之间的这样一种关系在此处有着明确的定义。sns.scatterplot(datadf, xCol1, yCol2)我们也可以尝试不同的特征。探索各种特征如何相互关联。sns.scatterplot(datadf, xCol3, yCol4)这些图所呈现出来的是, 数据相互之间不存在线性关系。当下, 让我们借助成对这种方式, 去剖析全部特征相互之间的关系。sns.pairplot(df)该图为成对状态, 其确定了不同列之间存在的关系, 还明确了这些关系与直方图共同作用时, 是以多种方式来区分值的。通过这种方式我们可以为我们的模型解释多个维度的边界。df1 df.melt(‘Col1’, var_name’cols’, value_name’vals’) g sns.factorplot(x”Col1, y”vals”, hue’cols’, datadf1)异常检测给异常检测去设置环境, 为达成此目的, 我们能够运用的异常检测模块它属于无监督的机器学习模块, 其作用是用以识别数据当中有可能致使异常情况出现的异常值。from pycaret.anomaly import * setup setup(df, session_id 123)规定会话标识号, 这致使执行完毕时开展处理, 它会自行阐释多种类别的变量, 还准许我们借由按下回车键予以确认, 留意我们的数据集由十个特征构成, 每个特征有一千行, 我们能够施行各类插补——数字与分类的或是归一化数据, 然而我们无需在我们的数据集中开展这般的转换, 所以让我们接着进行模型创建要从模型库里头挑选出最佳的模型, 进而创建能够用于异常检测的那个模型咱可以借助**model()**函数去展示出模型的列表。models()有许多流行的算法被列出, 我们并是可以看到的, 比如说隔离出森林的算法, 还有k最近邻着的这样的算法。隔离森林运用()函数打造隔离森林模型, 隔离森林算法借由随机挑出一个特征, 接着随机选取最大值与最小值之间的分割值用以区分观察。iforest create_model(iforest) print(iforest)因此异常分数被确定为分离给定观察所需的条件数量。局部异常因子有这样一种算法, 用它来进行相应计算, 它属于无监督异常检测方法, 计算的是数据点和其邻居相比的局部密度偏差。lof create_model(lof) print(lof)K最近邻KNN属于一种非参数的、惰性的学习算法, 它能够依据相似性以及各种各样的距离度量, 针对数据开展分类事宜, 为此它提供了一种简便而行之可靠的办法, 用以检测异常情形。knn create_model(knn) print(knn)neighbours比较模型中的异常延续我们的任务, 此刻我们能够观察由模型判定的异常情形。以往, 我们得手动去把不同的参数予以设定。但借助运用此方式, 我们能够经由分配好的模型函数将结果进行分配。我们刚开始会从隔离森林模型着手。iforest_results assign_model(iforest) iforest_results.head()函数返回这样的数据帧, 它用于检测异常, 异常值存在时被标记为1, 非异常值被标记为0, 并且还有异常分数。同样我们也可以分配其他模型。所以可以进行比较。lof_results assign_model(lof) lof_results.head()与上述模型作比较, 我们能够看到, 隔离森林已把第二行当作异常, 然而局部异常因子却未曾将其视作异常。不过不同算法所得的异常得分存在差异。对于多个最近相邻中的 k 个, 预测分数跟隔离森林的预测分数极具相似性。knn_results assign_model(knn) knn_results.head()参照每个模型来过滤异常, 这意味着, 模型把1000行当中的50行认定为异常。标点符号。iforest_anomalyiforest_results[iforest_results[Anomaly]1] iforest_anomaly.shape相同地, 对LOF以及KNN展开检查, 我们能够看到, 它们均对50个异常予以了考虑。查找异常值时, 必须运用不一样的计算方法。lof_anomalylof_results[lof_results[Anomaly]1] lof_anomaly.shapeknn_anomalyknn_results[knn_results[Anomaly]1] knn_anomaly.shape基于上述结果, 我们能够得出这样的结论, 那就是在1000个异常当中, 最具可能性的数量是50个。有一种用于验证的方法, 是对它们之中的每一个展开分析, 去考量哪一个更适宜针对模型标记为离群值的数据来开展分析, 还要比较它们对于测试数据会产生怎样的影响, 或者展开一系列分析, 瞧瞧它们是不是处于决策边界之内。解释和可视化可视化是解释手头信息的最便捷方式, 其是以创造性且独立的模样呈现。我们首先于库之外创建视觉效果, 这么做会突出库的益处, 还能够让我们明白函数怎样更具交互性。from yellowbrick.features import Manifold dfr iforest_results[Anomaly] viz Manifold(manifoldtsne) viz.fit_transform(df, dfr) viz.show()我们能够见到, 隔离森林于多个维度里所确定的大部分异常一般来源于各异的集群, 此刻在中KNN运用( )函数, 该函数会为异常值打造一个3D图, 在这个3D图当中我们能够看到为何某些特征会被视作异常。plot_model(knn)在任何维度之中, 我们能够移动它, 从而进行查看以及指出异常, 这个3维绘图, 对我们更好地查看它是有所助益的, KNN图表明绝大多数异常值指的是那些并不归属于任何集群的异常值, 也因此这是挺好的, 其他两种模型, 同样能够如此而为。plot_model(iforest)很显然, 数据集被划分成了四个不一样的集群, 因而这些组以外的任何事物都必定是异常的。异常并非一直都是不祥之兆, 有的时候, 它们于阐释结果或者数据剖析层面极为有用, 而且这些能够用来处理各异的数据科学应用情形。紧接着的是第三种模式, 线性离群因子, 我们能够运用一个不一样的图去进行实验, 进而创造出一个2D图。对于这个二维图, 我们能够将其放大, 以此来查看哪些点会被认定为异常值。能够再度为这个配对图, 构建起另外一种视觉效果, 此时借助异常情况, 去查看哪些点有望被看成异常。sns.pairplot(lof_results, hue Anomaly)最终, 我们能够将模型予以保存。能够保存任意适宜的模型。在此处, 我们把模型保存了。save_model(iforest,IForest_Model)尾注这意味着我们针对异常监测的实操项目收尾了, 我们探讨了 库的应用情形与达成方式, 以及其怎样用于异常监测。 它是快速稳固的机器学习库, 常被数据科学家用以化解繁杂的业务难题。 在构造能部署的模型之际, 可拓展此项目去做更多的试验和探究。