异常检测的应用场景:
假设 x ( i ) ( i = 1 , 2 , . . . , m ) x^{(i)} \ (i=1,2,...,m) x(i) (i=1,2,...,m)为总体X中的样本,总体X服从正态分布, X X X~ N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2)
总体均值 μ \mu μ、总体方差 σ 2 \sigma^2 σ2的估计量分别为:
μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac{1}{m}\sum_{i=1}^m x^{(i)} μ=m1i=1∑mx(i)
σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^2=\frac{1}{m}\sum_{i=1}^m (x^{(i)}-\mu)^2 σ2=m1i=1∑m(x(i)−μ)2(正确的总体方差的无偏估计量应除以m-1,简单起见,机器学习中不做此区分)
判断 x ( i ) x^{(i)} x(i)是否为异常值的方法如下:
1、给定阈值 ϵ \epsilon ϵ
2、将 x ( i ) x^{(i)} x(i)代入正态分布的概率密度函数 p ( x ; μ , σ 2 ) = 1 σ 2 π e ( − ( x − μ ) 2 2 σ 2 ) p(x;\mu,\sigma^2)=\frac{1}{\sigma\sqrt{2\pi}}e^{(-\frac{(x-\mu)^2}{2\sigma^2})} p(x;μ,σ2)=σ2π1e(−2σ2(x−μ)2)
3、若 p ( x ( i ) ; μ , σ 2 ) < ϵ p(x^{(i)};\mu,\sigma^2)<\epsilon p(x(i);μ,σ2)<ϵ,则 x ( i ) x^{(i)} x(i)为异常值
\quad
Training set{ x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2),…, x ( m ) x^{(m)} x(m)} (where x ( i ) ∈ R n x^{(i)}∈\R^n x(i)∈Rn)
假设各特征变量互相独立且都服从正态分布,则n个变量的联合概率密度函数为
p ( x ; μ , σ 2 ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 σ j 2 π e x p − ( ( x − μ j ) 2 2 σ j 2 ) p(x;\mu,\sigma^2)= \prod_{j=1}^n p(x_j;\mu_j,\sigma_j^2)=\prod_{j=1}^n \frac{1}{\sigma_j\sqrt{2\pi}}exp^{- (\frac{(x-\mu_j)^2}{2\sigma_j^2})} p(x;μ,σ2)=∏j=1np(xj;μj,σj2)=∏j=1nσj2π1exp−(2σj2(x−μj)2)
Step 1. 选择可用于检测异常的特征
e.g. 在异常用户检测中,可选用的特征包括登录频率、访问次数、交易次数、发帖次数、打字速度等
Step 2. 参数估计
μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j=\frac{1}{m}\sum_{i=1}^m x_j^{(i)} μj=m1i=1∑mxj(i)
σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \sigma_j^2=\frac{1}{m}\sum_{i=1}^m (x_j^{(i)}-\mu_j)^2 σj2=m1i=1∑m(xj(i)−μj)2
Step 3. 给定新样本x,计算p(x),并与阈值 ϵ \epsilon ϵ比较
如果 p ( x ) < ϵ p(x)<\epsilon p(x)<ϵ,则x为异常样本
\quad
如何评估一个异常检测系统?
-real number evaluation有助于做出决策
用一个具体的数字评估算法
例:
10000 个正常引擎
20 个异常引擎
按照6:2:2的比例划分
Training set:6000个正常引擎
CV set:2000个正常引擎和10个异常引擎
Test set:2000个正常引擎和10个异常引擎
评估步骤:
Step 1:用训练集训练模型
Step 2:对CV和Test set, p ( x ) < ϵ p(x)<\epsilon p(x)<ϵ时预测 y = 1 y=1 y=1,反之 y = 0 y=0 y=0
Step 3:用F1 Score评估模型效果
F1的计算参见《偏斜数据集的处理》:https://blog.csdn.net/weixin_42395916/article/details/82665569
CV集还可用于 ϵ \epsilon ϵ的选择:多次尝试,取使F1 Score最大的 ϵ \epsilon ϵ
\quad
特征的选择会显著影响异常检测算法的效率
理想的特征:
例:特征的构建
在数据中心异常计算机检测中,可使用 C P U l o a d n e t w o r k t r a f f i c \frac{CPU\ load}{network\ traffic} network trafficCPU load作为一个特征
\quad
异常检测的两种算法:
每个特征分开建模(即假设每个特征相互独立)
∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 σ j 2 π e x p − ( ( x − μ j ) 2 2 σ j 2 ) \prod_{j=1}^n p(x_j;\mu_j,\sigma_j^2)=\prod_{j=1}^n \frac{1}{\sigma_j\sqrt{2\pi}}exp^{- (\frac{(x-\mu_j)^2}{2\sigma_j^2})} ∏j=1np(xj;μj,σj2)=∏j=1nσj2π1exp−(2σj2(x−μj)2)
整体分布建模(考虑了特征间的相关性)
p ( x ; μ , ∑ ) = 1 ( 2 π ) n 2 ∣ ∑ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T ∑ − 1 ( x − μ ) ) p(x;\mu,\sum)=\frac{1}{(2\pi)^\frac{n}{2}|\sum|^{\frac{1}{2}}}exp{(-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu))} p(x;μ,∑)=(2π)2n∣∑∣211exp(−21(x−μ)T∑−1(x−μ))
联合分布算法的缺点:
1、计算成本更高
2、必须满足 m > n m>n m>n,否则协方差矩阵 ∑ \sum ∑不可逆