机器学习第十六章——异常检验

一.密度估计

假如要更为正式定义异常检测问题,首先我们有一组从 $x^{(1)}$ 到 $x^{(m)}$ m个样本,且这些样本均为正常的。我们将这些样本数据建立一个模型 p(x) , p(x) 表示为 x 的分布概率。

那么假如我们的测试集 $x_{test}$ 概率 p 低于阈值 $\varepsilon$ ,那么则将其标记为异常。

异常检测的核心就在于找到一个概率模型,帮助我们知道一个样本落入正常样本中的概率,从而帮助我们区分正常和异常样本。高斯分布(Gaussian Distribution)模型就是异常检测算法最常使用的概率分布模型。

1. 高斯分布

假如 x 服从高斯分布,那么我们将表示为: $x\sim N(\mu,\sigma^2)$ 。其分布概率为:

$$p(x;\mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^2}{2\sigma^2})$$

 

其中 $\mu$ 为期望值(均值), $\sigma^2$ 为方差。

其中,期望值 $\mu$ 决定了其轴的位置,标准差 $\sigma$ 决定了分布的幅度宽窄。当 $\mu=0,\sigma=1$ 时的正态分布是标准正态分布。

由概率分布的性质,曲线下方的面积等于1,即积分为1,所以图形越宽,高度越矮;图像越高,宽度越窄。

期望值:$$\mu=\frac{1}{m}\sum_{i=1}^{m}{x^{(i)}}$$

方差:$$\sigma^2=\frac{1}{m}\sum_{i=1}^{m}{(x^{(i)}-\mu)}^2$$

上面计算期望值和方差,就是统计学里面的极大似然估计

异常检测算法的步骤:

假如我们有一组 m 个无标签训练集,其中每个训练数据又有 n 个特征,那么这个训练集应该是 m 个 n 维向量构成的样本矩阵。

在概率论中,对有限个样本进行参数估计

$$\mu_j = \frac{1}{m} \sum_{i=1}^{m}x_j^{(i)}\;\;\;,\;\;\; \delta^2_j = \frac{1}{m} \sum_{i=1}^{m}(x_j^{(i)}-\mu_j)^2$$

这里对参数 $\mu$ 和参数 $\delta^2$ 的估计就是二者的极大似然估计。

假定每一个特征 $x_{1}$ 到 $x_{n}$ 均服从正态分布,则其模型的概率为:

$$ \begin{align*} p(x)&=p(x_1;\mu_1,\sigma_1^2)p(x_2;\mu_2,\sigma_2^2) \cdots p(x_n;\mu_n,\sigma_n^2)\\ &=\prod_{j=1}^{n}p(x_j;\mu_j,\sigma_j^2)\\ &=\prod_{j=1}^{n} \frac{1}{\sqrt{2\pi}\sigma_{j}}exp(-\frac{(x_{j}-\mu_{j})^2}{2\sigma_{j}^2}) \end{align*} $$

当 $p(x)<\varepsilon$时,$x$ 为异常样本。

2. 举例

假定我们有两个特征 $x_1$ 、 $x_2$ ,它们都服从于高斯分布,并且通过参数估计,我们知道了分布参数:

则模型 $p(x)$ 能由如下的热力图反映,热力图越热的地方,是正常样本的概率越高,参数 $\varepsilon$ 描述了一个截断高度,当概率落到了截断高度以下(下图紫色区域所示),则为异常样本:

将 $p(x)$ 投影到特征 $x_1$ 、$x_2$ 所在平面,下图紫色曲线就反映了 $\varepsilon$ 的投影,它是一条截断曲线,落在截断曲线以外的样本,都会被认为是异常样本

3. 算法评估

由于异常样本是非常少的,所以整个数据集是非常偏斜的,我们不能单纯的用预测准确率来评估算法优劣,所以用我们之前的查准率(Precision)和召回率(Recall)计算出 F 值进行衡量异常检测算法了。

  • 真阳性、假阳性、真阴性、假阴性
  • 查准率(Precision)与 召回率(Recall)
  • F1 Score

我们还有一个参数 $\varepsilon$ ,这个 $\varepsilon$ 是我们用来决定什么时候把一个样本当做是异常样本的阈值。我们应该试用多个不同的 $\varepsilon$ 值,选取一个使得 F 值最大的那个 $\varepsilon$ 。


二.建立异常检测系统

1. 有监督学习与异常检测

有监督学习异常检测
数据分布均匀,有大量的正例和反例。数据非常偏斜,异常样本数目远小于正常样本数目
可以根据对正样本的拟合来知道正样本的形态,从而预测新来的样本是否是正样本。并且新来的样本和训练集中的样本类似异常的类型不一,很难根据对现有的异常样本(即正样本)的拟合来判断出异常样本的形态。并且未来可能出现的异常可能和之前样本中出现过的异常都不一样

下面的表格则展示了二者的一些应用场景:

有监督学习异常检测
垃圾邮件检测故障检测
天气预测(预测雨天、晴天、或是多云天气)某数据中心对于机器设备的监控
癌症的分类制造业判断一个零部件是否异常

如果异常样本非常少,特征也不一样完全一样(比如今天飞机引擎异常是因为原因一,明天飞机引擎异常是因为原因二,谁也不知道哪天出现异常是什么原因),这种情况下就应该采用异常检测。

如果异常样本多,特征比较稳当,这种情况就应该采用监督学习。

 

问题:选择什么特征去进行异常检测?

假如我们的数据看起来不是很服从高斯分布,可以通过对数、指数、幂等数学变换让其接近于高斯分布。

 

问题:如何得到异常检测算法的特征?

方法:误差分析

步骤:首先训练算法,然后在通过验证集中的数据找出判断错误的样本,然后研究这些错误样本的特征,完善我们的算法,得到更好的训练模型。


三. 多变量高斯分布

1. 多元高斯分布模型

 

我们以数据中心的监控计算机为例子。 $x_1$ 是CPU的负载,$x_2$ 是内存的使用量。其正常样本如左图红色点所示。假如我们有一个异常的样本(图中左上角绿色点),在图中看很明显它并不是正常样本所在的范围。但是在计算概率 $p(x)$ 的时候,因为它在 $x_1$ 和 $x_2$ 的高斯分布都属于正常范围,所以该点并不会被判断为异常点。

这是因为在高斯分布中,它并不能察觉在蓝色椭圆处才是正常样本概率高的范围,其概率是通过圆圈逐渐向外减小。所以在同一个圆圈内,虽然在计算中概率是一样的,但是在实际上却往往有很大偏差。

所以我们开发了一种改良版的异常检测算法:多元高斯分布。

我们不将每一个特征值都分开进行高斯分布的计算,而是作为整个模型进行高斯分布的拟合。

其概率模型为:$$p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))$$(其中 $|\Sigma|$ 是 $\Sigma$ 的行列式,$\mu$ 表示样本均值,$\Sigma$ 表示样本协方差矩阵。)。

多元高斯分布模型的热力图如下:

$\Sigma$ 是一个协方差矩阵,所以它衡量的是方差。减小 $\Sigma$ 其宽度也随之减少,增大反之。

同理,多元高斯分布模型也同样遵循概率分布,曲线下方的积分等于1。如上图,多元高斯分布相当于体积为1 。这样就可以通过 $\mu$ 和 $\Sigma$ (这里是协方差矩阵,原来是 $\sigma$ )的关系来判断图形的大致形状。

$\Sigma$ 中第一个数字是衡量 $x_1$ 的,假如减少第一个数字,则可从图中观察到 $x_1$ 的范围也随之被压缩,变成了一个椭圆。

多元高斯分布还可以给数据的相关性建立模型。假如我们在非主对角线上改变数据(如图中间那副),则其图像会根据 $y=x$ 这条直线上进行高斯分布。

反之亦然。

改变 $\mu$ 的值则是改变其中心点的位置。

2. 参数估计

多元高斯分布模型的参数估计如下:

$$\mu=\frac{1}{m}\sum_{i=1}^{m}{x^{(i)}}$$$$\Sigma=\frac{1}{m}\sum_{i=1}^{m}{(x^{(i)}-\mu)(x^{(i)}-\mu)^T}$$

3. 算法流程

采用了多元高斯分布的异常检测算法流程如下:

  1. 选择一些足够反映异常样本的特征 $x_j$ 。
  2. 对各个样本进行参数估计:$$\mu=\frac{1}{m}\sum_{i=1}^{m}{x^{(i)}}$$$$\Sigma=\frac{1}{m}\sum_{i=1}^{m}{(x^{(i)}-\mu)(x^{(i)}-\mu)^T}$$
  3. 当新的样本 x 到来时,计算 $p(x)$ :

$$p(x)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))$$

如果 $p(x)<\varepsilon $ ,则认为样本 x 是异常样本。

4. 多元高斯分布模型与一般高斯分布模型的差异

一般的高斯分布模型只是多元高斯分布模型的一个约束,它将多元高斯分布的等高线约束到了如下所示同轴分布(概率密度的等高线是沿着轴向的):

一般的多元高斯模型的轮廓(等高线)总是轴对齐的(axis-aligned),也就是 $\Sigma $ 除对角线以外的部分都是 0,当对角线以外的部分不为 0 的时候,等高线会出现斜着的,与两个轴产生一定的斜率

当: $\Sigma=\left[ \begin{array}{ccc}\sigma_1^2 \\ & \sigma_2^2 \\ &&…\\&&&\sigma_n^2\end{array} \right]$ 的时候,此时的多元高斯分布即是原来的多元高斯分布。(因为只有主对角线方差,并没有其它斜率的变化)

对比

模型定义

一般高斯模型:

$$ \begin{align*} p(x)&=p(x_1;\mu_1,\sigma_1^2)p(x_2;\mu_2,\sigma_2^2) \cdots p(x_n;\mu_n,\sigma_n^2)\\ &=\prod_{j=1}^{n}p(x_j;\mu_j,\sigma_j^2)\\ &=\prod_{j=1}^{n} \frac{1}{\sqrt{2\pi}\sigma_{j}}exp(-\frac{(x_{j}-\mu_{j})^2}{2\sigma_{j}^2}) \end{align*} $$

多元高斯模型:

$$p(x)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))$$

相关性

一般高斯模型:

需要手动创建一些特征来描述某些特征的相关性

多元高斯模型:

利用协方差矩阵$\Sigma$获得了各个特征相关性

复杂度

一般高斯模型:

计算复杂度低,适用于高维特征

多元高斯模型:

计算复杂

效果

一般高斯模型:

在样本数目 m 较小时也工作良好

多元高斯模型:

需要 $\Sigma$ 可逆,亦即需要 $m>n$ ,(通常会考虑 $ m \geqslant 10*n $,确保有足够多的数据去拟合这些变量,更好的去评估协方差矩阵 $\Sigma$ )且各个特征不能线性相关,如不能存在 $x_2=3x_1$ 或者 $x_3=x_1+2x_2$

结论:基于多元高斯分布模型的异常检测应用十分有限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值