Skip to content

第 15 章 异常检测

异常检测用于识别和大多数样本明显不同的样本。课程用飞机发动机、服务器监控等场景说明异常检测的用途。

15.1 问题的动机

异常检测常用于发现罕见问题。例如:

  • 飞机发动机异常。
  • 数据中心服务器异常。
  • 欺诈行为。

训练集中通常主要是正常样本,目标是判断新样本是否异常。

15.2 高斯分布

高斯分布也叫正态分布,由均值 mu 和方差 sigma^2 控制。

概率密度函数:

p(x;μ,σ2)=12πσexp((xμ)22σ2)

参数估计:

μ=1mi=1mx(i)σ2=1mi=1m(x(i)μ)2

15.3 算法

异常检测算法假设每个特征服从高斯分布,并估计每个特征的均值和方差。

对样本 x,计算:

p(x)=j=1np(xj;μj,σj2)

如果 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 traffic

15.7 多元高斯分布

普通异常检测模型把每个特征单独建模,再相乘得到 p(x)

多元高斯分布可以直接建模特征之间的相关性。

多元高斯分布参数:

  • 均值向量 mu
  • 协方差矩阵 Sigma

概率密度:

p(x;μ,Σ)=1(2π)n/2|Σ|1/2exp(12(xμ)TΣ1(xμ))

15.8 使用多元高斯分布进行异常检测

多元高斯异常检测流程:

  1. 用训练集估计 muSigma
  2. 对新样本计算 p(x)
  3. 如果 p(x) < epsilon,判为异常。

多元高斯可以捕捉特征之间的相关性,但计算协方差矩阵的逆要求样本数量足够,并且特征不能冗余太严重。

如果训练样本数量不大,或者特征数量很大,普通高斯模型可能更稳。

Powered by VitePress