一、引言

另一种常用的非监督学习应用场景是异常检测。异常检测会学习正常情况下的样本数据,并在应用时检测出现的异常数据。

异常检测会运用正态分布等知识,这里先介绍一下正态分布(同时也作为自己对概率统计中的相关知识的一点总结)。

二、正态分布

对于连续型随机变量 X,若其概率密度函数为如下的形式

$$ f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$

其中 $\sigma > 0, \mu \in R$

则称 X 服从正态分布(Normal distribution),记 $X \sim N(\mu, \sigma^2)$。

取 $\mu = 0, \sigma = 1$,此时 $X \sim N(0, 1)$,称 X 服从标准正态分布。记标准正态分布的概率密度为 $\phi(x)$,分布函数为 $\Phi(x)$,则任意的服从正态分布的随机变量 X,其分布函数为 $F(x) = \Phi(\frac{x - \mu}{\sigma})$。

  • 标准正态分布的分布函数数值有表可查。
  • 任意正态分布的分布函数等式中的 $\frac{x - \mu}{\sigma}$ 是不是有点熟悉?在特征放缩那一篇文章中的 Z score 标准化部分有出现。 Z score 标准化似乎就是假定特征数值服从正态分布,并将其转化为标准正态分布形式。

三、算法

我们假设不同训练样本的每一个特征服从服从正态分布。那么,对每一个特征 x_j,求其期望 $\mu_j$ 和方差 $\sigma_j^2$,则该特征对应的概率密度为 $p(x_j, \mu_j, \sigma_j^2) = \Phi(\frac{x - \mu}{\sigma})$。我们假设各个特征之间相互独立,则对于任意的 $\vec{x}=(x_1, x_2, ..., x_m)$,总的概率密度为

$$ p(\vec{x}) = p(x_1, \mu_1, \sigma_1^2) \times p(x_2, \mu_2, \sigma_2^2) \cdots \times p(x_m, \mu_m, \sigma_m^2) $$

$$ p(\vec{x}) = \prod_{j=1}^n p(x_j, \mu_j, \sigma_j^2) $$

求得的 $p(\vec{x})$ 能够反映 $\vec{x}$ 相对于训练样本正常的程度。当 $p(\vec{x})$ 很小时,说明该数据相对于训练样本的偏差很大,即异常。我们用一个很小的值 $\epsilon$ 作为判断是否异常的阈值。当 $p(\vec{x}) \lt \epsilon$,即判断为异常。