利用高斯分布进行异常检测

今天周末,小伙伴们是不是出去浪了,苦逼的小编还在实验室学习,不是我不想出去,实在是实验室实行的996工作制。

吐槽归吐槽,下面就进入本次文章的主题——利用高斯分布进行异常检测。

首先什么是异常,又是通过什么进行异常检测?下面小编以对服务器的异常检测为例,对相关概念和原理进行解释。

我们对服务器的检测一般是居于服务器的运行情况进行判定的,如可以选取吞吐量、响应延时等指标作为依据。

当服务器运作正常时,它的吞吐量、响应延时应该集中分布在一个区间段内。当服务器出现异常时,它的这些指标数据往往离集中区间较远。换句话说就是当一台服务器的指标数据在集中区间内,那么这台服务器是正常的概率很大,反之当一台服务器的指标数据不在集中区间内,那么这台服务器是正常的概率很低,也就是异常的概率很大。

上述数据的特点很像高斯分布,高斯分布图像如下。当数据在 [4,14]这个区间,则概率较大,反之概率较少。

有了这个背景知识之后,我们的想法是利用异常较少的数据集拟合出一个高斯分布,当要预测一个样本是否为异常时,只需将这个新样本带入高斯分布求出概率,如果概率小于指定的阈值时,我们认为这个样本是异常的。

第一步:利用极大似然估计法求高斯分布的参数

有了上面的思想之后,我们第一步就要解决怎么用数据集拟合一个高斯分布。我们知道高斯分布有两个参数,我们只要求出这两个参数就可以了。

利用极大似然估计法求高斯分布的例子如下。

给出的数据集散点图如下。

对响应延时、吞吐量分别高斯分布拟合,拟合出的高斯分布图如下。

第二步:选择合适的阈值

在判断一个新样本是否异常时,我们将这个新样本带入高斯函数计算概率,当概率小于阈值便判定这个样本出现异常。可想而知,不同阈值的选取,这个模型的效果显然会不同。

我们的思想是列举法。应用不同的阈值在验证集上计算得分,选取得分最高的那个阈值。

最后我们对原始数据集进行异常检测,将判定为异常的数据用红叉突显。散点图如下。

结语:这个模型对大致呈高斯分布的数据集表现良好,对其他数据集表现欠佳。最后,小编提示概率论真的很重要。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180714G0YT2T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券