异常检查(Anomaly Detection)

背景

异常检测 (anomaly detection),或者又被称为“离群点检测” (outlier detection)。这是机器学习算法的一个常见应用。这种算法的一个有趣之处在于:它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。

什么叫做异常

  • 异常数据跟样本中大多数数据不太一样。
  • 异常数据在整体数据样本中占比比较小。

异常检测主要用来识别欺骗。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等。尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。

算法

高斯分布开发异常检测算法

Dataset:{x(1),x(2),...,x(m)}Dataset:\{x^{(1)},x^{(2)},...,x^{(m)}\}
求出每一个特征的期望和方差
我们假设N(μi,σi2)N(\mu_i,\sigma_i^2)每个特征都服从参数不同的正态分布,同时也假设了每个特征变量互相独立
于是
p(x)=p(x1)p(x2)...p(xn)p(x)=p(x_1)p(x_2)...p(x_n)
这个模型就是用来监测异常值,选一个临界值
异常检查(Anomaly Detection)

评价模型

评价一个异常检测系统,如果有一些带标签的数据,指出哪些样本是正常的,哪些样本是异常的。那么我们在训练集中放入正常的无标签的数据,在交叉验证集合测试集中放入带标签的异常数据,用训练集的数据拟合p(x)。接下来把正常的一些数据也放入交叉验证集和测试集中,然后使用p(x)进行判断。

训练集:验证集:测试集=6:2:2

然后在验证集和测试集中计算p(x),计算准确率,召回率,F1
具体的评价方法如下:

  • 根据测试集数据,我们估计特征的平均值和方差并构建p(x)p(x)函数
  • 对交叉检验集,我们尝试使用不同的ε\varepsilon值作为阀值,并预测数据是否异常,
  • 根据F1值或者查准率与查全率的比例来选择ε\varepsilon, 选出后,针对测试集进行预测,计算异常检验系统值,或者查准率与查全率之比

与监督学习的区别

异常检查(Anomaly Detection)

关于feature的选择

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,log(x+c)log(x+c)
也可以对数据分组,求平均值,利用中心极限定理。

误差分析:

一个常见的问题是一些异常的数据可能也会有较高的p(x)p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。

我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小),例如,在检测数据中心的计算机状况的例子中,我们可以用CPU负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。

多元高斯分布

存在这样一种情况:每个特征变量都在高斯分布正常范围内,但是合起来看就不是了,为了在此时也能正确判断异常,需要用到多元高斯分布。
异常检查(Anomaly Detection)
p(x;μ,σ)=1((2π)n/2σ12e12(xμ)Tσ1(xμ)p(x;\mu,\sigma)=\frac{1}{((2\pi)^{n/2}|\sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu)^T\sigma^{-1}(x-\mu)}
此时σ叫做协方差矩阵
如果变量互相独立,那么协方差矩阵非对角元都是0
异常检查(Anomaly Detection)

Isolation Forest

未完待续