目录
异常检测是机器学习算法的一个常见应用,这种算法的一个有趣之处在于:它虽然主要用于非监督学习,但从某些角度来看,又类似于一些监督学习问题。
异常检测的应用有欺诈检测、账号异常、工业生产领域、数据中心的计算机监控等。
1、高斯分布
异常检测算法我们主要采用到的一个模型就是高斯分布,也叫正态分布。
表示为均值,
表示为方差,
表示为标准差。在图中我们可以明显的看出,
是图像的一个中点,而
决定了图像的宽度
通常如果我们认为变量 符合高斯分布
,
则其概率密度函数为:
2、构建一个异常检测算法
应用高斯分布开发异常检测算法:
① 选择出我们认为可以指出异常样本的特征变量 ;
②计算出平均值,方差;
③给定出新样本 ,计算出
。
如果计算出的,那么则认为该样本异常。
3、开发和评估异常检测系统
当我们为某个应用开发一个学习算法时,需要进行一系列的选择(比如,选择特征等)。如果我们有某种方法,通过返回一个实数来评估我们的算法,那么对这些选择做出决定往往会更容易的多。
当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
在分类样本的时候,我们选择将60%正常的样本规划为训练集 ,将20%的正常样本规划为交叉验证集,将20%的正常样本规划为测试集。对于不正常的样本50%规划为交叉验证集,50%规划为测试集。注意通常不在训练集中放置不正常样本。当然,也不是所有人都会选择这么规划,例如下图中红色括号框出的规划方式,但是,这里我们并不推荐这么规划。
对异常检测系统具体的评价方法如下:
① 根据训练集数据,我们估计特征的平均值和方差并构建 p(x)函数;
②对交叉检验集,我们尝试使用不同的 ε 值作为阀值,并预测数据是否异常,根据F1值或者查准率与回召率的比例来选择 ε ;
③ 选出 ε后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与回召率之比。
4、异常检测VS监督学习
从以上的学习我们会发现异常检测算法跟监督学习有类似之处,那我们应该在什么时候选择异常检测算法,什么时候选择监督学习算法呢?
①异常检测
当我们的拥有大量的负样本、或者是样本数量较少、有很多种类型的异常的时候,我们通常选择异常检测来完成。
②监督学习
当我们的正样本和负样本数量都足够多、有充足的正样本数量,我们就选择监督学习。
假设你拥有一个网站,当网站的诈骗用户的数据很多,我们就采用监督学习,当网站只有很少的诈骗用户数据的时候,我们就采用异常检测来完成项目。
5、选择特征
当应用异常检测时,选择什么特征对运行有很大影响。
①我们可以选用特征数据符合高斯分布图像的。异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布。
对于数据分布不是高斯分布的,我们通常会对数据“变形”,将数据转化为符合高斯分布的形状。例如对数据 ,我们将
,
,
等等。
下图就是我们尝试将图像一步步尝试转化为符合高斯函数的步骤。
②如何得到异常检测算法的特征?
一个常见的问题是一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
在下一维图中,我们只有一个特征 ,我们可以假设一个异常值
,我们可以看到它似乎掺杂在一堆正样本之中。这时,我们可以找到是否有别的特征让特征值
看起来异常。在下右图,我们就找到了一个特征
,在特征
中,就显现出了这个样本的异常。
5、多元高斯分布(多元正态分布)
在下左图中,我们假设一个绿色标记的异常样本,我们可以看出它是远离红色标记的正常样本的。它只占有了小部分的CPU装载量,却有着很高的内存使用率,我们可以判定为这是一个异常样本。但是在分别的高斯分布之中,都掺杂在正样本的中间,
值都比较高,异常检测会将这个样本判定为正常样本。我们就发现了这其中的问题,所以我们接下来引出多元高斯分布的概念。
在多元高斯分布之中:
我们把两个特征变量处理在一起,看成“一个变量”,
。
:是一个协方差矩阵,所以它衡量的是方差,或者说是特征变量
的变化量。
:为
的行列式,在Octave中可以使用 det(
)来进行计算。
多元高斯分布的步骤:
①首先,我们需要计算出均值,和协方差
;
②然后根据下面公式计算出;
③ 如果满足:
,那么则认为该样本是异常样本。
我们来看看协方差矩阵是如何影响模型的:
我们如果缩放对角线上的值,我们可以看到平面图中同心圆也有缩放的趋势。如果缩小对角线上的值,图像会变高。
如果将非对角线上的值设置为正值,我们可以看到呈现出来了正相关。
如果将非对角线上的值设置为负值,我们可以看到呈现出来了负相关。
然后,我们来改变一下值的大小。从下图可见,改变
值的大小,改变了峰值所在的位置。
原高斯分布模型VS多元高斯分布模型:
原高斯分布模型其实也可以看做是一种特殊的多元高斯分布模型。只要将的对角线上的值取原高斯函数
的值,所训练出来的模型就是一样的。
原高斯分布模型:
①不能捕捉特征之间的相关性,但可以通过将特征进行组合的方法来解决。例如,在CPU的装载量和内存的使用
之间我们可以设置一个新变量
。
②计算代价低,能适应大规模的特征。
③即使 m 样本数量很小也可以。
多元高斯分布模型:
①自动捕捉特征之间的相关性。
②计算代价较高,训练集较小时也同样适用。
③必须要有 m>n ,不然的话协方差矩阵不可逆的,通常需要 m > 10n,另外特征冗余(线性相关)也会导致协方差矩阵不可逆。
现在原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,我们可以通过构造新特征的方法来捕捉这些相关性。如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。