【机器学习】异常检测

异常检测

假设你是一名飞机涡扇引擎工程师,你在每个引擎出厂之前都需要检测两个指标——启动震动幅度和温度,查看其是否正常。在此之前你已经积累了相当多合格的发动机的出厂检测数据,如下图所示

我们把上述的正常启动的数据集总结为 D a t a S e t : x ( 1 ) , x ( 2 ) , . . . , x ( m ) DataSet:{x^{(1)},x^{(2)},...,x^{(m)}} DataSet:x(1),x(2),...,x(m)
如果一个新的例子 x t e s t x_{test} xtest离点集很远,那可能这个样例是异常的

那么如何衡量“很远”呢?一般我们会有一个函数p(x)负责计算,并且有一个阈值 ϵ \epsilon ϵ,当 p ( x t e s t ) < ϵ p(x_{test})<\epsilon p(xtest)<ϵ的时候,我们认为该样例异常;而当 p ( x t e s t ) ≥ ϵ p(x_{test})\geq\epsilon p(xtest)ϵ的时候,我们认为其是正常的

异常检测的一般应用方面有欺诈检测,比如说检测一个用户的行为(登录频率,打字频率,发帖频率),来判断他是否是一个机器人。另外还可以用于计算机集群管理,通过采集各个计算机的运行数据,来找到异常的计算机,或者发掘未被充分利用的算力。

1.正态分布(高斯分布)

我们一般使用正态分布来实现异常检测,高斯分布一般用 x ∼ N ( μ , σ 2 ) x\sim N(\mu,\sigma^2) xN(μ,σ2)来表示,高斯分布的图像一般如下图所示,线段上的某个点 ( x , y ) (x,y) (x,y)表示的是取值为x的概率为y,其中 μ \mu μ是图像对称中心,而 σ \sigma σ被称为标准差,负责控制高斯分布的宽度, σ \sigma σ越大,曲线越平滑, σ 2 \sigma^2 σ2也称为方差

高斯概率密度公式如下:
p ( x , μ , σ 2 ) = 1 2 π σ e x p ( − ( x , u ) 2 2 σ 2 ) p(x,\mu,\sigma ^2)=\frac{1}{\sqrt[]{2\pi }\sigma }exp\left ( -\frac{(x,u)^2}{2\sigma^2} \right ) p(x,μ,σ2)=2π σ1exp(2σ2(x,u)2)

认识了高斯分布后,假设我们有一个数据集x,它的每个样例中仅有一个特征,那么这些数据集可以直接表示在x轴上,如下图:

那么我们需要做的事情是根据数据集在图上的离散分布,估计出 μ \mu μ σ 2 \sigma^2 σ2值,找到符合该数据集的高斯分布

对于 μ \mu μ的取值,实际上就是找数据中心,一般是找所有点在x轴上的均值,计算方式就是
μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum_{i=1}^{m}x^{(i)} μ=m1i=1mx(i)
而对于 σ 2 \sigma^2 σ2,其实是一个计算点集的方差的过程,也就是整体离中心点的偏移大小,计算方式是 μ = 1 m ∑ i = 1 m ( μ − x ( i ) ) 2 \mu=\frac{1}{m}\sum_{i=1}^{m}(\mu -x^{(i)})^2 μ=m1i=1m(μx(i))2

2.使用高斯分布构建异常检测算法

上述我们说了如果一个实例中只有一个特征,如何建立其高斯分布,那么如果一个实例有n个特征呢?实际上很简单,对于一个有m个实例,每个实例有n个特征的数据集,我们需要对每一个特征都建立一个高斯分布,而每一个高斯分布都有m个数据,共计n个高斯分布。

步骤一:对于一个实例 x x x,选择出若干特征 x i x_i xi,这些特征应该可以反映出实例x是否异常

步骤二:该步骤上文已经提到过,就是对于所有实例的第j个特征 x j x_j xj,都有一个高斯函数 x j N ( μ j , σ j 2 ) x_j~N(\mu_j,\sigma^2_j) xj N(μj,σj2)用于计算该特征下的高斯分布, μ j , σ j 2 \mu_j,\sigma^2_j μj,σj2的计算方式参考上一节

步骤三
对于一个训练集 D a t a S e t : x ( 1 ) , x ( 2 ) , . . . , x ( m ) DataSet:{x^{(1)},x^{(2)},...,x^{(m)}} DataSet:x(1),x(2),...,x(m),每个样本x都拥有若干个特征,对于某个样本 x x x,对它的 p ( x ) p(x) p(x)的计算方法是 p ( x ) = ∏ n j = 1 p ( x j , μ j , σ j 2 ) = p ( x 1 , μ 1 , σ 1 2 ) p ( x 2 , μ 2 , σ 2 2 ) p ( x 3 , μ 3 , σ 3 2 ) . . . p ( x n , μ n , σ n 2 ) p(x)=\prod_{n}^{j=1}p(x_j,\mu_j,\sigma ^2_j) =p(x_1,\mu_1,\sigma ^2_1)p(x_2,\mu_2,\sigma ^2_2)p(x_3,\mu_3,\sigma ^2_3)...p(x_n,\mu_n,\sigma ^2_n) p(x)=nj=1p(xj,μj,σj2)=p(x1,μ1,σ12)p(x2,μ2,σ22)p(x3,μ3,σ32)...p(xn,μn,σn2)

最后我们规定一个阈值 ϵ \epsilon ϵ,当 p ( x ) < ϵ p(x)<\epsilon p(x)<ϵ的时候,我们认为该实例x异常

3.开发和评估异常检测系统

和其他算法一样,我们将训练模型的数据分为训练集,交叉验证集和测试集。假设我们有10000个正常的数据,20个异常的数据,那么我们可以这样子分配:

  • 训练集含有6000个正常数据
  • 交叉验证集含有2000个正常数据,10个异常数据
  • 测试集含有2000个正常数据,10个异常数据

接下来就是使用数据训练 p ( x ) p(x) p(x)函数,并且当 p ( x ) < ϵ p(x)<\epsilon p(x)<ϵ的时候,我们认为该实例x异常,训练的过程在上一小节已经说明了

4.异常检测和无监督学习的区别

对于异常检测,他的应用场景更多的是在异常点相对少的情况下,比如10000台发动机中只有20台需要返修。而无监督学习更多的是正样本和负样本的数据相当。这也是为什么异常检测广泛应用在制造业和数据监控行业,因为其出现异常的概率相对比较低;而在垃圾邮件识别方面,大量的垃圾邮件样例为无监督学习提供了丰富的负样本,因此使用无监督学习更好

另外的一方面是,无监督学习擅长划分若干个点集,比如将发动机划分为正常、喘振、压气机失速等若干种情况,但是如果第二天出现了叶片共振的问题,无监督学习就束手无策了,因为它没见过这种情况。

而异常检测就是简单地粗暴地将正常工作的情况划分出来,只要超出了正常的限界都被认为是异常,因此当叶片共振这种之前未出现的故障出现的时候,异常检测算法会直接认为它是异常,而不会细究其异常的原因,但是这也反而使得它具有了识别一些之前未出现的异常的能力

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

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

相关文章

Jmeter常见问题之URI异常

这篇文章介绍一下"http://"重复导致的URI异常问题&#xff0c;通常从浏览器地址栏复制url&#xff0c;直接粘贴到Jmeter的http请求的服务器地址中会默认带上“http://”&#xff0c;要将http://删除&#xff0c;只写IP地址&#xff0c;如下图&#xff1a; 否则&…

项目开启启动命令整合

启动RabbitMQ管理插件 1.启动 RabbitMQ 管理插件。 rabbitmq-plugins enable rabbitmq_management rabbitmq-server # 直接启动&#xff0c;如果关闭窗⼝或需要在该窗⼝使⽤其他命令时应⽤就会停⽌ rabbitmq-server -detached # 后台启动 rabbitmq-server start # 启⽤服务 rab…

shell——正则表达式

1、正则表达式 . ls .txt 匹配当前目录下以.txt结尾的文件 * grep a* file.txt 匹配文件中所有连续出现的字母a grep ba file.txt 配文件中所有包含b后跟着一个或多个a的字符串。 ? grep colou?r file.txt 匹配文件中包含color或colour的字符串。 [ ] grep [ae…

16.喝水

喝水 html部分 <h1>Goal: 2 Liters</h1> <div class"cup cupbig"><div class"remained"><span id"liters">2L</span><small>Remained</small></div><div class"percentage&quo…

PHY芯片的使用(三)在linux下网络PHY的移植

1 前言 配置设备树请参考上一章。此次说明还是以裕太的YT8511芯片为例。 2 需要配置的文件及路径 a. 在 .. /drivers/net/phy 目录下添加 yt_phy.c 文件&#xff08;一般来说该驱动文件由厂家提供&#xff09;&#xff1b; b. 修改.. /drivers/net/phy 目录下的 Kconfig 文…

win10电脑便签常驻桌面怎么设置?

你是否曾经因为繁忙的工作而忘记了一些重要的事项&#xff1f;相信很多人都会回答&#xff1a;忘记过&#xff01;其实在快节奏的职场中&#xff0c;我们经常需要记录一些重要的信息&#xff0c;例如会议时间、约见客户时间、今天需要完成的工作任务等。而为了能够方便地记录和…

nodejs+vue+elementui学习交流和学习笔记分享系统

Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进…

Spring Cloud Alibaba 集成 Skywalking 链路追踪

Spring Cloud Alibaba 集成 Skywalking 链路追踪 简介 skywalking 是一个国产开源框架&#xff0c;2015 年由吴晟开源 &#xff0c; 2017 年加入 Apache 孵化器。skywalking 是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Doc…

redis中使用bloomfilter的白名单功能解决缓存预热问题

一 缓存预热 1.1 缓存预热 将需要的数据提前缓存到缓存redis中&#xff0c;可以在服务启动时候&#xff0c;或者在使用前一天完成数据的同步等操作。保证后续能够正常使用。 1.2 解决办法PostConstruct注解初始化

logback 自定义log字段(MDC)推送到logstash(spring boot + logback+ logstash)

直接上代码&#xff1a; 1.创建FIlter&#xff0c;往 MDC 里面追加内容 WebFilter Component public class LogBackFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFilter(ServletRequest…

【复习16-18天】【我们一起60天准备考研算法面试(大全)-第二十四天 24/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

vue 全屏设置

全屏按钮调用&#xff08;全屏和退出全屏一个方法&#xff09; tofullscreenToggel(){this.isFullScreen!this.isFullScreenfullscreenToggel() } util方法定义 /*** 浏览器判断是否全屏*/ export const fullscreenToggel () > {if (fullscreenEnable()) {exitFullScree…

【MATLAB】GM(1,1) 灰色预测模型及算法

一、灰色预测模型概念 灰色预测是一种对含有不确定因素的系统进行预测的方法。 灰色预测通过鉴别系统因素之间发展趋势的相异程度&#xff0c;即进行关联分析&#xff0c;并对原始数据进行生成处理来寻找系统变动的规律&#xff0c;生成有较强规律性的数据序列&#xff0c;然后…

Python TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘

在键入数值进行相加运算时&#xff0c;报了这样一个错误 类型错误&#xff1a;不支持操作类型为整数和字符串 错误分析&#xff1a;sumsuminput() 未被系统识别&#xff0c;导致程序错误 解决方法&#xff1a;给键入的数值定义&#xff0c;声明为整数 sumsumint(input()) 即…

centos服务器从阿里云同步时间

安装ntpdate yum -y install ntpdate同步一次时间 ntpdate ntp1.aliyun.com使用定时任务同步时间 编辑定时任务&#xff1a; crontab -e添加定时任务&#xff1a; */10 * * * * ntpdate ntp1.aliyun.com查看定时任务&#xff1a; crontab -l查看当前服务器时间 date -R

数据库系统安装、配置及管理与维护

一、安装与配置 数据库系统的安装步骤可能因不同版本和操作系统而有所差异&#xff0c;以下是一般的安装步骤&#xff1a; 下载数据库安装程序。从官方网站或其它可靠来源下载安装程序&#xff0c;确保下载的版本与您的操作系统版本和位数相匹配。运行安装程序。解压缩下载的…

c++--多态

1.多态概念 多态是C面面向对象的三大特性之一&#xff0c;多态需要在继承状态下完成&#xff0c;多态的特性就是面对相同的事情&#xff0c;需要不同的处理&#xff0c;产生不同的结果。 2.多态的条件及实现 多态是在不同的继承关系里&#xff0c;去实现函数名相同的不同实现…

【论文阅读】DEPIMPACT:反向传播系统依赖对攻击调查的影响(USENIX-2022)

Fang P, Gao P, Liu C, et al. Back-Propagating System Dependency Impact for Attack Investigation[C]//31st USENIX Security Symposium (USENIX Security 22). 2022: 2461-2478. 攻击调查、关键边、入口点 开源&#xff1a;GitHub - usenixsub/DepImpact 目录 1. 摘要2. 引…

前端学习——ajax (Day3)

AJAX原理 - XMLHttpRequest 使用 XMLHttpRequest <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

消息队列(一)-- RabbitMQ入门(1)

初识 RabbitMQ 核心思想&#xff1a;接收并转发消息。可以把它想象成一个邮局。 producer&#xff1a;生产者 queue&#xff1a;队列 consumer&#xff1a;消费者什么是消息队列 MQ&#xff08;Message Queue&#xff09;&#xff1a;本质是队列&#xff0c;FIFO先入先出&…