广告位联系
返回顶部
分享到

使用Python+Pycaret进行异常检测

python 来源:互联网 作者:秩名 发布时间:2022-03-05 07:48:32 人浏览
摘要

概述 1.通过探索性异常检测分析了解异常 2.设置 PyCaret 环境并尝试准备任务的各种数据 3.比较性能并可视化不同的异常检测算法 介绍 异常检测提供了在数据中发现模式、偏差和异常的

概述

1.通过探索性异常检测分析了解异常

2.设置 PyCaret 环境并尝试准备任务的各种数据

3.比较性能并可视化不同的异常检测算法

介绍

异常检测提供了在数据中发现模式、偏差和异常的途径,这些模式、偏差和异常不限于模型的标准行为。异常检测旨在确定数据中的异常情况。这些异常也被称为数据集的异常值。

随着数据呈指数级增长,分析数据并得出形成重要业务决策基础的见解已成为一种普遍趋势。我们不仅需要分析数据,还需要准确地解释数据。找出异常并确定异常行为可以让我们找到最佳解决方案。

异常检测可以应用于各种领域。下面列出了其中一些。

  • 网络安全 —?监控网络流量并确定异常值
  • 欺诈检测——?可以识别信用卡欺诈
  • IT 部门 —发现并应对意外风险
  • 银行业务——?确定异常交易行为

许多机器学习算法可用于异常检测,它在检测和分类复杂数据集中的异常值方面起着至关重要的作用。

为什么是PyCaret

PyCaret是一个开源、低代码的 Python 机器学习库,支持多种功能,例如在几行代码中就可以为部署建模的数据准备。

PyCaret 提供的一些的功能包括 -

  • 它是一个灵活的低代码库,可以提高生产力,从而节省时间和精力。
  • PyCaret 是一个简单易用的机器学习库,使我们能够在几分钟内执行 ML 任务。
  • PyCaret 库允许自动化机器学习步骤,例如数据转换、准备、超参数调整和标准模型比较。

学习目标

  • 执行探索性异常检测分析
  • PyCaret 环境介绍
  • 创建和选择最佳模型
  • 比较模型中的异常
  • 可视化和解释模型

PyCaret 安装

在你的 jupyter notebook 中安装最新版本的 Pycaret 并开始使用!

1

pip3 install pycaret

数据导入

让我们从 PyCaret 预先配置的数据集中导入一个常见的异常检测数据集,开始我们的动手项目。

导入必要的库

首先,导入整个项目所需的必要库。

1

2

3

4

import matplotlib.pyplot as plt

import seaborn as sns

import pandas as pd

import numpy as np

导入数据集

1

2

from pycaret.datasets import get_data

all_datasets = get_data(‘index')

现在我们可以看到所有列出的具有默认机器学习任务的数据集。

我们只需要访问通过get_data()函数可以获得的异常数据。

1

2

df = get_data(‘anomaly')

df.head()

探索和描述此数据集以查找缺失值并获得统计分布。

1

2

df.describe()

df.info()

我们可以注意到数据集没有任何缺失值。

探索性异常检测分析

现在我们可以使用各种可视化方法来解释数据集中的异常值和异常。

我们可以从 Swarm 图开始

Swarm 图

使用melt()函数获取数据集的Swarm图。

1

2

3

plt.rcParams["figure.figsize"] = (10,8)

sns.swarmplot(x="variable", y="value", data=pd.melt(df))

plt.show()

这是我们所有列的Swarm图

箱形图

通过箱形图可视化数据集,这让我们清楚地了解大部分数据所在的位置。

1

2

sns.boxplot(x="variable", y="value", data=pd.melt(df))

plt.show()

这些图将帮助我们感知我们的模型是否能够跟踪它们。

散点图

我们可以通过散点图确定两个特征之间的线性关系。此处明确定义了Col1和Col2之间的关系。

1

sns.scatterplot(data=df, x="Col1", y='Col2')

我们也可以尝试不同的特征。探索各种特征如何相互关联。

1

sns.scatterplot(data=df, x="Col3", y='Col4')

这些图表明数据之间没有线性关系。现在让我们使用 Seaborn 成对分析所有特征之间的关系。

1

sns.pairplot(df)

该成对图确定了不同列之间的关系以及它们如何与直方图一起以多种方式区分值。

通过这种方式,我们可以为我们的模型解释多个维度的边界。

1

2

df1 = df.melt(‘Col1', var_name='cols', value_name='vals')

g = sns.factorplot(x=”Col1", y=”vals”, hue='cols', data=df1)

异常检测

为异常检测设置 PyCaret 环境。为此,我们可以使用 Pycaret 的异常检测模块,这是一个无监督的机器学习模块,用于识别数据中可能导致异常情况的异常值。

1

2

from pycaret.anomaly import *

setup = setup(df, session_id = 123)

指定会话 id,这会导致执行后进行处理。它会自动解释多种类型的变量,并允许我们通过按ENTER进行确认。

观察我们的数据集由 10 个特征组成,每个特征 1000 行。我们可以执行各种插补——数字和分类或归一化数据。但是我们不需要在我们的数据集中进行这样的转换,所以让我们继续!

用几行代码执行所有这些计算显示了PyCaret库的美妙之处。

模型创建

从模型库中选择最佳模型并创建用于异常检测的模型。我们可以使用model()函数显示模型列表。

1

models()

我们可以看到列出了许多流行的算法,例如隔离森林和 k 最近邻。

隔离森林

使用create_model()函数创建隔离森林模型。隔离森林算法通过随机选择一个特征,然后随机选择最大值和最小值之间的分割值来区分观察。

1

2

iforest = create_model('iforest')

print(iforest)

因此,异常分数被确定为分离给定观察所需的条件数量。

局部异常因子

它是一种无监督异常检测方法的算法,计算数据点相对于其邻居的局部密度偏差。

1

2

lof = create_model('lof')

print(lof)

K最近邻

KNN 是一种非参数惰性学习算法,用于根据相似性和各种距离度量对数据进行分类。它提供了一种简单而可靠的方法来检测异常。

1

2

knn = create_model('knn')

print(knn)neighbours

比较模型中的异常

继续我们的任务,我们现在可以观察模型确定的异常情况。传统上,我们必须手动设置不同的参数。

但是通过使用 PyCaret,我们可以通过分配的模型函数来分配结果。我们将从隔离森林模型开始。

1

2

iforest_results = assign_model(iforest)

iforest_results.head()

assign_model()函数返回一个检测异常的数据帧,异常值的存在标记为 1,非异常值标记为 0,以及异常分数。

同样,我们也可以分配其他模型。所以可以进行比较。

1

2

lof_results = assign_model(lof)

lof_results.head()

比较上述模型我们可以看到,隔离森林已经将第二行视为异常,但局部异常因子并未将其视为异常。但不同算法的异常得分不同。

对于 k 个最近邻,预测分数与隔离森林的预测分数非常相似。

1

2

knn_results = assign_model(knn)

knn_results.head()

按每个模型过滤异常,这表明 iforest 模型将 1000 行中的 50 行视为异常。

1

2

iforest_anomaly=iforest_results[iforest_results['Anomaly']==1]

iforest_anomaly.shape

同样,检查LOF和KNN,我们可以看到它们都考虑了50个异常。必须使用不同的计算方法来查找异常值。

1

2

lof_anomaly=lof_results[lof_results['Anomaly']==1]

lof_anomaly.shape

1

2

knn_anomaly=knn_results[knn_results['Anomaly']==1]

knn_anomaly.shape

根据以上结果,我们可以得出结论,1000 个异常中最有可能有 50 个。

验证的一种方法是分析它们中的哪一个更适合于对模型标记为离群值的数据进行分析,并比较它们对测试数据的影响,或者进行分析,看看它们是否位于决策边界内。

解释和可视化

可视化是以创造性和独立的方式解释手头信息的最便捷方式。

让我们首先从 PyCaret 库外部创建视觉效果,这将突出 PyCaret 库的好处,并使我们能够了解plot_model函数如何更具交互性。

1

2

3

4

5

from yellowbrick.features import Manifold

dfr = iforest_results['Anomaly']

viz = Manifold(manifold="tsne")

viz.fit_transform(df, dfr)

viz.show()

我们可以看到,隔离森林在多个维度上确定的大多数异常通常来自不同的集群。

现在在PyCaret 中为 KNN使用plot_model() 函数,它将为异常值创建一个 3D 图,在其中我们可以看到为什么某些特征被视为异常。

1

plot_model(knn)

我们可以在任何维度上移动它以查看和指出异常。这个 3D 绘图有助于我们更好地查看它。KNN 图显示大多数异常值是那些不属于任何集群的异常值。所以这很好!

其他两个模型也可以这样做。

1

plot_model(iforest)

很明显,数据集被分成了四个不同的集群,所以这些组之外的任何东西都肯定是异常的。

异常并不总是坏兆头!有时它们在解释结果或数据分析方面非常有用。这些可用于解决不同的数据科学用例。

接下来是第三种模式。线性离群因子,我们可以用一个不同的图来实验,创造一个2D图。

我们可以放大这个二维图来查看哪些点被认为是异常值。

可以再次为配对图创建另一个视觉效果,现在使用异常来查看哪些点将被视为异常。

1

sns.pairplot(lof_results, hue = "Anomaly")

最后,我们可以保存模型。可以保存任何合适的模型。这里我们保存了 iforest 模型。

1

save_model(iforest,'IForest_Model')

模型与示例数据和日志一起成功保存。

尾注

这标志着我们关于异常检测的动手项目的结束。我们已经讨论了 PyCaret 库的用例和实现,以及它如何用于异常检测。PyCaret 是一个快速可靠的机器学习库,通常被数据科学家用来解决复杂的业务问题。在创建可部署模型的同时,可以扩展该项目进行进一步的实验和探索。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/woshicver/article/details/118742153
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计