异常检测的学习和实战

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.mzph.cn/diannao/10604.shtml

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

相关文章

【数据结构练习题】Map与Set——1.只出过一次的数字2.复制带随机指针的链表3.宝石与石头4.坏键盘打字

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ ♥♥♥♥♥【数据结构练习题】堆——top-k问题♥♥♥♥♥ 文章目录 1.只出过一次的数字1.1问题描述1.2思路分析1.3绘图分析1.4代码实现2.复制带随机指针的链表2.1问题描述2.2思路分析2.3绘图分析2.4代…

远程点击没反应

目录 todesk远程登录后点击没反应 解决方法: 方法1 快捷键: 方法2 界面点击Ctrl Alt Delete todesk,向日葵远程登录后点击没反应 todesk远程登录后点击没反应 解决方法: 方法1 快捷键: Ctrl Alt Delete 方法…

《解锁数字化劳动合同签约:构建高效的电子合同签约平台》

随着数字化转型的推进,传统的纸质劳动合同签约方式已经无法满足现代企业对于效率和便捷性的需求。电子劳动合同签约平台应运而生,为企业和员工提供了一种更加高效、便捷的合同签署方式。本文将介绍电子劳动合同签约平台的业务架构,探讨其如何…

ORA-28575: unable to open RPC connection to external procedure agent

环境: Oracle 11.2.0.4x64 RAC AIX6.1版本SDE for aix oracle11g版本10.0 x64 sde配置情况如下: 检查oracle和grid用户下的$ORACLE_HOME/hs/admin/extproc.ora文件均包含有如下: SET EXTPROC_DLLSANY 两个节点sde下的user_libraries都正常…

如何利用ChatGPT辅助下处理:ENVI、GEE、Python等遥感数据

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用,人工智…

CentOS 8.5 安装配置 squid 6.9 代理服务器 Windows10 系统设置http代理 详细教程

1 下载地址: 官网下载 2 通过xftp等方式上传到服务器 #查看环境 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# uname -a Linux localhost.localdomain 4.18.0-552.el8.x86_64 #1 SMP Sun Apr 7 19:39:51 UTC 2024 x86_64 x86_6…

自动驾驶中的神经辐射场:综述

24年4月清华大学论文“Neural Radiance Field in Autonomous Driving: A Survey”。 神经辐射场(NeRF)由于其固有的优势,特别是其隐式表示和新视图合成能力,引起了学术界和工业界的广泛关注。 随着深度学习的快速发展&#xff0c…

YOLOv8项目使用说明

1. 下载群公告中的百度云连接,得到一个压缩文件 2. 解压并使用相关软件(如pycharm、VSCode等)打开 3. 选择一个合适的模型yaml文件,及数据集yaml文件进行训练 4. 配置并填入数据集yaml文件 5. 运行即可

JAVA 标准接口返回与i18n国际化配置

不喜欢废话直接上代码 标准通用返回 package com.luojie.common;import com.luojie.common.inter.ResponseCommon; import lombok.Data;Data public class ResponseCommonImpl implements ResponseCommon {int code;String msg;Object entity; }package com.luojie.common;im…

[muduo网络库]——muduo库三大核心组件之EventLoop类(剖析muduo网络库核心部分、设计思想)

接着上一节[muduo网络库]——muduo库三大核心组件之 Poller/EpollPoller类(剖析muduo网络库核心部分、设计思想),我们来剖析muduo库中最后一类核心组件,EventLoop类。 先回顾一下三大核心组件之间的关系。 接着我们进入正题。 Ev…

SpringBoot内置插件的使用(jackson和lombok)

文章目录 引言I lombok(自动为属性生成构造器)II jacksonsee also引言 idea2021.2.2 已经捆绑安装jackson和lombok插件 I lombok(自动为属性生成构造器) Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。 https://p…

Spring Cloud Gateway详解

文章目录 Gateway搭建路由(route)断言(Predicate )自定义断言 过滤器(filter)自定义全局过滤器 引言 在传统的单体项目中,前端和后端的交互相对简单,只需通过一个调用地址即可实现。…

【C语言题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 学习了函数后,老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数: 1.strlen函数 用于获取字符串长度(不包括末尾…

每日OJ题_贪心算法四②_力扣435. 无重叠区间

目录 力扣435. 无重叠区间 解析代码 力扣435. 无重叠区间 435. 无重叠区间 难度 中等 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2]…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git,本质上还是使用本地安装的Git软件,所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做: yum install --disablerepokamailio --enablerepokamai…

数据库出现死锁的解决方法参考

死锁引起的原因一般是多个用户并发访问数据库导致的问题,或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…

从JSON数据到Pandas DataFrame:如何解析出所需字段

目录 一、引言 二、JSON数据的基本结构 三、使用Pandas从JSON数据中读取数据 四、从DataFrame中解析出所需字段 解析对象字段 解析嵌套对象字段 解析数组字段 五、案例与代码示例 六、总结 一、引言 在数据分析和处理的日常工作中,我们经常需要从各种…

UBoat:一款功能强大的HTTP Botnet学习与研究工具

关于UBoat UBoat是一款功能强大的HTTP Botnet概念验证工具,该工具支持复刻一个现实场景中完整功能的Botnet测试环境,广大研究人员可以利用UBoat深入学习和研究Botnet的工作机制,以此来提升安全检测和保护策略。 功能介绍 1、基于C开发&…

luceda ipkiss教程 70:合并GDS版图

通过代码拼版: 所有代码如下: from si_fab import all as pdk from ipkiss3 import all as i3class Design1(i3.GDSCell):def _default_filename(self):return "Ring_Test.gds"def _default_name(self):return "Design1"class Des…