异常检测(Anomaly Detection)是为了发现运维中偏离正常值的异常数据。
异常检测算法的基本思想是:用正常的数据去训练模型,得到阈值,然后去判断新的数据
是否异常。
异常检测如今被广泛应用于:欺诈用户检测,制造业异常检测,计算机监控等!
在详细介绍异常检验算法之前,需要了解异常检测和监督学习的不同:
假设一个二分类问题,普通的监督学习,训练集中两种类别 y1 和 y2 的数量通常是一样、或者相近的。所以通过 (x1, y1) 和 (x2, y2) 可以训练出一个合理的阈值去进行二分类。
但是许多情况下,数据集会存在Mis_Classfication的情况,即各类别样本数据量不均匀。比如异常检测通常都是正常数据(即x1和y1的数据),很少有异常数据(即x2和y2的数据),所以没法用一般监督学习的思想去解决异常检测问题。
所以异常检测算法通常只训练正常数据!
异常检测算法详解:
之后我在算法里所用的数据集Data.mat,是计算机的监控数据,主要包含两个特征Latency(延迟)和Throughput(吞吐量)。Data.mat中包含3个key:X,Xval,Yval。X是训练数据;Xval是验证集;Yval中的数据均为01,对应Xval中的数据是否异常,异常为1,正常为0。
数据集链接地址:https://pan.baidu.com/s/18aC3a6hDX_DmlrAxKMuf6A
1、用正态分布拟合训练集
如果一个数据集服从正态分布,那我们有理由相信,该数据集是符合事物常态的。所以对于数据集,我们要先判断它是否符合正态分布;如果不符合,可以采用或者
的方法,将原数据变为正态分布。
对于上述的Data.mat数据集,将X的概率密度函数图画出来为: