机器学习入门之异常检测
文章目录
- 异常检测(Anomaly Detection)
- 高斯分布
- 异常检测与有监督学习对比
- 特征选择
- 误差分析
- 多元高斯分布
- 多元高斯分布与一般高斯分布对比
本文为吴恩达机器学习课程的笔记系列第七篇,主要学习异常检测算法。
异常检测(Anomaly Detection)
异常检测属于非监督问题。异常检测是机器学习算法的一个常见应用,是对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。简单来说,当正样本比较多时,通过对正样本的学习,机器学会正样本的特征,从而对异常样本有了识别能力。
异常检测的核心就在于找到一个概率模型,帮助我们知道一个样本落入正常样本中的概率,从而帮助我们区分正常和异常样本。
高斯分布
高斯分布模型是异常检测中常用的概率模型。其概率密度函数如下:
p(x,μ,σ2)=12πσexp(−(x−μ)22σ2)p(x,\mu,\sigma^2)=\dfrac{1}{\sqrt{2\pi}\sigma}exp(-\dfrac{(x-\mu)^2}{2\sigma^2})p(x,μ,σ2)=2πσ1exp(−2σ2(x−μ)2)
其中:
- μ=1m∑i=1mx(i)\mu=\dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)}μ=m1i=1∑mx(i)
- σ2=1m∑i=1m(xj(i)−μj)2\sigma^2=\dfrac{1}{m}\sum\limits_{i=1}^{m}(x^{(i)}_j-\mu_j)^2σ2=m1i=1∑m(xj(i)−μj)2
应用到异常检测算法,对于mmm 个样本的数据集,针对每一个特征,进行参数估计:
- μj=1m∑i=1mxj(i)\mu_j=\dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)}_jμj=m1i=1∑mxj(i)
- σj2=1m∑i=1m(x(i)−μ)2\sigma^2_j=\dfrac{1}{m}\sum\limits_{i=1}^{m}(x^{(i)}-\mu)^2σj2=m1i=1∑m(x(i)−μ)2
假设每个样本有nnn个特征,即 xix_ixi 变成一个 nnn 维的向量 [xi(1)xi(2)⋮xi(n)]\begin{bmatrix}x_i^{(1)}\\x_i^{(2)}\\ \vdots \\x_i^{(n)}\end{bmatrix}⎣⎢⎢⎢⎢⎡xi(1)xi(2)⋮xi(n)⎦⎥⎥⎥⎥⎤
对于一个训练实例,有:
p(x)=∏j=1n(xj,μ,σ2)=∏j=1n12πσexp(−(x−μ)22σ2)p(x)=\prod\limits_{j=1}^{n}(x_j,\mu,\sigma^2)=\prod\limits_{j=1}^{n}\dfrac{1}{\sqrt{2\pi}\sigma}exp(-\dfrac{(x-\mu)^2}{2\sigma^2})p(x)=j=1∏n(xj,μ,σ2)=j=1∏n2πσ1exp(−2σ2(x−μ)2)
如何判断样本是否异常?
我们选择一个ϵ\epsilonϵ,将 p(x)=ϵp(x)=\epsilonp(x)=ϵ 作为我们的判定边界,当 p(x)>ϵp(x)>\epsilonp(x)>ϵ 时预测数据为正常数据,否则为异常。
异常检测与有监督学习对比
异常检测 | 有监督学习 |
---|---|
数据非常偏斜,非常少量的正向类(异常数据y=1y=1y=1 ), 大量的负向类(y=0y=0y=0) | 数据分布均匀,同时有大量的正向类和负向类 |
异常的类型不一,很难根据对现有的异常数据(即正样本)来训练算法。 | 有足够多的正样本,可以根据对正样本的拟合来知道正样本的形态,从而预测新来的样本是否是正样本。 |
未来遇到的异常可能与已掌握的异常、非常的不同。 | 未来遇到的正向类实例可能与训练集中的非常近似。 |
例如: 欺诈行为检测 生产(例如飞机引擎)检测数据中心的计算机运行状况 | 例如:邮件过滤器 天气预报 肿瘤分类 |
特征选择
我们使用异常检测算法时,是假设数据集特征符合高斯分布的。但有时候数据集可能像下图左边一样,这时直接用异常检测算法也是可以得出结果,但一般我们可以对数据进行一些转换如取对数操作,将其转换为高斯分布。
误差分析
有时候,我们可能发现某个异常样本的p(x)p(x)p(x) 值高于ϵ\epsilonϵ,我们对此进行分析,观察是哪些异常数据被预测为正常。下面以监测机房中的服务器异常为例:
假设我们选取如下特征:
x1=网络流量;x2=CPU负载x_1=网络流量;x_2=CPU负载x1=网络流量;x2=CPU负载
当出现一个异常:CPU负载很高,而网络流量很低,服务器卡死,无法通信。如下图:
此时的p(x)p(x)p(x) 值也会很高,为了识别这一异常状况,我们可以构建新的特征:x3=CPU负载网络流量x_3=\dfrac{CPU负载}{网络流量}x3=网络流量CPU负载 ,当上述异常发生时,这个特征便会变得很大,有利于我们识别出来。
多元高斯分布
一般的高斯模型因为是同时累乘每个特征的偏差,所以会创造出一个较大的判定边界。
模型定义:
p(x,μ,Σ)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x,\mu,\Sigma)=\dfrac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\dfrac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))p(x,μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
- μ=1m∑i=1mx(i)\mu=\dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)}μ=m1i=1∑mx(i)
- Σ=1m∑i=1m(x(i)−μ)(x(i)−μ)T=1m(X−μ)T(X−μ)\Sigma=\dfrac{1}{m}\sum\limits_{i=1}^{m}(x^{(i)}-\mu)(x^{(i)}-\mu)^T=\dfrac{1}{m}(X-\mu)^T(X-\mu)Σ=m1i=1∑m(x(i)−μ)(x(i)−μ)T=m1(X−μ)T(X−μ)
其中,μ\muμ 是一个向量,表示样本均值,Σ\SigmaΣ 表示样本协方差矩阵。
先考虑各个维度不相关,各个维度之间不相关的多元正态分布概率密度其实就是各个维度的正态分布概率密度函数的乘积,其实是因为各变量之间互不相关,因此联合概率密度等于各自概率密度的乘积。
p(x)=12πσ1exp(−(x1−μ1)22σ12)12πσ2exp(−(x2−μ2)22σ22)...12πσnexp(−(xn−μn)22σn2)=1(2π)n2σ1σ2...σnexp{−12[((x1−μ1)2σ12)+((x2−μ2)22σ22)+...+((xn−μn)22σn2)]}\begin{aligned} p(x)=&\dfrac{1}{\sqrt{2\pi}\sigma_1}exp(-\frac{(x_1-\mu_1)^2}{2\sigma_1^2})\dfrac{1}{\sqrt{2\pi}\sigma_2}exp(-\frac{(x_2-\mu_2)^2}{2\sigma_2^2})...\dfrac{1}{\sqrt{2\pi}\sigma_n}exp(-\frac{(x_n-\mu_n)^2}{2\sigma_n^2}) \\ =&\dfrac{1}{{(2\pi)}^{\frac{n}{2}}\sigma_1\sigma_2...\sigma_n}exp\{-\frac{1}{2}[(\frac{(x_1-\mu_1)^2}{\sigma_1^2})+(\frac{(x_2-\mu_2)^2}{2\sigma_2^2})+...+(\frac{(x_n-\mu_n)^2}{2\sigma_n^2})]\} \end{aligned} p(x)==2πσ11exp(−2σ12(x1−μ1)2)2πσ21exp(−2σ22(x2−μ2)2)...2πσn1exp(−2σn2(xn−μn)2)(2π)2nσ1σ2...σn1exp{−21[(σ12(x1−μ1)2)+(2σ22(x2−μ2)2)+...+(2σn2(xn−μn)2)]}
右边项:
((x1−μ1)2σ12)+((x2−μ2)2σ22)+...+((xn−μn)2σn2)=[x1−μ1,x2−μ2,...,xn−μn][1σ120⋯001σ22⋯0⋮⋮⋱⋮00⋯1σn2][x1−μ1x2−μ2⋮xn−μn]=(X−μ)TΣ−1(X−μ)\begin{aligned} &(\frac{(x_1-\mu_1)^2}{\sigma_1^2})+(\frac{(x_2-\mu_2)^2}{\sigma_2^2})+...+(\frac{(x_n-\mu_n)^2}{\sigma_n^2})\\&=[x_1-\mu_1,x_2-\mu_2,...,x_n-\mu_n]\begin{bmatrix}\frac{1}{\sigma_1^2}&0&\cdots&0\\0&\frac{1}{\sigma_2^2}&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\frac{1}{\sigma_n^2}\end{bmatrix} \begin{bmatrix}x_1-\mu_1\\x_2-\mu_2 \\ \vdots \\ x_n-\mu_n\end{bmatrix}\\&=(X-\mu)^T\Sigma^{-1}(X-\mu) \end{aligned} (σ12(x1−μ1)2)+(σ22(x2−μ2)2)+...+(σn2(xn−μn)2)=[x1−μ1,x2−μ2,...,xn−μn]⎣⎢⎢⎢⎢⎡σ1210⋮00σ221⋮0⋯⋯⋱⋯00⋮σn21⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎡x1−μ1x2−μ2⋮xn−μn⎦⎥⎥⎥⎤=(X−μ)TΣ−1(X−μ)
如果各个维度是相关的,那怎么办呢?
实际上我们可以利用化归的思想,把相关变成不相关,
方向变换:u1=[u1(1)u1(2)],u2=[u2(1)u2(2)]u_1=\begin{bmatrix}u_1^{(1)}\\u_1^{(2)} \end{bmatrix}, u_2=\begin{bmatrix}u_2^{(1)}\\u_2^{(2)} \end{bmatrix}u1=[u1(1)u1(2)],u2=[u2(1)u2(2)],使得各个维度之间不相关,下面是推导:
X^=[u1Tu2T]X=UTX=[X^1X^2]\hat{X}=\begin{bmatrix}u_1^T\\u_2^T \end{bmatrix} X=U^TX=\begin{bmatrix}\hat{X}_1\\\hat{X}_2 \end{bmatrix} \\ X^=[u1Tu2T]X=UTX=[X^1X^2]
X^−uX^σX^=[X^1−uX^1σX^1X^2−uX^2σX^2]=[1σX^1001σX^2][X^1−uX^1X^2−uX^2]=D(X^−μX^)=D(UTX−UTμX)=DUT(X−μX)=Z\begin{aligned} \dfrac{\hat{X}-u_{\hat{X}}}{\sigma_{\hat{X}}} =& \begin{bmatrix}\dfrac{\hat{X}_1-u_{\hat{X}_1}}{\sigma_{\hat{X}_1}}\\\dfrac{\hat{X}_2-u_{\hat{X}_2}}{\sigma_{\hat{X}_2}} \end{bmatrix} \\ =&\begin{bmatrix}\dfrac{1}{\sigma_{\hat{X}_1}}&0\\0&\dfrac{1}{\sigma_{\hat{X}_2}} \end{bmatrix}\begin{bmatrix}\hat{X}_1-u_{\hat{X}_1}\\\hat{X}_2-u_{\hat{X}_2}\end{bmatrix} \\ =&D(\hat{X}-\mu_{\hat{X}})\\ =&D(U^TX-U^T\mu_{X})=DU^T(X-\mu_X)=Z \end{aligned} σX^X^−uX^====⎣⎢⎢⎢⎡σX^1X^1−uX^1σX^2X^2−uX^2⎦⎥⎥⎥⎤⎣⎢⎢⎡σX^1100σX^21⎦⎥⎥⎤[X^1−uX^1X^2−uX^2]D(X^−μX^)D(UTX−UTμX)=DUT(X−μX)=Z
UDTDUT=UΣX^−1UT=ΣX−1UD^TDU^T =U\Sigma_{\hat{X}}^{-1}U^T= \Sigma_X^{-1} UDTDUT=UΣX^−1UT=ΣX−1
最后的概率:
p(x)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x)=\dfrac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\dfrac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)) p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
应用到异常检测的算法,首先对各个样本进行参数估计:
- μ=1m∑i=1mx(i)\mu=\dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)}μ=m1i=1∑mx(i)
- Σ=1m∑i=1m(x(i)−μ)(x(i)−μ)T\Sigma=\dfrac{1}{m}\sum\limits_{i=1}^{m}(x^{(i)}-\mu)(x^{(i)}-\mu)^TΣ=m1i=1∑m(x(i)−μ)(x(i)−μ)T
当新样本xxx到来时,计算p(x)p(x)p(x):
p(x)=1(2π)n2∣Σ∣12exp(−12(x−μ)TΣ−1(x−μ))p(x)=\dfrac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\dfrac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
多元高斯分布与一般高斯分布对比
一般高斯分布模型:p(x)=p(x1,μ1,σ12)×p(x2,μ2,σ22)×...×p(xn,μn,σn2)p(x)=p(x_1,\mu_1,\sigma_1^2)\times p(x_2,\mu_2,\sigma_2^2)\times ...\times p(x_n,\mu_n,\sigma_n^2)p(x)=p(x1,μ1,σ12)×p(x2,μ2,σ22)×...×p(xn,μn,σn2)
可见一般高斯模型是多元高斯模型的一个特例,也就是当协方差矩阵 Σ\SigmaΣ 的上三角和下三角为000的时候。即Σ=[σ120...00σ22...000⋱000...σn2]\Sigma=\begin{bmatrix}\sigma_1^2&0&...&0\\0&\sigma_2^2&...&0\\0&0&\ddots&0\\0&0&...&\sigma_n^2\end{bmatrix}Σ=⎣⎢⎢⎡σ120000σ2200......⋱...000σn2⎦⎥⎥⎤
两者的区别:
一般高斯分布模型 | 多元高斯分布模型 |
---|---|
需要创建一些特征(比如组合x1,x2x_1,x_2x1,x2)来描述某些特征的相关性 | 自动描述了各个特征的相关性 |
计算复杂度低,适于高维特征 | 计算较复杂,计算量大 |
即使样本数mmm较小也适用 | 必须满足m>nm>nm>n,且各个特征必须线性无关,否则协方差矩阵将不可逆 |
上一篇文章地址:机器学习入门之PCA与ICA
机器学习入门之异常检测相关推荐
- 基于机器学习的web异常检测(转)
阿里聚安全 Web防火墙是信息安全的第一道防线.随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战.传统web入侵检测技术通过维护规则集对入侵访问进行拦截.一方面,硬规则在灵活 ...
- 基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否...
基于机器学习的web异常检测 from: https://jaq.alibaba.com/community/art/show?articleid=746 Web防火墙是信息安全的第一道防线.随着网络 ...
- 基于机器学习的web异常检测
Web防火墙是信息安全的第一道防线.随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战.传统web入侵检测技术通过维护规则集对入侵访问进行拦截.一方面,硬规则在灵活的黑客面前, ...
- 机器学习中的异常检测
机器学习最常用的应用程序之一是异常检测.寻找和识别异常有助于防止欺诈.对手攻击和网络入侵,所有这些都可能危及公司的未来. 在这篇文章中,我们将讨论如何进行异常检测,可以使用哪些机器学习技术,以及使用机 ...
- 基于机器学习的KPI异常检测(当初的讲课课件)
基于机器学习的KPI异常检测(当初的讲课课件)
- 入门机器学习(十八)--异常检测(Anomaly Detection)
异常检测(Anomaly Detection) 1. 问题动机(Problem Motivation) 2. 高斯分布(Gaussian Distribution) 3. 算法(Algorithm) ...
- 【机器学习基础】关于如何使用机器学习来做异常检测的7个问题
作者:David Sweenor 编译:ronghuaiyang 导读 异常检测的一些入门问题. 问问题是学习的最好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的 ...
- 关于如何使用机器学习来做异常检测的7个问题
导读 异常检测的一些入门问题. 问问题是学习的好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的异常检测之类的话题上.在这种情况下,最好倾听别人的问题,让他们的思路来指导 ...
- 机器学习中的异常检测手段
1. 异常检测介绍 总体来讲,异常检测问题可以概括为两类:一是对结构化数据的异常检测,二是对非结构化数据的异常检测. 对结构化数据的异常检测的解决思想主要是通过找出与正常数据集差异较大的离群点,把离群 ...
- 机器学习实践七----异常检测和推荐系统
Anomaly detection 异常检测是机器学习中比较常见的应用,它主要用于非监督学习问题,从某些角度看, 它又类似于一些监督学习问题. 什么是异常检测?来看几个例子: 例1. 假设是飞机引擎制 ...
最新文章
- Tensorflow—Droupout
- dataset__getitem___一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
- java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站
- Visual Question Answering概述
- Kotlin 继续助力 Android 开发,并计划涉足更多领域
- STM32之独立看门狗与窗口看门狗总结
- 1月24日学习内容整理:Django的admin组件源码分析及流程
- Python获取两个列表list的不同之处
- python 取列表偶数和奇数位置的值
- Spring MVC 之 请求url 带后缀的情况
- 论文笔记《Attention Is All You Need》
- 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
- 全自动采集程序 php,快看CMS全自动采集影视程序
- Android 分享到新浪微博
- 『每周译Go』并发安全的集中式指针管理设施
- 数据三等分离散python_数据自习室01-描述性统计量
- VS2008+AnkhSVN搭建源代码管理版本库
- 屏幕小于6英寸的手机_6英寸是多大?6英寸是多少厘米?
- Dense Dilated Network for Few Shot Action Recognition
- 美团、飞猪基础架构组实习经历分享
热门文章
- SEO优化的四个建议
- 翻译如重构,期待您的单元测试
- Acwing-45. 之字形打印二叉树
- 软件开发的一些注意事项
- 邮件协议POP3/IMAP/SMTP服务的区别 常用邮箱的 IMAP/POP3/SMTP 设置
- linux搭建云存储服务,CentOS 6.3搭建个人私有云存储ownCloud
- pyppeteer如何更改默认chrome路径
- linux中如何开启vnc服务端口,Linux下vnc配置及启动
- 紧贴潮流,初心未改:OpenInfra Days China升级回归,打造专属OpenStackers的开源大趴
- idea2019 换背景