机器学习9:异常检测

起因

例如:一个飞机引擎,它具有:功率、振动强度等特征。

在生产时,怎么自动判断一个飞机引擎是好是坏。

这需要用到正常的飞机引擎的样本集合(每个样本包括n个特征),再通过该样本集合判断待检测的飞机引擎是否不正常。

在这里插入图片描述

如上图,通过 p ( x ) p(x) p(x)进行判断,当 p ( x ) ≥ ϵ p(x)\ge \epsilon p(x)ϵ时判断为正常,相反,则不正常。

除处理飞机引擎外,还可以用来识别异常用户和异常计算机。

高斯分布

X ∽ N ( μ , σ 2 ) X \backsim N(\mu,\sigma^2) XN(μ,σ2) P ( x ; μ , σ 2 ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) P(x;\mu,\sigma^2)=\frac{1}{\sqrt{\smash[b]{2\pi}}\sigma}exp(-\frac{(x-\mu)^2}{2\sigma^2}) P(x;μ,σ2)=2π σ1exp(2σ2(xμ)2)

其中, μ \mu μ σ \sigma σ的参数的作用,如下:
在这里插入图片描述

实际计算中, μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum_{i=1}^mx^{(i)} μ=m1i=1mx(i) σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^2=\frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu)^2 σ2=m1i=1m(x(i)μ)2
其中, σ 2 \sigma^2 σ2中的 1 m \frac{1}{m} m1可以是 1 m − 1 \frac{1}{m-1} m11

算法过程

  1. 通过样本训练集,计算得到 μ 1 , … , μ n \mu_1,\dots,\mu_n μ1,,μn σ 1 2 , … , σ n 2 \sigma_1^2,\dots,\sigma_n^2 σ12,,σn2
  2. 将要检测异常的样本代入下式:
    P ( x ) = P ( x 1 ; μ 1 , σ 1 2 ) × ⋯ × P ( x n ; μ n , σ n 2 ) P(x)=P(x_1;\mu_1,\sigma^2_1)\times \dots\times P(x_n;\mu_n,\sigma^2_n) P(x)=P(x1;μ1,σ12)××P(xn;μn,σn2)
    如果 P ( x ) &lt; ϵ P(x)\lt \epsilon P(x)<ϵ,则检测到异常
    其中, ϵ \epsilon ϵ可设为0.02

评估算法好坏

获取标记好是否异常的训练集、验证集和测试集:比例是6:2:2

例如训练集中6000个正常的;验证集中2000个好的,10个异常的;测试集2000个好的,10个异常的

异常样本的数量大概2-50个。

在利用训练集训练以上各参数后,用验证集进行验证,通过以下参数进行评估:

  1. 正确检测为异常,错误检查为异常,正确检查到正常,错误检查为正常
  2. 查准率(正确检测为异常的数量与全部检测为异常的数量的比)和召回率(正确检测为异常的数量与验证集中异常样本的数量的比)
  3. 算F分值

异常检测和监督学习

异常检测监督学习
y=1的样本很少(异常很少)y=1很多
异常的起因很多,且y=1很少,很难通过监督学习去进行学习足够的y=1的样本去学习
可以应用于:欺诈检测、制造业如飞机引擎、数据中心的监控计算机垃圾邮件、天气预测、癌症分类

其实异常检测就是y=1很少的监督学习(数据偏斜)

如何选择特征

让数据看起来更像高斯分布:
在这里插入图片描述
x 1 ← l o g ( x 1 ) 或 x 1 ← l o g ( x 1 + 1 ) 或 x 1 ← x 1 或 x 1 ← x 1 1 3 x_1 \gets log(x_1)\\或 x_1 \gets log(x_1+1)\\或 x_1 \gets \sqrt{x_1}\\或 x_1 \gets x_1^{\frac{1}{3}} x1log(x1)x1log(x1+1)x1x1 x1x131

或者,也可以新建特征,因为有些特征要组合才能表示是否异常,比如 x 3 x_3 x3表示CPU负载,而 x 4 x_4 x4表示网络流量,那么,新的特征是 x 3 x 4 \frac{x_3}{x_4} x4x3,因为如果网络流量不变,而CPU负载却很高,就很有可能发生异常

另外,很可能存在的问题是,P对于正常样本或是异常样本来说,都过大,或者说,样本点分布均匀,难以确定异常。

因此,需要挑选在异常样本中,值过大或过小的特征组成样本。

多元高斯分布

如下图,有的数据不是呈圆形分布,而是呈扁圆形
在这里插入图片描述

这时,就不用求 p ( x 1 ) , … , p ( x n ) p(x_1),\dots,p(x_n) p(x1),,p(xn)了,应该求如下模型:
p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)) p(x;μ,Σ)=(2π)2nΣ211exp(21(xμ)TΣ1(xμ))
其中:
μ = 1 m ∑ i = 1 m x ( i ) Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \mu = \frac{1}{m}\sum_{i=1}^mx^{(i)} \\ \Sigma=\frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu)(x^{(i)}-\mu)^T μ=m1i=1mx(i)Σ=m1i=1m(x(i)μ)(x(i)μ)T

∣ Σ ∣ |\Sigma| Σ运算求得该矩阵的行列式,在octave中使用det()函数算得

Σ \Sigma Σ μ \mu μ(在二维特征时)的变化可视化如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

算法过程如下:

  1. 通过训练集训练得到 μ \mu μ Σ \Sigma Σ
  2. 通过上述模型计算待检测的样本,如果 p ( x ) &lt; ϵ p(x)\lt\epsilon p(x)<ϵ,则标记为异常

多元高斯分布与高斯分布的关系在于,矩阵 Σ \Sigma Σ从左上到右下的对角线,对应原高斯分布中的参数 σ 1 2 , … , σ n 2 \sigma_1^2,\dots,\sigma_n^2 σ12,,σn2

多元高斯与原高斯的对比如下:

原高斯多元高斯
模型是将多个特征的高斯分布密度函数相乘用矩阵来计算模型
通常要自己创建特征,比如cpu负载与网络流量的比,来衡量是否异常能够自动捕捉特征间的关系
计算量小计算量大,牵涉到矩阵运算
样本很少也可以算样本数量要比特征数量多,否则矩阵 Σ \Sigma Σ不可逆,一般 m ≥ 10 n m\ge10n m10n
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值