十五、异常检测

1 密度估计

给定数据集 x(1),x(2),..,x(m),我们假使数据集是正常的,我们希望知道新的数据 x(test)是不是异常
的,就是对数据x(test)进行异常检测。

图中红色部分为给定的数据集,绿色部分为测试数据,其中蓝色圈内表示测试数据检测为正常的,且越靠近圈内,数据正常的概率越大。圈外的数据则检测为异常数据。

根据模型,由测试数据的位置得到测试数据正常的概率p(x),这就是密度估计,公式表示如下:

当p(x)小于ε时,数据异常。

异常检测主要用于识别欺骗。如:测服务器测试用户是否为真实用户而不是虚拟用户,根据内存、磁盘、CPU、网络的情况判断计算机是否出错了。

2 高斯分布

如果x符合高斯分布(正态分布):

则其概率密度函数为:

其中可以利用已有数据求出μ和σ²:

不同μ和σ²对应的图像:

μ决定对称轴位置,σ²小图形细长,σ²大图形矮胖。

3 应用高斯分布进行异常检测

对于给定数据集,对每一个特征求出μ和σ²,然后对于新的训练实例,根据模型计算p(x):

对每一个特征求得对应的p(xi),再把p(xi)相乘。

当p(x)<ε,数据判定为异常数据。

4 设计和评价一个异常检测系统

例如:我们有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数据:

6000 台正常引擎的数据作为训练集

2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集

2000 台正常引擎和 10 台异常引擎的数据作为测试集

具体的评价方法如下:

  1. 根据测试集数据,我们估计特征的平均值和方差并构建p(x)函数

  2. 对交叉检验集,我们尝试使用不同的ε值作为阀值,并预测数据是否异常,根据 F1 值
    或者查准率与查全率的比例来选择 ε

  3. 选出ε后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与查全率
    之比.

5 异常检测对比监督学习

6 选择特征

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够
工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:x=log(x+c)其中c为非负常数,或者x=x^c,c∈(0,1)

异常检测可能出现的问题就是,一些异常的数据其p(x)值非常高,误认为正常数据,这是可以根据被算法错误估计的数据,观察并新增一些特征,使新增特征后能够帮助我们更好的进行异常检测。

上图,一维的特征错误的判断绿色被检测点为正常,新增特征后,被检测为错误特征。

7 多元高斯分布

若两个特征相关,此时用开始的不同特征检测出的p(xi)直接相乘不能很好的检测数据,因为该模型尝试去同时抓住两个特征的偏差,创造了一个比较大的判定边界。

上图粉色的圈为传统的判定边界,此时,左上角的绿色数据被判定为正常数据,因为其对应每一维的特征,都在阈值以内,但是其数据与正常数据的差别较大。

这个时候可以用多元高斯分布,多元高斯分布考虑了特征间的相关性,构建了特征的协方差矩阵。

多元高斯分布:

其中:

其中不同的μ和Σ对应的多元高斯分布图形:

图一:普通的高斯分布

图二:特征1拥有较小的偏差,保持特征2的偏差

图三:特征2具有较大的偏差,保持特征1的偏差

图四:保持原有特征,增加两个特征的正相关性

图五:保持原有特征,增加两个特征的负相关性

多元高斯分布与传统高斯分布比较:

猜你喜欢

转载自www.cnblogs.com/cold-city/p/10006609.html