异常检测

1 异常检测

1.1 高斯分布

假设每个特征都是服从高斯分布的:
X(j)N(μj,σj2), j=1,,n X^{(j)}\sim N(\mu_{j},\sigma_{j}^{2}),\ j=1,\cdots,n

假设每个特征之间是相互独立的,
p(x;μ,σ2)=j=1np(x(j);μj,σj2) p(x;\mu,\sigma^2) = \prod_{j=1}^{n}p(x^{(j)};\mu_{j},\sigma_{j}^{2})

决策函数:
y={1,p(x)<ϵ ()0,p(x)ϵ () y=\begin{cases}1, & p(x)<\epsilon\ (异常)\\ 0, & p(x)\geq \epsilon\ (正常) \end{cases}

1.2 异常检测算法

给定10000个正常数据,20个异常数据。

Step1正常数据 (6000正常数据) 估计参数 μj,σj2,j=1,,n\mu_{j},\sigma_{j}^{2},j=1,\cdots,n (极大似然估计)
μ^j=x(j)=1mi=1mxi(j)σ^j2=1mi=1m(xi(j)x(j))   m1, \begin{aligned} \hat\mu_{j} &= \overline x^{(j)} = \frac{1}{m}\sum_{i=1}^{m}x_{i}^{(j)}\\ \hat\sigma_{j}^{2} &= \frac{1}{\boxed{m}}\sum_{i=1}^{m}(x_{i}^{(j)}-\overline x^{(j)}) \\ &\quad\ \ \ \downarrow \\ &数理统计中用的是m-1, 但是在大样本下两者差别不大 \end{aligned}
Step2 用验证集 (2000个正常数据,10个异常数据) 预测
y={1,p(x)<ϵ ()0,p(x)ϵ () y=\begin{cases}1, & p(x)<\epsilon\ (异常)\\ 0, & p(x)\geq \epsilon\ (正常) \end{cases}
其中,
p(x;μ^,σ^2)=j=1np(x(j);μ^j,σ^j2) p(x;\hat\mu,\hat\sigma^2) = \prod\limits_{j=1}^{n}p(x^{(j)};\hat\mu_{j},\hat\sigma_{j}^{2})
检验指标:精准率/召回率/f1,根据不同阈值参数 ϵ\epsilon 下模型的检验指标选择最优的 ϵ\epsilon.

Step3 测试集 (2000个正常数据,10个异常数据) ,预测。

1.3 异常检测 v.s. 监督学习

什么时候使用 为什么用
异常检测 只有少数正例 (y=1),大部分是负例 (y=0),如飞机故障检测 造成异常 (y=1)的原因很多,每种原因对应的样本点很少,且未来可能出现新的异常原因
监督学习 正例 (y=1) 和 负例 (y=0) 的样本点差不多多,如垃圾邮件判断 有足够多的样本点来观察正例的特征,负例的特征,未来可能出现的情况都囊括 (能找到相似的) 在这些样本点中

1.4 特征选择

1.4.1 特征变换

特征本身可能不服从高斯分布,可以尝试特征变换,如 logXX2\log X、X^2 等。

1.4.2 特征的选择

分别在有该特征和没有该特征的情况下训练模型,通过交叉验证进行选择更优的。

2 异常检测 (特征之间不独立的情况)

2.1 多元高斯分布

如果特征之间不独立,那么可能出现这样的情况:

异常检测

此时,抛弃独立假设,设
XN(μ,Σ) X \sim N(\mu, \Sigma)
其中,Σ\Sigma 是协方差矩阵,密度函数为
p(x;μ,Σ)=1(2π)2nΣ12exp{12(xμ)TΣ1(xμ)} p(x;\mu,\Sigma) = \frac{1}{(2\pi)^{\frac{2}{n}}|\Sigma|^{\frac{1}{2}}}\exp\{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)\}
异常检测

2.2 异常检测算法

给定10000个正常数据,20个异常数据。

Step1训练集数据 (6000正常数据) 估计参数 μj,σj2,j=1,,n\mu_{j},\sigma_{j}^{2},j=1,\cdots,n (极大似然估计)
μ^=x=1mi=1mxiΣ^=1mi=1m(xix)T(xix) \begin{aligned} \hat\mu &= \overline x = \frac{1}{m}\sum_{i=1}^{m}x_{i}\\ \hat\Sigma &= \frac{1}{m}\sum_{i=1}^{m}(x_{i}-\overline x)^{T}(x_{i}-\overline x) \\ \end{aligned}

Step2 在不同阈值参数 ϵ\epsilon 下,用验证集数据 (2000个正常数据,10个异常数据) 预测
y={1,p(x)<ϵ ()0,p(x)ϵ () y=\begin{cases}1, & p(x)<\epsilon\ (异常)\\ 0, & p(x)\geq \epsilon\ (正常) \end{cases}

其中,
p(x;μ^,Σ^)=1(2π)2nΣ12exp{12(xμ^)TΣ^1(xμ^)} p(x;\hat\mu,\hat\Sigma) = \frac{1}{(2\pi)^{\frac{2}{n}}|\Sigma|^{\frac{1}{2}}}\exp\{-\frac{1}{2}(x-\hat\mu)^{T}\hat\Sigma^{-1}(x-\hat\mu)\}

检验指标:精准率/召回率/f1,根据不同阈值参数 ϵ\epsilon 下模型的检验指标选择最优的 ϵ\epsilon.

Step3测试集数据 (2000个正常数据,10个异常数据) 进行预测。

2.3 原始高斯 v.s. 多元高斯

原始高斯 多元高斯
计算成本小 计算成本大 ( 要计算Σ1\Sigma^{-1}, 和特征数n有关)
即使m比较小也没问题 要求m>nm>n (一般要求m10nm\geq10n),否则 Σ\Sigma 不可逆
n比较大的情况下使用 m比较大,n比较小的情况下使用