异常检测的学习和实战

news2024/11/23 20:29:25

1.应用:

1.在工业上的应用请添加图片描述
当检测设备是否处于异常工作状态时,可以由上图分析得到:那些零散的点对应的数据是异常数据。因为设备大多数时候都是处于正常工作状态的,所以数据点应该比较密集地集中在一个范围内,而那些明显偏出正常范围内的数据点就是我们要找的异常数据了,此时就可以自动

2.在图像里的应用请添加图片描述
通过异常检测,我们也可以检测到图像中的异常图像。(如上图中的小红鱼)
此外,异常检测的应用还有很多,比如:
异常消费检测(商业)
缺陷基因检测(医疗)
劣质产品检测(工业)等等

2.对于异常检测的定义:

根据输入的数据,对不符合预期模式的数据进行识别

3.介绍:

假设我们有一个一维的数据集,在这个数据集中有m个样本:请添加图片描述
数据在x轴的分别如下图:
请添加图片描述
我们的目标是自动地找出这上面的异常样本,就可以根据样本在坐标轴上分布的数量多少,计算出坐标轴上各点对应的样本概率密度,可以设定当概率密度小于某个值时,这时其对应的样本就是我们要找的异常样本。——>根据各个样本对应的概率函数计算出来的值画出数据分布,进而判断是否属于异常样本
请添加图片描述
这里说一下高斯分布的概率密度函数:
请添加图片描述
请添加图片描述
根据以上数据我们就可以计算出我们的均值和方差:
请添加图片描述
然后我们将均差和方差带入公式就能算出我们的P(x)了:
请添加图片描述

4.如何根据高斯分布概率去解决异常检测的问题呢?

请添加图片描述
**(第一步)**在我们知道X1、X2……Xm这些数据后,就可以进行相应计算了。

  1. 计算各个数据均值u,标准差σ
  2. 计算对应的高斯分布概率密度函数P(x)
    请添加图片描述

(第二步)计算出来后,数据对应的高斯分布概率密度函数如下图
请添加图片描述
请添加图片描述该点就为异常点
问:如果数据高于一维怎么办?
请添加图片描述
比如这里
n维的数据
每一个维度都有m个样本。若要计算其高斯分布概率密度函数,可按如下步骤:
在这里插入图片描述先计算出每一个维度下对应的均值和标准差了,这样就可以计算每个维度下的概率密度函数
请添加图片描述
我们将计算出的每个维度下的概率密度函数相乘就可以计算出总的概率密度函数了请添加图片描述
最后再根据高维下的概率密度函数判断其是否小于预期就可以判断异常点了请添加图片描述

5.举个例子:

举个例子,下面给出一组二维数据,来判断当x1=3.5,x2=3.5时,对应的点是不是异常点
请添加图片描述
知道了标准差和均值,就可以计算其概率密度函数了请添加图片描述
经计算可判断该点为异常点

很多时候,为了更直观的观察概率密度函数,我们是可以把它画出来的,下图是二维数据下的一个概率密度函数图

请添加图片描述

6.实战代码:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib as mlp  # mlp设置字体
from scipy.stats import norm  # norm计算高斯分布概率函数
from sklearn.covariance import EllipticEnvelope  # EllipticEnvelope模型专门做异常检测的

# 1.预览数据
data = pd.read_csv('D:/pythonDATA/anomaly_data.csv')
print(data.head())
# 2.进行数据分布可视化
fig1 = plt.figure(figsize=(10, 7))
x1 = data.loc[:, 'x1']
x2 = data.loc[:, 'x2']

font2 = {'family': 'SimHei', 'weight': 'normal', 'size': '20'}  # 定义一下字体(根据自己喜好定义即可)
mlp.rcParams['font.family'] = 'SimHei'  # 设置字体
mlp.rcParams['axes.unicode_minus'] = False  # 字符显示

fig2 = plt.figure(figsize=(20, 7))

plt.subplot(121)  # 子图一行二列所属第一列(画x1)
plt.hist(x1, bins=100)  # 分成100个数据分隔,即有100条条状图
plt.title('x1 数据分布统计', font2)
plt.xlabel('x1', font2)
plt.ylabel('出现次数', font2)

plt.subplot(122)  # 子图一行二列所属第二列(画x2)
plt.hist(x2, bins=100)  # 分成100个数据分隔
plt.title('x2 数据分布统计', font2)
plt.xlabel('x2', font2)
plt.ylabel('出现次数', font2)
plt.show()

# 3.计算x1、x2的均值(mean)和标准差(sigma)
print("计算x1,x2的mean均值和标准差sigma")
x1_mean = x1.mean()
x1_sigma = x1.std()
x2_mean = x2.mean()
x2_sigma = x2.std()
print(x1_mean, x1_sigma, x2_mean, x2_sigma)

# 4.计算高斯分布概率密度函数
x1_range = np.linspace(0, 20, 300)  # x1值得范围是0到20,300个点均分
x1_normal = norm.pdf(x1_range, x1_mean, x1_sigma)  # 计算高斯分布概率密度函数x_normal
x2_range = np.linspace(0, 20, 300)
x2_normal = norm.pdf(x2_range, x2_mean, x2_sigma)

# 5.可视化高斯分布概率密度函数
fig3 = plt.figure(figsize=(20, 7))
plt.subplot(121)
plt.plot(x1_range, x1_normal)  # 可视化分布概率函数(x1的值切分做x,高斯分布概率函数作y)
plt.title('normal p(x1)')
plt.subplot(122)
plt.plot(x2_range, x2_normal)  # 可视化分布概率函数(x2的值切分作为x轴,y轴为高斯分布概率函数)
plt.title('normal p(x2)')
plt.show()
# 6.建立模型
ad_model = EllipticEnvelope(contamination=0.03)  # 默认阈值是0.1,我们修改为0.03观察变化
ad_model.fit(data)
# 7.预测
y_predict = ad_model.predict(data)
print(pd.value_counts(y_predict))
y_predict = np.array(y_predict)

# 可视化结果
fig4 = plt.figure(figsize=(10, 6))
orginal_data = plt.scatter(data.loc[:, 'x1'], data.loc[:, 'x2'], marker='x')  # 将各点用'x'表示
anomaly_data = plt.scatter(data.loc[:, 'x1'][y_predict == -1], data.loc[:, 'x2'][y_predict == -1], marker='o',
                           facecolor='none', edgecolor='red', s=150)
# y_predict==-1即是异常点; marker='o'将异常点用圆圈圈起来; facecolor='none' 不填充,即空心圆; edgecolor='red' 颜色为红色; s=150 圆圈的大小.
plt.title('自动寻找异常数据', font2)
plt.xlabel('x1', font2)
plt.ylabel('x2', font2)
plt.legend((orginal_data, anomaly_data), ('原数据', '检测异常点'))
plt.show()

数据分布图:
在这里插入图片描述

高斯概率分布图:
在这里插入图片描述
异常数据分布图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1667447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Attention-guided Feature Distillation for Semantic Segmentation

摘要 与现有的复杂方法相比,该方法通常用于从老师那里提取知识给学生,该方法展示了一种简单而强大的方法,可以利用精细的特征映射来转移注意力。事实证明,该方法在提取丰富信息方面是有效的,在作为密集预测任务的语义…

Obsidian/Typora设置图床

在obsidian中默认图片是保存在本地的,但是在要导出文档上传到网上时,由于图片保存在本地,会出现无法加载图片的问题。 这里引用的一段话: 这里使用picgo-core和gitee实现图床功能, 参考1: Ubuntu下PicGO配…

Python中bisect模块

Python中bisect模块 在Python中,如果我们想维持一个已排序的序列,可以使用内置的bisect模块,例如: import bisect# 用于处理已排序的序列 inter_list [] bisect.insort(inter_list, 3) bisect.insort(inter_list, 2) bisect.in…

2.监督/非监督学习

参考链接为:https://hands1ml.apachecn.org/1/ 机器学习可以根据训练时监督的量和类型进行分类。主要有四类:监督学习、非监督学习、半监督学习和强化学习。 本文将简单介绍监督学习和非监督学习 监督学习 在监督学习中,用来训练算法的训练…

39-5 入侵检测系统(IDS)- 安装配置IDS(安装成功)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

python3 Fatal error in launcher: Unable to create process using

python 环境变量 在window系统环境变量 path 中配置 python 的安装目录,目录层级至paython 的安转目录即可。 pip环境变量配置 在path 中增加配置 paython 安装目录下 Scripts 子目录的环境变量。 以上配置完成后,win R 打开命令窗口,输…

mysql中的页和行

页 行即表中的真实行,‘行式数据库’的由来 虽然MySQL的数据文件(例如.ibd文件)中的数据页在物理上是通过链表连接的,但是在逻辑上,MySQL使用B树来组织和访问数据。 行:主要是dynamic类型

C++Windows11平台通过CMake在VS2022上面配置Googletest1.14.0

Release v1.14.0 google/googletest (github.com),在官网下载Googletest1.14.0(Release版本,本博客默认你已经安装好了CMake)。 将下载好的压缩包解压到你的文件夹。 打开对应的文件夹。 开启控制台窗口,依次输入以下命令 mkd…

用户登录后端:登录密码解密后用PasswordEncoder验证密码是否正确

前置知识: 前端登录加密看用户登录 PasswordEncoder加密看PasswordEncoder详解 项目中因为要判断用户登录密码是否正确,通过输入错误次数锁住用户 1.后端配置rsa私钥 #密码加密传输,前端公钥加密,后端私钥解密 rsa:private_key: xxxx2. 读…

Linux学习之路 -- 文件系统 -- 缓冲区

前面介绍了文件描述符的相关知识,下面我们将介绍缓冲区的相关知识。 本质上来说,缓冲区就是一块内存区域,因为内核上的缓冲区较复杂,所以本文主要介绍C语言的缓冲区。 目录 1.为什么要有缓冲区 2.应用层缓冲区的默认刷新策略 …

【C++】————类与对象(上)-基础知识

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 类的两种定义方式: 成员变量命名规则的建议: 4.类的访问限定符及封装 4.1 访问限定符 ​编辑 【面试题】问题:C中struct和class的区别是什么? 4.2 封装 【面试…

VPN方案和特点

VPN方案和特点 VPN,或者称为虚拟专用网络,是一种保护你的在线安全和隐私的技术。它可以创建一个加密的连接,使你的在线活动对其他人不可见。以下是一些常见的VPN协议和它们的特点: 开放VPN (OpenVPN):这是一种极为可…

基于SSM的“学生网上请假系统 ”的设计与实现(源码+数据库+文档)

基于SSM的“学生网上请假系统 ”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 主页界面 登录界面 班级信息添加界面 院系信息…

(2024,KAN,MLP,可训练激活函数,样条函数,分层函数)Kolmogorov–Arnold 网络

KAN: Kolmogorov–Arnold Networks 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. KAN 2.1 KA 表示定理 2.2 KAN 架构 2.3 KAN 的逼近能力和缩放定律 2.4 对于…

【JS面试题】闭包

一、自由变量 在学习闭包之前,首先了解一下什么是自由变量: 一个变量在当前作用域(比如函数内)没有定义,但是被使用了,这个变量就是自由变量。在定义该函数的位置,向上级作用域,一…

C++笔试强训day20

目录 1.经此一役小红所向无敌 2.连续子数组最大和 3.非对称之美 1.经此一役小红所向无敌 链接 简单模拟即可。 需要注意的是&#xff1a; 除完之后有无余数&#xff0c;若有&#xff0c;则还可以再挨一次打。 #include <iostream> using namespace std; #define in…

离散化(算法竞赛)

Ⅰ 离散化简介 离散化&#xff1a;把无限空间中有限的个体映射到有限的空间中去&#xff0c;以此提高算法的时空效率。通俗的说&#xff0c;离散化是在不改变数据相对大小的条件下&#xff0c;对数据进行相应的缩小。 适用范围&#xff1a;数组中元素值域很大&#xff0c;但个…

imx91的uboot编译

一、准备操作 下载半导体厂家的uboot源码 如这里我要下载的是imx91的恩智浦linux芯片bootloader 进入半导体厂家官网 下载源码&#xff0c;略 更新linux源&#xff0c;这里我是替换成清华源 vi /etc/apt/sources.list deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ fo…

FPGA相关论文阅读

一、Achieving 100Gbps Intrusion Prevention on a Single Server 论文名称中文翻译&#xff1a;在单台服务器上实现100Gbps吞吐量的入侵防御检测。 文章中的Mixed-1和Norm-1 二、Distributed Password Hash Computation on Commodity Heterogeneous Programmable Platforms…