异常检测
- 问题的动机(Problem Motivation)
- 高斯分布(Gaussian Distribution)
- 算法(Algorithm)
- 开发和评估异常检测系统(Developing and Evaluating an Anomaly Detection System)
- 异常检测 VS. 监督学习(Anomaly Detection vs. Supervised Learning)
- 选择要使用的特征(Choosing What Features to Use)
- 多元高斯分布(Multivariate Gaussian Distribution)
- 使用多变量高斯分布的异常检测(Anomaly Detection Using the Multivariate Gaussian Distribution)
问题的动机(Problem Motivation)
- 异常检测(Anomaly Detection): 给定数据集 x ( 1 ) , x ( 2 ) , . . . , x ( m ) x^{(1)},x^{(2)},...,x^{(m)} x(1),x(2),...,x(m),假使数据集是正常的,希望知道新的数据 x t e s t x_{test} xtest是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 p ( x ) p(x) p(x)。
- 密度估计:
i f p ( x ) { < ε a n o m a l y = ε n o r m a l if \quad p(x) \begin{cases} < \varepsilon & anomaly \\ =\varepsilon & normal \end{cases} ifp(x){<ε=εanomalynormal
- 应用:
- 欺诈检测: 检测配正常用户(登录频率、页面访问情况、发帖数量、打字速度等)
- 检测数据中心: 判断计算机是否出错(内存使用情况、被访问的磁盘数量、CPU负载、网络通信等)
高斯分布(Gaussian Distribution)
- 高斯分布/正态分布:
- 若 x x x符合高斯分布 x ∼ N ( μ , σ 2 ) x \sim N(\mu,\sigma^2) x∼N(μ,σ2),则其概率密度函数为 p ( x , μ , σ 2 ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) p(x,\mu,\sigma^2)=\cfrac{1}{\sqrt{2 \pi}\sigma}exp(-\cfrac{(x-\mu)^2}{2\sigma^2}) p(x,μ,σ2)=2πσ1exp(−2σ2(x−μ)2)。
- 可以利用已有数据来预测总体的
μ
\mu
μ和
σ
2
\sigma^2
σ2:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
\mu=\cfrac{1}{m}\displaystyle\sum^m_{i=1}x^{(i)}
μ=m1i=1∑mx(i),
σ
2
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
2
\sigma^2=\cfrac{1}{m}\displaystyle\sum^m_{i=1}(x^{(i)}-\mu)^2
σ2=m1i=1∑m(x(i)−μ)2
机器学习中对于方差通常只除以 m m m而非统计学中的 ( m − 1 ) (m-1) (m−1)。
在实际使用中,到底是选择使用 1 / m 1/m 1/m还是 1 / ( m − 1 ) 1/(m-1) 1/(m−1)其实区别很小,只要有一个还算大的训练集,在机器学习领域大部分人更习惯使用 1 / m 1/m 1/m这个版本的公式。
算法(Algorithm)
-
步骤:
- 选择可能表示异常例子的特征 x i x_i xi
- 对于给定数据集
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
x^{(1)},x^{(2)},...,x^{(m)}
x(1),x(2),...,x(m),针对每一个特征计算
μ
\mu
μ和
σ
2
\sigma^2
σ2的估计值:
- μ j = 1 m ∑ i = 1 m x j ( i ) \mu_j=\cfrac{1}{m}\displaystyle\sum^m_{i=1}x^{(i)}_j μj=m1i=1∑mxj(i)
- σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \sigma^2_j=\cfrac{1}{m}\displaystyle\sum^m_{i=1}(x^{(i)}_j-\mu_j)^2 σj2=m1i=1∑m(xj(i)−μj)2
- 给定新的训练实例,根据模型计算 p ( x ) p(x) p(x): p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j 1 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\displaystyle\prod^n_{j=1}p(x_j;\mu_j,\sigma^2_j)=\displaystyle\prod^1_j\cfrac{1}{\sqrt{2\pi}\sigma_j}exp(-\cfrac{(x_j-\mu_j)^2}{2\sigma^2_j}) p(x)=j=1∏np(xj;μj,σj2)=j∏12πσj1exp(−2σj2(xj−μj)2)
- 当 p ( x ) < ε p(x)<\varepsilon p(x)<ε时,为异常。
-
例:
开发和评估异常检测系统(Developing and Evaluating an Anomaly Detection System)
-
评估: 从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
-
例: 有10000台正常引擎的数据,有20台异常引擎的数据。分配如下:
6000台正常引擎的数据作为训练集
2000台正常引擎和10台异常引擎的数据作为交叉检验集
2000台正常引擎和10台异常引擎的数据作为测试集
-
评估方法:
- 根据测试集数据,估计特征的平均值和方差并构建 p ( x ) p(x) p(x)函数。
- 对交叉检验集,尝试使用不同的 ε \varepsilon ε值作为阀值,并预测数据是否异常,根据 F 1 F1 F1值或者查准率与查全率的比例来选择 ε.
- 选出 ε 后,针对测试集进行预测,计算异常检验系统的 F 1 F1 F1值,或者查准率与查全率之比。
异常检测 VS. 监督学习(Anomaly Detection vs. Supervised Learning)
异常检测 | 监督学习 |
---|---|
非常少量的正向类(异常数据 y = 1 y=1 y=1),大量的负向类( y = 0 y=0 y=0)。 | 同时有大量正向类和大量负向类。 |
有许多不同种类的异常,难以通过少量的异常数据来训练算法。 | 有足够的正向类实例,用于训练算法。 |
未来可能遇到的异常可能与已掌握的非常不同。 | 未来遇到的正向类实例可能与训练集中非常相似。 |
例:欺诈行为检测、生产(如飞机引擎)、检测数据中心的计算机运行情况 | 例:邮件过滤器、天气预报、肿瘤分类 |
选择要使用的特征(Choosing What Features to Use)
- 非高斯分布特征: 如果数据的分布不是高斯分布,异常检测算法也能够工作,但最好将数据进行转换,例如:对数函数( x = l o g ( x + c ) x=log(x+c) x=log(x+c), c c c为非负常数),幂函数( x = x c x=x^c x=xc, c c c为0-1之间的一个分数)。
在python中,通常用
np.log1p()
函数,log1p就是 log(x+1),可以避免出现负数结果,反向函数是np.expm1()
.
-
增加新特征: 有些异常的数据可能也会有较高的 p ( x ) p(x) p(x)值,因而被认为是正常的。
-
方法一:误差分析,分析被算法错误预测为正常的数据,观察是否能找出问题,增加一些新的特征。
-
方法二:特征组合,若异常数据的该特征值异常得大或小,可以通过将相关得特征进行组合,来获得新的更好的特征。
例如可以将CPU负载和网络通信量的比值作为一个新的特征。
-
多元高斯分布(Multivariate Gaussian Distribution)
-
异常检测算法,往往是把 μ \mu μ附近的数据认为是高频率出现的,表现在图像上类似一个圆形。在一些情况下数据并不是规则分布,单变量的高斯分布不能体现拟合椭圆形状。
-
例:
- 一般的高斯分布模型。
- 通过协方差矩阵,改变特征1的偏差,同时保持特征2的偏差。
- 通过协方差矩阵,改变特征2的偏差,同时保持特征1的偏差。
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性。
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性。
- 不改变偏差,通过 μ \mu μ改变中心位置。
使用多变量高斯分布的异常检测(Anomaly Detection Using the Multivariate Gaussian Distribution)
-
多元高斯分布/多元正态分布: p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x;\mu,\Sigma)=\cfrac{1}{(2\pi)^{n \over 2}|\Sigma|^{1\over2}}exp \bigg (- \cfrac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\bigg) p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
-
n n n维向量 μ \mu μ: μ = 1 m ∑ i = 1 m x ( i ) \mu=\cfrac{1}{m}\displaystyle\sum^m_{i=1}x^{(i)} μ=m1i=1∑mx(i)
-
协方差矩阵 Σ \Sigma Σ: Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \Sigma=\cfrac{1}{m}\displaystyle\sum^m_{i=1}(x^{(i)}-\mu)(x^{(i)}-\mu)^T Σ=m1i=1∑m(x(i)−μ)(x(i)−μ)T
-
如果 p ( x ) < ε p(x)<\varepsilon p(x)<ε,则异常。
-
传统高斯分布是多变量高斯分布的特殊形式,对应矩阵再非对角线上的数为0.
-
-
比较:
原高斯分布模型 多元高斯分布模型 不能捕捉特征之间的相关性,但可以通过将特征进行组合的方法来解决。 自动捕捉特征之间的相关性。 计算代价低,能适应大规模的特征。 计算代价较高,训练集较小时也同样适用。 必须要有 m > n m>n m>n,否则协方差矩阵 Σ \Sigma Σ不可逆,通常需要 m ≥ 10 n m \geq 10n m≥10n;另外特征冗余也会导致协方差矩阵不可逆。