异常检测

学习地址

异常检测定义

以飞机引擎检测为例,从飞机引擎的各项指标中提取特征,同样一台新的引擎也可以提取同类特征,目的就是检测Xtest是否存在异常。

比如,给出的训练集全是正常的数据或者异常的数据,对无标签数据建模p(X),表示分布概率,如果测试样本的概率小于某个阈值ε,那么就检测为异常
LT1_8_SH49Y6Q8XX__0O_V1.png

异常检测例子
  1. 识别用户行为是否异常:提取用户行为特征,对数据分布概率进行建模, 识别异常用户
  2. 工厂生产
  3. 数据中心电脑检测器
    DFWWGF9X86_QF_9@9__KBAW.png

高斯分布

也叫正态分布

  • 如果一个随机变量x服从一个数学期望为μ,方差为σ2的分布模型,则记为x~N(μ,σ2)。 其中,期望值μ决定了概率密度函数分布的中心位置,标准差σ决定了分布幅度。
  • N(0,1)称为标准正态分布
  • 其概率密度函数为f(x)=e-(x-μ)2/(2σ2) / (σ√2π)
  • 下图中p(x;μ,σ2)的写法和p(x)的含义是一样的,只是表示x的概率密度由后面两个变量共同决定
    _Q_B`C1_7_H@DLHZN~FNS9D.png
参数估计

如果知道样本数据,如何选取μ和σ的高斯分布?
TEJJ_902S___HH__9F`_I59.png

异常检测算法

利用高斯概率模型建立一个异常检测算法
每一个独立特征都服从一个不同的高斯分布
TYBI4@_08LU9R0AX`UC@N43.png

算法:
N6M7_URYQC_5__5WG8X_PQM.png
_`QEMP3_V_ASU`K@MPII_JH.png

开发和评估异常检测

在实际应用中,为了评估所设计的算法,我们可能希望有一个数值来告诉我们这个算法评估系统的好坏

设计方法如下:
ZOT4L_JNMUY_FQ0ME__0UD3.png
如何设计数据集呢:
假如有10000个正常飞机引擎,20个异常,那么通常用60000个正常引擎作为训练集,20000+10个作为交叉验证集,剩下20000+10个作为测试集(不建议使用相同的交叉验证集和测试集)

之后算法需要返回的就是下面的这些评估指标

_V7_UT_G4_~2E1FO_WCYH_A.png
关于阈值ε,应该多尝试尝试不同的数值。

异常检测 V.S. 监督学习

在上一小节使用的方法和数据是带标签的,但是如果是带标签的数据为什么不使用监督学习的方法来分类呢?
在异常检测中,正负样本的数量往往差距很大,很难从数量少的样本中学习到足够的知识,当出现未见过的异常时,使用高斯概率分布可以解决这个问题。
在监督学习中,未来会出现的数据很可能和训练的数据也是相同的。
S7TCQT__@_ULLN4I`VIO9MU.png

设计异常检测算法

非高斯特征

对数据进行概率图化,发现所选取的特征并不符合高斯分布?

  • 对数据进行变换(对数变换或者指数变换),使得变换后的数据更符合高斯概率模型
    HQV_K__THG_NVZE7ESI_N_I.png

    误差分析

    这里其实就是一个设计特征的问题,我们希望异常数据的高斯概率看起来也是异常的,但如果所有数据的高斯概率都一样的分布,怎么办?

    • 使用异常数据创造新的特征,这样正常数据的分布都集中在某些地方,越集中概率越大,而异常数据所产生的新特征就很明显了,这样 p(x) = p(x1; ) p(x2; ) … p(xn; ) 就很容易区分出来了
    • 使用既不是很大也不是很小的数据
    • 如果怀疑某些特征有问题,可以对不同特征进行运算创造新的特征这样就更容易检测出问题
      Y_Q18__~CKNC9_HP_W__PSL.png

多变量高斯分布

不给每一维特征建立高斯概率模型,直接给整个数据集建立高斯概率模型
∑是 n*n 的协方差矩阵
μ是一个向量

N2ATW26BA_K_DN5ADMB40_6.png

基于多变量高斯分布的异常检测

知识回顾

BWVS_USAQ3S_ND__4`_A163.png
异常检测算法
XY_Y0BXSV~_8_3N6_6XYP6O.png

多元高斯分布模型与原始模型
8VNON6@0X@1JCPK_@_JH79K.png
两种模型的选择
NQ_O5BZ__GXQQ0@47X6L__2.png