当前位置:   article > 正文

异常检测算法(Finding unusual event):_异常检测算法是什么

异常检测算法是什么

什么叫做异常检测

异常检测(Anomaly detection)是一种数据分析技术,旨在识别与预期模式或正常行为显著不同的数据点或样本。它用于发现在数据集中异常或异常行为的存在,这些异常可能表示潜在的问题、错误、异常事件或异常情况。

举一个例子,以我们的飞机为例,我们用我们的数据集对于x1和x2两个变量,我们可以得到我们的这一幅图,我们再加入两个测试项,会发现第一个在靠近图最中间的点是ok的,而在下面的那一个点明显是误差。

密度估计 (density estimate):

密度估计是一种统计技术,用于基于一组观测数据点估计随机变量的潜在概率密度函数(PDF)。它旨在对数据的分布进行建模,并提供关于其特征的见解,如形状、中心趋势和离散程度。

上图就是我们根据训练集作出的一个椭圆图,每一圈的椭圆形都是有不同概率的,从内而外高率会不断减少。如何选择分别是否是异常的特征就是会有一个阈值,也就是一个概率,当低于这个阈值时,我们就会显示异常,而当高于阈值时,则是ok。 

这个算法总是用于欺诈检测。

我们需要通过一种方式来得到我们的概率,用到的方法叫做高斯分布。

高斯分布(Ganssian (Normal) Distribution):

高斯分布,也被称为正态分布(Normal distribution),是统计学中最为常见的概率分布之一。

高斯分布函数就是p(x) = \frac{1}{\sqrt{2\pi }\sigma}e^{\frac{-(x-\mu )^{2}}{2\sigma ^{2}}},在这里我们会发现\mu \sigma 这两个变量会影响我们的函数。

因为我们的概率总和总为1,所以我们下面的每一幅图都是面积为1,所以当在x轴上的长度减小,图形的高度就会提高。

\mu =\frac{1}{m}\sum_{i=1}^{m}x^{(i)},\sigma ^{2}=\frac{1}{m}\sum_{m}^{i=1}(x^{(i)}-\mu )^{2}

我们根据这两个公式,就可以得到我们想要的高斯分布图。 这只是只有一个特征的单一高斯分布。

异常检测算法(Anomaly detection algorithm):

 

正常情况下,是有多个不同的特征 ,

我们先要计算我们的平均值和方差:

\mu _{j}=\frac{1}{m}\sum_{i=1}^{m}x_{j}^{(i)}\sigma _{j}^{2}=\frac{1}{m}\sum_{i=1}^{m}(x_{j}^{(i)}-\mu _{j})^{2}

所以我们的概率就是:

p(x)=\prod_{j=1}^{n}p(x_{j};\mu _{j},\sigma _{j^{2}})=\prod_{j=1}^{n}\frac{1}{\sqrt{2\pi }\sigma}exp(-{\frac{(x_{j}-\mu_{j} )^{2}}{2\sigma_{j} ^{2}}})

最后我们对它与阈值进行一个比较。

我们根据两个坐标画出两幅不同特征的单一高斯分布图,然后再把它们重新合成一个三维的图形,值都是P(x1)*P(x2),我们的图就可以是像我们左下图一样的图形。

开发和评估异常检测系统:

在决定一个系统和评估一个系统时,很明显,评估一个系统的难度远远大于做一个决定。我们还是要使用训练集,交叉验证集和测试集来评估。

举一个例子,我们这里用到了验证飞机引擎的例子。

我们在一开始会得到10000个好的引擎和20个确定有问题的引擎。

第一种方法我们分为三组,训练集为6000个好的引擎,而我们的交叉验证集和测试集则各位2000个好引擎和10个确定异常的引擎。 

这是我们之前最常见的方法。

第二种方法,我们只有两组,训练组为6000个好引擎,交叉验证集为4000个好引擎和20个确定异常的引擎。

它们与用到的数据集的数量大小有着关系,当我们的数据集足够大时,我们当然会选择第一种方法,因为它既可以给我们的算法进行微调,也可以进行测试。但是,当我们的数据集的数量很小时,我们就应该选择第二种方法,它只有对数据的训练和交叉进行验证,这样可以尽可能得到更加完美的算术模型,当然它的缺点也十分明显,就是它并没有多余的数据集供我们来测试。

异常检测与监督算法的区别:

左边是我们的异常检测,而右边是我们的监督学习算法: 

简而言之,它们两者的区别在于:

对于异常检测来说,它们得到的是一开始全是出现过的正常的物体,当它遇见一个从未见过的,它就会爆 异常,因为它从未见过,所以它经常用于金融欺诈。但是我们的监督学习算法,它更加侧重于我们的异常检测,他可以分辨是非有异常,所以它是用于判断垃圾邮件。

以上就是一些比较常见的两个不同算法的用处,简单来说,它们的区别就在于未知与已知。

异常检测用于未知判断,而监督学习用于已知判断 。

特征选择:

 异常检测相对于监督学习对于特征的选择有着更高的要求。

第一种情况就是要高斯化: 

对于一般的柱状图,像上方这样的高斯分布说明我们的特征选取的是正确的。

 

但当我们得到左边这个图形,会发现它并不是一个典型的高斯分布的图形,这时我们把x变成logx这时,我们的图形有变成了类似于高斯图形的样子,这个过程就是我们的高斯化。 

 我们一般使用log(x+c)的高斯化函数去做尝试,找到一个合适的值,这里的c起到了很大的作用。 

这个是我们在训练时要完成的模型搭建。

第二种情况是异常检测的误差分析:

当我们通过训练的过程,当我们在交叉验证的过程中,不能很好的工作,我们就需要对它进行误差分析。

我们在这里标记的点实际上是一个确定异常的点,但是它在学x1的高斯分布图形中,很明显可以发现它的p值很大,检测肯定不会把它当成是一个异常,但当我们再加入一个新的特征,这时在整合图中,我们就会发现它很明显是一个被判断为异常。所以设置一些新的特征是非常有利于我们的异常检测的准确性。

我们在适当时候可以去观察我们已有的特征,可能把原有的特征进行一个简单的运算,我们就能得到一个新的特征,也许就是这个特征,我们就可以解决误差。 

这就是异常检测算法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/552234
推荐阅读
相关标签
  

闽ICP备14008679号