1 背景
之前的异常检测算法,其实是以中心区域向外以正圆的形式扩散的。也就是说距离中心区域距离相等的点,对应的p(x)都是一样的,所以我们可能无法检测到这一个异常样本,因为它也处在一个p(x)比较大的范围内:
之前的也就是圆形的范围,但是我们现在将要说的是蓝色的范围,很明显多元高斯分布处理了原来模型不能表示的问题
2 多元高斯分布改良异常检测算法
多元高斯分布的参数包括向量µ和一个n×n的矩阵Σ。
Σ被称为协方差矩阵,它类似于我们之前学习PCA的时候所见到的协方差矩阵。
带入之后计算p(x):
3 多元高斯分布的样子
3.1 方差相同&无相关性
表格从上到下依次是三种情况对应的参数、三维图像以及俯视图。
µ作为均值,象征着中心区域对应的坐标点。Σ是协方差矩阵,它衡量的是特征
3.2 方差不同无相关性
在协方差Σ中,左上角元素对应的是
在第二组图中,我们可以看到,当我们缩小
在第三组图中,我们可以看到,当我们放大
3.3 方差相同&有相关性
对于多元高斯分布来说,一个很棒的事情就是我们可以用它来对数据的相关性建模。也就是说,我们可以用它来给x_1和x_2高度相关的情况建立模型。具体来说,我们可以通过改变协方差Σ非对角线上的元素来得到不同的高斯分布:
可以看出来,当我改变了非对角线上元素的值时,p(x)的图像也变得倾斜了;当我增大了这些元素时,这个倾斜的分布图像变得更细长了。
上面是我们把这些非对角线上元素设置为正数时的样子,那么如果我们把它们设置为负数时,会是什么样呢?
它们的倾斜方向会发生改变:
3.3 方差相同&均值不同
如果我们改变µ,会对图像p(x)产生什么影响呢?
它们会发生平移:
4 多元高斯分布来处理异常检测问题
我们谈一下参数拟合问题(参数估计问题)。
如果我有一组符合高斯分布的样本:
我们可以通过公式来得到参数µ和Σ:
注意这里的两个变量分别为:
4.1 具体应用步骤
有了这两个参数值,我们就可以把他们应用到具体的异常检测算法中了。具体步骤是这样的:
假设我们有如下的训练样本:
- 首先,用我们的训练集来拟合模型p(x),得到参数µ和Σ:
µ=1m∑i=1mx(i)
Σ=1m∑i=1m(x(i)−µ)(x(i)−µ)T - 然后,当你得到一个新的测试样本时,我们用下面的公式来计算其
p(x) :
p(x;µ,Σ)=1(2π)n2|Σ|12exp(−12(x−µ)TΣ−1(x−µ)) - 最后,如果
p(x)<ε 时,就把它标记为是一个异常样本,反之,如果p(x)>= 则不标记为异常样本。
这样最终的到的模型就可以解决原来一元模型解决不了的问题了,具体模型如下图:
5 多元高斯模型和原始模型的关系
原先的模型是这样的:
事实上,你可以证明我们原先的这种模型,是多元高斯模型的一种。它其实是一种等高线都沿着坐标轴方向的多元高斯分布,但这里我不给出证明过程:
这三个图像,全都是你可以用原来的模型来拟合的高斯分布的例子。
其实这个模型对应于一种多元高斯分布的特例,具体来说这个特例被定义为约束p(x)的分布(也就是多元高斯分布p(x)),使得它的概率密度函数的等高线是沿着轴向的。也就是要求协方差矩阵Σ的非对角线元素都为0。
因此,在协方差矩阵ΣΣ的非对角线元素都为0的情况下,这两者是相同的:
5.1 何时使用多元高斯模型?何时使用原始模型?
事实情况是,原始模型比较常用,而多元高斯模型比较少用。
原始模型 | 多元高斯模型 |
---|---|
捕捉到这两个特征,建立一个新的特征 |
自动捕捉不同特征变量之间的相关性。 |
运算量小(更适用于特征变量个数n很大的情况) | 计算更复杂(Σ是n×n的矩阵,这里会涉及两个n×n的矩阵相乘的逻辑,计算量很大) |
即使训练样本数m很小的情况下,也能工作的很好 | 必须满足m>n,或者Σ不可逆(奇异矩阵)。这种情况下,还可以帮助你省去为了捕捉特征值组合而手动建立额外特征变量所花费的时间。 |
5.2 异常解决方案
当你在拟合多元高斯模型时,如果你发现协方差矩阵Σ是奇异的(不可逆的),一般只有两种情况:
第一种是它没有满足m>n的条件
第二种情况是,你有冗余特征变量
冗余特征变量的意思是出现了以下两种情况的任意一种:
出现了两个完全一样的特征变量(你可能不小心把同一个特征变量复制了两份)
如果你有
这是你调试算法时的一个小知识,可能很少会遇到,但是一旦你发现Σ不可逆,那么首先需要从这两个方面来考虑解决方案。