选择特征
对于异常检测算法,我们使用的特征是至关重要的,下面谈谈如何选择征: 异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测 算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:x = log(x+c),其中 c 为非负常数; 或者 x=xc,c 为 0-1 之间的一个分数,等方法。
误差分析:
一个常见的问题是一些异常的数据可能也会有较高的 p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
异常检测误差分析:
我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小),例如,在检测数据中心的计算机状况的例子中,我们可以用 CPU 负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。
多元高斯分布
假使我们有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。
下图中是两个相关特征,洋红色的线(根据 ε 的不同其范围可大可小)是一般的高斯分布模型获得的判定边界,很明显绿色的 X 所代表的数据点很可能是异常值,但是其 p(x)值却仍然在正常范围内。多元高斯分布将创建像图中蓝色曲线所示的判定边界。
在一般的高斯分布模型中,我们计算 p(x)的方法是: 通过分别计算每个特征对应的几率然后将其累乘起来,在多元高斯分布模型中,我们将构建特征的协方差矩阵,用所有的特征一起来计算 p(x)。
我们首先计算所有特征的平均值,然后再计算协方差矩阵:
注:其中 μ 是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。最后我们计算多元高斯分布的 p(x):
其中:
|Σ|是定矩阵,在 Octave 中用 det(sigma)计算Σ1 是逆矩阵,下面我们来看看协方差矩阵是如何影响模型的:
上图是 5 个不同的模型,从左往右依次分析:
- 是一个一般的高斯分布模型
- 通过协方差矩阵,令特征 1 拥有较小的偏差,同时保持特征 2 的偏差
- 通过协方差矩阵,令特征 2 拥有较大的偏差,同时保持特征 1 的偏差
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性
多元高斯分布模型与原高斯分布模型的关系:
可以证明的是,原本的高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第1、2、3,3 个例子所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原本的高斯分布模型了。
原高斯分布模型和多元高斯分布模型的比较:
原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,我们可以通过构造新新特征的方法来捕捉这些相关性。
如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。
选用多元高斯分布进行异常检测
要回顾一下多元高斯分布和多元正态分布:
分布有两个参数,μ和Σ。其中μ这一个 n 维向量和Σ的协方差矩阵,是一种 n 乘 n 的矩阵。而这里的公式 X 的概率,如按μ和参数化Σ,和你的变量μ和Σ,你可以得到一个范围的不同分布一样,你知道的,这些都是三个样本,那些我们在以前的视频看过了。
因此,让我们谈谈参数拟合或参数估计问题:
我有一组样本
是一个 n 维向量,我想我的样本来自一个多元高斯分布。我如何尝试估计我的参数μ和Σ以及标准公式?估计他们是你设置μ是你的训练样本的平均值。
这其实只是当我们使用 PCA 算法时候,有Σ时写出来。所以你只需插入上述两个公式,这会给你你估计的参数μ和你估计的参数Σ。所以,这里给出的数据集是你如何估计μ和Σ。让我们以这种方法而只需将其插入到异常检测算法。那么,我们如何把所有这一切共同开发一个异常检测算法?
首先,我们把我们的训练集,和我们的拟合模型,我们计算 P(x),要知道,设定μ和描述的一样Σ。
如图,该分布在中央最多,越到外面的圈的范围越小。并在该点是出路这里的概率非常低。
原始模型与多元高斯模型的关系如图:
其中:协方差矩阵Σ为:
原始模型和多元高斯分布比较如图: