一般的异常检测问题为:对于给定的一系列样本,给出一个新的测试样本,判断该测试样本是否属于这系列已知样本/该样本是否异常样本。
例如:对于一批正常的引擎,监测带有一系列的数据(散热,震动强度),对于一个新的引擎,测得相关的数据,判断其是否异常引擎。
方法
利用统计学知识,建立数据分布模型,并用已知样本进行参数估计。然后利用分布模型继续概率估计。一般选择使用高斯分布。
高斯分布
单元高斯分布
$$
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$
算法
- 对于给定的训练集,从中选择能够反映出是否异常的特征
- 对于每一个特征,进行参数估计
- 得出模型 $$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}$$
- 对于测试样本,如果 $p(x)<\varepsilon$, 则为异常
选择特征
- 满足高斯分布,不满足的可以通过变形生成满足高斯分布的特征
- 由异常样本出发找特征
- 相关的特征可以构造新特征
评估
同一般的机器学习,我们将样本分成训练集、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$ 可逆