第 15 章 异常检测
异常检测用于识别和大多数样本明显不同的样本。课程用飞机发动机、服务器监控等场景说明异常检测的用途。
15.1 问题的动机
异常检测常用于发现罕见问题。例如:
- 飞机发动机异常。
- 数据中心服务器异常。
- 欺诈行为。
训练集中通常主要是正常样本,目标是判断新样本是否异常。
15.2 高斯分布
高斯分布也叫正态分布,由均值 mu 和方差 sigma^2 控制。
概率密度函数:
参数估计:
15.3 算法
异常检测算法假设每个特征服从高斯分布,并估计每个特征的均值和方差。
对样本 x,计算:
如果 p(x) 很小,说明这个样本在当前模型下出现概率很低,可以判断为异常。
判断规则:
text
p(x) < epsilon 判为异常
p(x) >= epsilon 判为正常15.4 开发和评价一个异常检测系统
如果有少量标记好的异常样本,可以用交叉验证集和测试集评估异常检测系统。
常见划分:
- 训练集:大量正常样本。
- 交叉验证集:正常样本加少量异常样本。
- 测试集:正常样本加少量异常样本。
由于异常样本很少,准确率可能不可靠。可以使用:
- 查准率
- 查全率
- F1 分数
通过交叉验证集选择阈值 epsilon。
15.5 异常检测与监督学习对比
异常检测适合:
- 正样本很少。
- 异常类型很多,未来可能出现没见过的新异常。
- 正常样本较多,容易建模正常行为。
监督学习适合:
- 正负样本都比较多。
- 未来样本和训练中的异常类型相似。
例如垃圾邮件分类通常适合监督学习,因为有大量垃圾邮件样本。
15.6 选择特征
异常检测依赖特征质量。
如果特征分布非常偏斜,可以尝试变换特征,让它更接近高斯分布,例如:
text
log(x)
sqrt(x)
x^(1/3)也可以构造新特征,让异常样本更容易暴露出来。例如服务器监控中,可以使用:
text
CPU load / network traffic15.7 多元高斯分布
普通异常检测模型把每个特征单独建模,再相乘得到 p(x)。
多元高斯分布可以直接建模特征之间的相关性。
多元高斯分布参数:
- 均值向量
mu - 协方差矩阵
Sigma
概率密度:
15.8 使用多元高斯分布进行异常检测
多元高斯异常检测流程:
- 用训练集估计
mu和Sigma。 - 对新样本计算
p(x)。 - 如果
p(x) < epsilon,判为异常。
多元高斯可以捕捉特征之间的相关性,但计算协方差矩阵的逆要求样本数量足够,并且特征不能冗余太严重。
如果训练样本数量不大,或者特征数量很大,普通高斯模型可能更稳。