异常检测

一般的异常检测问题为:对于给定的一系列样本,给出一个新的测试样本,判断该测试样本是否属于这系列已知样本/该样本是否异常样本。

例如:对于一批正常的引擎,监测带有一系列的数据(散热,震动强度),对于一个新的引擎,测得相关的数据,判断其是否异常引擎。

方法

利用统计学知识,建立数据分布模型,并用已知样本进行参数估计。然后利用分布模型继续概率估计。一般选择使用高斯分布。

高斯分布

单元高斯分布

$$ p(x;\mu;\sigma)={1\over \sqrt{2\pi \sigma}}e^{(x-\mu)^2\over 2\sigma^2} $$
  • $\mu$为平均值,影响分布的对称轴
  • $\sigma^2$为方差,影响图形的胖瘦

参数估计

  • $\mu = {1\over m}\sum_{i=1}^mx^{(i)}$
  • $\sigma^2= {1\over m}\sum_{i=1}^m(x^{(i)}-\mu)^2$

算法

  1. 对于给定的训练集,从中选择能够反映出是否异常的特征
  2. 对于每一个特征,进行参数估计
  3. 得出模型 $$p(x)=\prod_{j=1}^n p(x_j;\mu_j;\sigma_j)=\prod_{j=1}^n{1\over \sqrt{2\pi \sigma_j}}e^{(x-\mu_j)^2\over 2\sigma_j^2}$$
  4. 对于测试样本,如果 $p(x)<\varepsilon$, 则为异常

选择特征

  1. 满足高斯分布,不满足的可以通过变形生成满足高斯分布的特征
  2. 由异常样本出发找特征
  3. 相关的特征可以构造新特征

评估

同一般的机器学习,我们将样本分成训练集、CV 集、测试集,其中训练集不含异常样本。

评估指标

因为样本为偏斜集(skewed class),所以不能直接计算准确率,我们采用 $$F_1score={PR\over P+R}$$

  • P:Precision 预测的准确率
  • R:Recall 召回率=真阳性/实际阳性

对比

因为其在测试时使用了带 label 的数据,类似于监督学习。

使用条件

  • 异常检测:

    • 异常样本数量很少,正常样本数量多
    • 异常的类型很多
    • 未来的异常类型不确定
  • 监督学习:

    • 正常异常样本都很多
    • 异常样本数量足够多到能够了解异常样本是什么样的

应用

  • 异常检测
    • 欺诈检测
    • 制造业
    • 监控设备
  • 监督学习
    • 垃圾邮件过滤
    • 天气预测
    • 癌症分类

多元高斯分布

$$p(x;\mu;\Sigma)={1\over {(2\pi)^{n\over2} |\Sigma|^{1\over 2}}}e^{(x-\mu)^T\Sigma^{-1} (x-\mu)}$$

多元高斯分布可以直接得出特征之间的相关性

对比

  • 多元高斯分布可以直接得出特征之间的相关性
  • 计算复杂
  • 必须满足 $m>n$, 且 $\Sigma$ 可逆