【机器学习】异常检测

news2024/10/7 12:21:32

异常检测

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

我们把上述的正常启动的数据集总结为 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.coloradmin.cn/o/783825.html

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

相关文章

【Linux命令200例】chattr改变文件的扩展属性

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

【人工智能】博弈、极小极大值、α-β剪枝、截断测试

文章目录 博弈极小极大值α-β剪枝截断测试博弈 极小极大值 假设两个玩家都以最大化自身利用进行博弈举例: 计算机假设在它移动后,对手会选择最小化的行动计算机在考虑自己的行动和对手的最佳行动后选择最佳行动算法实现

【python】在matlab中调用python

参考 Matlab调用Python - 知乎 (zhihu.com) 说一下我犯的错误&#xff1a; 1、电脑上有没有python都可以&#xff0c;我以为anaconda里的python不行&#xff0c;又重新下了一个python3.8 实际上导入的时候可以用 pyversion(D:\myDownloads\anaconda\envs\pytorch38\pytho…

Docker 全栈体系(五)

Docker 体系&#xff08;高级篇&#xff09; 二、DockerFile解析 1. 是什么&#xff1f; Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 1.1 概述 1.2 官网 https://docs.docker.com/engine/reference/builder/ 1…

freeBSD:ssh登录root

/etc/inetd.conf ee /etc/inetd.conf 去掉# /etc/rc.conf ee /etc/rc.conf 添加一句 sshd_enable"YES" /etc/ssh/sshd_config vi /etc/ssh/sshd_config 22行可以修改端口号&#xff0c;非必要就默认22 36行 去掉# 后面修改成 yes 61 PasswordAuthentication…

Python处理Elasticsearch

简介&#xff1a;Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性&#xff0c;能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤&…

Golang数据库连接池技术原理与实现

1 为什么需要连接池&#xff1f; 如果不用连接池&#xff0c;而是每次请求都创建一个连接是比较昂贵的&#xff0c;因此需要完成3次tcp握手。同时在高并发场景下&#xff0c;由于没有连接池的最大连接数限制&#xff0c;可以创建无数个连接&#xff0c;耗尽文件描述符。连接池…

【软件测试】什么是selenium

1.seleniumJava环境搭建 前置条件: Java最低版本要求为8,浏览器使用chrome浏览器 1.1下载chrome浏览器 https://www.google.cn/chrome/ 1.2查看浏览器版本 点击关于Google chrome. 记住版本的前三个数. 1.3下载浏览器驱动 http://chromedriver.chromium.org/downloads 下载…

JS案例:在浏览器实现自定义菜单

目录 前言 设计思路 BaseElem Menu CustomElement BaseDrag Drag Resize 最终效果 总结 相关代码 前言 分享一下之前公司实现自定义菜单的思路&#xff0c;禁用浏览器右键菜单&#xff0c;使用自定义的菜单将其代替&#xff0c;主要功能有&#xff1a;鼠标右键调出菜…

二、基本数据类型和表达式

2.1数据类型 数据类型占用字节数取值范围bool1true 或 falsechar1-128 到 127 或 0 到 255 &#xff08;取决于是否带符号&#xff09;unsigned char10 到 255short2-32,768 到 32,767unsigned short20 到 65,535int4-2,147,483,648 到 2,147,483,647unsigned int40 到 4,294,…

ES6基础知识二:ES6中数组新增了哪些扩展?

一、扩展运算符的应用 ES6通过扩展元素符…&#xff0c;好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, &l…

12 扩展Spring MVC

12.1 实现页面跳转功能 页面跳转功能&#xff1a;访问localhost:8081/jiang会自动跳转到另一个页面。 首先&#xff0c;在config包下创建一个名为MyMvcConfig的配置类&#xff1a; 类上加入Configuration注解&#xff0c;类实现WebMvcConfiger接口&#xff0c;实现里面的视图跳…

Python入门【列表元素访问和计数 、切片操作、列表的遍历、复制列表所有的元素到新列表对象、多维列表、元组tuple】(五)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

OSI 和 TCP/IP 网络分层模型详解(基础)

OSI模型: 即开放式通信系统互联参考模型&#xff08;Open System Interconnection Reference Model&#xff09;&#xff0c;是国际标准化组织&#xff08;ISO&#xff09;提出的一个试图使各种计算机在世界范围内互连为网络的标准框架&#xff0c;简称OSI。 OSI 七层模型 OS…

两个数组的dp问题(1)--动态规划

一)最长公共子序列: 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 一)定义一个状态表示:根据经验题目要求 1)选取第一个字符串[0&#xff0c;i]区间以及第二个字符串[0&#xff0c;j]区间作为研究对象&#xff0c;先选取两段区间研究问题&#xff0c;先求出[0…

即时零售业务调研2022

调研时间22年7月 核心观点&#xff1a; 即时零售业务正处于爆发期疫情催化&#xff0c;线下商家和零售平台处于双向奔赴的蜜月期未来规模会是万亿市场&#xff0c;市场不容小觑&#xff0c;广告业务重要 业务对比优势 平台模式护城河是&#xff1a;线上流量线下配送网络&am…

芯洲科技-降压DCDC开关电源参考选型目录

芯洲科技&#xff0c;是国内领先的中高压DC-DC&#xff08;直流转直流&#xff09;功率转换芯片供应商。北京冠宇铭通 一级代理。 国产化替代&#xff0c;对标TI&#xff0c;有很多料号可直接PIN TO PIN&#xff0c;比如TPS562200(SOT23-6)\TPS563200(SOT23-6)/TPS54540/LMR140…

02、什么是TPS和响应时间

在这个图中&#xff0c;定义了三条曲线、三个区域、两个点以及三个状态描述。 三条曲线&#xff1a;吞吐量的曲线&#xff08;紫色&#xff09;、使用率 / 用户数曲线&#xff08;绿色&#xff09;、响应时间曲线&#xff08;深蓝色&#xff09;。三个区域&#xff1a;轻负载区…

【IDEA】idea 无法打包文件到 target 如何处理.

文章目录 1. 一般原因就是文件的资源没有设置2. 还有可能是打包的配置中没有包含xxx.xml,xxx.sql等3. 还有一种情况是&#xff0c;因为缓存 1. 一般原因就是文件的资源没有设置 比如常见的 maven 项目&#xff0c;必须标记资源的类别&#xff0c;否则就有可能无法编译到target…

unity——Rigidbody(刚体)

官方手册&#xff1a;Rigidbody 官方API&#xff1a;Rigidbody Api 组件简介 刚体 (Rigidbody)使__游戏对象__的行为方式受物理控制。刚体可以接受力和扭矩&#xff0c;使对象以逼真的方式移动。任何游戏对象都必须包含受重力影响的刚体&#xff0c;行为方式基于施加的作用力…