异常检测
1 问题的动机
什么是异常检测呢?
给定数据集 x(1) ,x (2) ,…,x(m) ,我们假使数据集是正常的,我们希望知道新的数据Xtest是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 p(x)。
下图的红色的每个叉,都是你的无标签数据集,我们要判断绿色是否异常
上图中,在蓝色圈内的数据属于该组数据的可能性较高,而越是偏远的数据,其属于该组数据的可能性就越低。
2 高斯分布(也称正态分布)
注:机器学习中对于方差我们通常只除以m而非统计学中的(m − 1)实际使用中,两个其实区别很小,在机器学习领域大部分人更习惯使用1/m这个版本的公式。
高斯分布样例:
3 算法
先了解一下大写的Π
异常检测算法:
1 选择能够描述你所收集数据集的一般性特征
图中上面是一个由两个特征的训练集,以及特征的分布情况
图中下面的三维图表示的是密度估计函数,z轴为根据两个特征的值所估计p(x)值:
4 开发和评价一个异常检测系统
异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 y的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。
当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
例如:我们有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数据:
6000 台正常引擎的数据作为训练集
2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集
2000 台正常引擎和 10 台异常引擎的数据作为测试集
具体的评价方法如下:
预测正常与否时,赋予y值 0 or 1
ps: 查准率,召回率及F1 在: 机器学习系统的设计. 中
5 异常检测与监督学习对比
之前我们构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对比有助于选择采用监督学习还是异常检测:
两者比较:
6 选择特征
误差分析:
一个常见的问题是一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能 能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
异常检测误差分析:
图中x2即是增加的新特征,增加后我们明显地区分出了绿色的异常样本
我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小),例如,在检测数据中心的计算机状况的例子中,我们可以用 CPU负载与网络通信量的比值作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中
7 多元高斯分布(选修)
我们首先计算所有特征x(i)的平均值,然后再计算协方差矩阵????:
多元高斯分布的p(x):
|????|是定矩阵,在 Octave 中用 det(sigma) 计算, ????(-1) 是逆矩阵
下面我们来看看协方差矩阵是如何影响模型的:
上图是 5 个不同的模型,从左往右依次分析:
- 是一个一般的高斯分布模型
- 通过协方差矩阵,令特征 1 拥有较小的偏差,同时保持特征 2 的偏差
- 通过协方差矩阵,令特征 2 拥有较大的偏差,同时保持特征 1 的偏差
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
- 通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性
原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,我们可以通过构造新新特征的方法来捕捉这些相关性。
如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。
8 使用多元高斯分布进行异常检测( 选修)
过程:
如图,该分布在中央最多,越到外面的圈的范围越小。并在该点是出路这里的概率非常低。
其中:协方差矩阵????相当与之前的方差,如图
m是样本数,n是特征数