机器学习9:异常检测

起因

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

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

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

机器学习9:异常检测

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

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

高斯分布

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

其中,μ\muσ\sigma的参数的作用,如下:
机器学习9:异常检测

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

算法过程

  1. 通过样本训练集,计算得到μ1,,μn\mu_1,\dots,\mu_nσ12,,σn2\sigma_1^2,\dots,\sigma_n^2
  2. 将要检测异常的样本代入下式:
    P(x)=P(x1;μ1,σ12)××P(xn;μn,σn2) P(x)=P(x_1;\mu_1,\sigma^2_1)\times \dots\times P(x_n;\mu_n,\sigma^2_n)
    如果P(x)<ϵP(x)\lt \epsilon,则检测到异常
    其中,ϵ\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很少的监督学习(数据偏斜)

如何选择特征

让数据看起来更像高斯分布:
机器学习9:异常检测
x1log(x1)x1log(x1+1)x1x1x1x113 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}}

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

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

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

多元高斯分布

如下图,有的数据不是呈圆形分布,而是呈扁圆形
机器学习9:异常检测

这时,就不用求p(x1),,p(xn)p(x_1),\dots,p(x_n)了,应该求如下模型:
p(x;μ,Σ)=1(2π)n2Σ12exp(12(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))
其中:
μ=1mi=1mx(i)Σ=1mi=1m(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

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

Σ\Sigmaμ\mu(在二维特征时)的变化可视化如下:
机器学习9:异常检测

机器学习9:异常检测

机器学习9:异常检测

算法过程如下:

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

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

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

原高斯 多元高斯
模型是将多个特征的高斯分布密度函数相乘 用矩阵来计算模型
通常要自己创建特征,比如cpu负载与网络流量的比,来衡量是否异常 能够自动捕捉特征间的关系
计算量小 计算量大,牵涉到矩阵运算
样本很少也可以算 样本数量要比特征数量多,否则矩阵Σ\Sigma不可逆,一般m10nm\ge10n