异常检测的学习和实战
1.应用:
1.在工业上的应用
当检测设备是否处于异常工作状态时,可以由上图分析得到:那些零散的点对应的数据是异常数据。因为设备大多数时候都是处于正常工作状态的,所以数据点应该比较密集地集中在一个范围内,而那些明显偏出正常范围内的数据点就是我们要找的异常数据了,此时就可以自动
2.在图像里的应用
通过异常检测,我们也可以检测到图像中的异常图像。(如上图中的小红鱼)
此外,异常检测的应用还有很多,比如:
异常消费检测(商业)
缺陷基因检测(医疗)
劣质产品检测(工业)等等
2.对于异常检测的定义:
根据输入的数据,对不符合预期模式的数据进行识别
3.介绍:
假设我们有一个一维的数据集,在这个数据集中有m个样本:
数据在x轴的分别如下图:

我们的目标是自动地找出这上面的异常样本,就可以根据样本在坐标轴上分布的数量多少,计算出坐标轴上各点对应的样本的概率密度,可以设定当概率密度小于某个值时,这时其对应的样本就是我们要找的异常样本。——>根据各个样本对应的概率函数计算出来的值画出数据分布,进而判断是否属于异常样本

这里说一下高斯分布的概率密度函数:


根据以上数据我们就可以计算出我们的均值和方差:

然后我们将均差和方差带入公式就能算出我们的P(x)了:

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

**(第一步)**在我们知道X1、X2……Xm这些数据后,就可以进行相应计算了。
- 计算各个数据均值u,标准差σ
- 计算对应的高斯分布概率密度函数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()
数据分布图:

高斯概率分布图:

异常数据分布图:

相关文章:
异常检测的学习和实战
1.应用: 1.在工业上的应用 当检测设备是否处于异常工作状态时,可以由上图分析得到:那些零散的点对应的数据是异常数据。因为设备大多数时候都是处于正常工作状态的,所以数据点应该比较密集地集中在一个范围内,而那些明…...
RabbitMQ 面试题(一)
1. 简述为什么要使用 RabbitMQ ? 使用 RabbitMQ 的主要原因包括以下几点: 解耦:在复杂的系统中,不同的服务或组件之间往往需要通信和协作。RabbitMQ 作为消息队列,允许这些组件或服务通过发送和接收消息来交互,而无…...
org.postgresql.util.PSQLException: 错误: 关系 “dual“ 不存在
springboot 项目连接 postgreps,启动时报错 org.postgresql.util.PSQLException: 错误: 关系 "dual" 不存在。 查阅资料后发现这是由配置文件中的配置 datasource-dynamic-druid-validationQuery 导致的 spring:datasource:druid:stat-view-servlet:ena…...
mysql权限分类
USAGE --无权限,只有登录数据库,只可以使用test或test_*数据库 ALL --所有权限 select/update/delete/super/slave/reload --指定的权限 with grant option --允许把自己的权限授予其它用户(此用户拥有建立账号的权限) 权限级别: 1、. --全…...
【C++11】列表初始化、右值引用的详细讲解(上)
前言 在一开始学C之前我们就简单的了解了一下C的发展历史。 相比较而言,C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率加了许多特性,约140个新特性。使得C…...
【JAVA进阶篇教学】第十三篇:Java中volatile关键字讲解
博主打算从0-1讲解下java进阶篇教学,今天教学第十三篇:volatile关键字讲解。 在 Java 中,volatile关键字是一种轻量级的同步机制,用于确保变量的可见性和禁止指令重排序。本文将详细解释volatile关键字的工作原理、可见性保证以及…...
蓝桥杯-地宫取宝
X 国王有一个地宫宝库,是 nm 个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个…...
带头单链表 C++实现
节点定义 带头单链表:我们只需要一个结点指针指向整个链表的第一个节点,这样我们就可以通过next指针访问整个链表内的所有节点 template<class T> struct ListNode {T _val;ListNode* _next;ListNode(const T &val):_val(val),_next(nullptr){…...
学习c#第24天 枚举类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace enumType { //定义枚举 public enum Week { 星期一, 星期二, 星期三, 星期四, 星期…...
TensorFlow运行bug汇总
1、ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1 解决方案 pip install urllib31.26.15 -i https://pypi.tuna.tsinghua.edu.cn/simple 升级或者降级 (TF2.1) C:\Users\Administrator>pip install urllib31.26.15 -i https://pypi.tuna.tsinghua.edu.cn/sim…...
docker部署调度程序
Dockerfile(构建初始镜像) # python:3.8-slim-buster为精简版的python FROM python:3.8-slim-buster # 1059为组的id,newgroup为组名,1088为用户的id,newuser为新用户 RUN groupadd -g 1059 newgroup && \useradd -g -u 1088 -g newgroup -m newuser USER newuser RUN…...
websocket和http协议的区别
ws(websocket)协议和http协议是两种不同的协议。 http:http是一种用于传输超文本的应用层协议,通常用于web端浏览器和web端服务器之间传输数据。http也是基于tcp的,但是HTTP只能在同一时刻单向发送消息,是一种半双工通信。&#…...
CSS之定位
目录 CSS定位为什么需要定位定位组成定位的叠放顺序拓展 CSS定位 为什么需要定位 浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中的某个位置,并且可以压住其他盒子 定…...
[IM002][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
解决办法: 安装驱动 下载 ODBC Driver for SQL Server - ODBC Driver for SQL Server | Microsoft Learn...
神经网络复习--神经网络算法模型及BP算法
文章目录 神经网络模型的构成BP神经网络 神经网络模型的构成 三种表示方式: 神经网络的三要素: 具有突触或连接,用权重表示神经元的连接强度具有时空整合功能的输入信号累加器激励函数用于限制神经网络的输出 感知神经网络 BP神经网络 …...
【Java】/*方法的使用-快速总结*/
目录 一、什么是方法 二、方法的定义 三、实参和形参的关系 四、方法重载 五、方法签名 一、什么是方法 Java中的方法可以理解为C语言中的函数,只是换了个名称而已。 二、方法的定义 1. 语法格式: public static 返回类型 方法名 (形参列表) { //方…...
kotlin中协程相关
协程 用同步的方式写出异步的效果协程最重要的是通过非阻塞挂起和恢复实现了异步代码的同步编写方式挂起函数(suspend)不一定就是在子线程中执行的,但是通常在定义挂起函数时都会为它指定其他线程,这样挂起才有意义解决多层嵌套回调 协程不是线程&…...
(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目
(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目PbootCMS内核开发的网站模板,该模板适用于物流运输网站、仓储货运网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台…...
Navicat导出表结构到Excel或Word
文章目录 sql语句复制到excel复制到Word sql语句 SELECTcols.COLUMN_NAME AS 字段,cols.COLUMN_TYPE AS 数据类型,IF(pks.CONSTRAINT_TYPE PRIMARY KEY, YES, NO) AS 是否为主键,IF(idxs.INDEX_NAME IS NOT NULL, YES, NO) AS 是否为索引,cols.IS_NULLABLE AS 是否为空,cols.…...
Golang编译优化——稀疏条件常量传播
文章目录 一、概述二、稀疏条件常量传播2.1 初始化worklist2.2 构建def-use链2.3 更新值的lattice2.4 传播constant值2.5 替换no-constant值 一、概述 常量传播(constant propagation)是一种转换,对于给定的关于某个变量 x x x和一个常量 c …...
深入理解强化学习基础:价值函数、策略梯度与PPO算法核心原理
深入理解强化学习基础:价值函数、策略梯度与PPO算法核心原理 【免费下载链接】LLM-RL-Visualized 🌟100 原创 LLM / RL 原理图📚,《大模型算法》作者巨献!💥(100 LLM/RL Algorithm Maps &#x…...
解密冰蝎和蚁剑:在CTF流量分析中如何识别和还原WebShell攻击(含AES/Base64解密实操)
解密冰蝎与蚁剑:CTF流量分析中的WebShell识别与解密实战 在CTF竞赛和安全分析领域,WebShell流量分析一直是让许多选手头疼的高阶挑战。特别是当面对冰蝎(Behinder)、蚁剑(AntSword)这类采用强加密通信的Web…...
昇思大模型预训练数据来源
昇思 MindSpore 大模型(如鹏程・盘古、Qwen、Skywork 等)的预训练数据以中文为核心、多源异构融合、高质量过滤为特点,依托开源数据、互联网爬虫、电子书与领域数据构建,经分布式清洗、去重、过滤后形成百亿至千亿级 Token 的训练…...
从BetaFlight的Makefile设计,聊聊如何为你的飞控板(如STM32F7X2)定制固件
从BetaFlight的Makefile设计解析飞控固件定制之道 在无人机和航模领域,BetaFlight作为一款开源飞控软件,因其出色的性能和灵活的定制能力而广受欢迎。本文将深入探讨BetaFlight的构建系统设计,特别是其Makefile的实现哲学,并以STM…...
2023B卷,书籍叠放
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:华为OD面试 文章目录 一、🍀前言 1.1 ☘️题目详情 1.2 ☘️参考解题答案 一、🍀前言 2023B卷,书籍叠放 。 1.1 ☘️题目详情 题目: 书籍的长、…...
ComfyUI Segment Anything:零门槛实现智能图像分割的完整指南
ComfyUI Segment Anything:零门槛实现智能图像分割的完整指南 【免费下载链接】comfyui_segment_anything Based on GroundingDino and SAM, use semantic strings to segment any element in an image. The comfyui version of sd-webui-segment-anything. 项目地…...
GEO优化实战指南:中小企业如何精准提升本地服务获客效率?
随着线上营销的重要性日益凸显,中小企业面临着前所未有的机遇与挑战。GEO(生成式引擎优化)作为近年来兴起的一种技术手段,旨在帮助企业更高效地利用AI平台进行品牌推广与客户获取。本文将探讨中小企业如何通过GEO优化策略…...
深度扒一扒GEO(生成式引擎优化)的底层技术架构
Gartner预测2026年传统搜索流量将下降25%,而国内生成式AI用户已破5亿。 当你的潜在客户都在问豆包、Kimi或DeepSeek“哪个牌子好”时,你的官网排名第一还有用吗?没用。因为AI直接给了答案,用户根本没点进来。 这就是GEOÿ…...
高效掌握Simscape Electrical:BLDC电机控制器设计的5大关键技术实战
高效掌握Simscape Electrical:BLDC电机控制器设计的5大关键技术实战 【免费下载链接】Design-motor-controllers-with-Simscape-Electrical This repository contains MATLAB and Simulink files used in the "How to design motor controllers using Simscape…...
ThinkPHP8.x全面升级:现代化PHP开发新标杆
好的,我们来梳理一下 ThinkPHP 8.x 版本(通常指 8.0 及后续小版本)的主要特性和改进方向。相较于之前的版本(如 5.x),8.x 版本在架构、性能、规范性和安全性上都有显著提升:核心方向与重大变更&…...
