异常检测算法(Anomaly detection algorithm)
我们定义异常检测算法的输出,也写作,这里的每一项括号内代表的是每个特征都符合各自的高斯分布(也就是正态分布),代表均值,决定了模型的中心位置;代表方差,决定了模型的离散程度,越高则离散程度越低。这里用乘积的方式是因为假定每个特征都是独立的,那么每个特征同时满足的概率就是各自的乘积。以下是异常检测算法的步骤:
异常检测算法步骤
如图,第一步跟正常算法一样,都是选择特征量,但在这里建议选择一些比较能彰显正常样本的特征,因为此算法的目的是为了筛选出异常样本;第二步是选取数据组成训练集,并对均值和方差进行参数拟合;最后将拟合好的参数预测样本的特征带入公式中计算概率并判断是否小于一个极小值(如0.02)。
开发和评估异常检测系统(Developing and evaluating an anomaly detection systeam)
在之前,我们有提到过可以通过在算法应用的结果里加入一个返回值来评估算法优化的好坏,在这里我们用来评估异常检测系统。
首先,从开发开始,我们先把无标签的样本放入训练集,再将有标签的样本放入验证集和测试集来验证我们的算法,以飞机引擎为例,假设我们有10000个好的引擎数据和20个异常样本,将好的样本按照6:2:2的比例分别放入训练集、验证集和测试集中,再分别将10个异常样本放入验证集和测试集中。
接着便是利用训练集的数据来拟合,并将验证集和测试集的样本用于该函数来预测结果。最后,我们计算,从而得出算法的精度和召回率(由于正常样本过多属于偏斜类问题,前面提到过这个时候用分类的正确率来评估是不准确的,其值会一直很高)。注意,在验证时要使用多个来确定哪个更合理,而不是直接任意取一个极小值。
注意,在验证集和测试集中,我们使用的是带标签的数据来测试函数,这与在解决监督学习问题时十分类似,但两者从定义和使用条件上有本质的区别。前者是大量的正常样本下,有极少量的异常样本,未来可能会出现新的异常样本,且多个异常样本之间很可能属于不同类,像引擎问题中的异常样本可能是零件问题,也有可能是燃油问题,这个时候我们只需要圈定正常样本的范围,其他边界以外的一律认为是异常样本即可,所以我们的训练集中放入的全都是无标签的正常样本;而后者则对样本量有要求,需要正常样本和异常样本都有很大的数量,且训练集中两者都有且都要有标签。
特征选取与处理(Features choosing and solving)
这里说的特征选取实际上是在第一次算法运行之后进行选择,当我们运行算法后,发现异常样本的特征值落在了正常样本的范围里,此时就需要我们返回训练集,通过观察其特征,试图加入一个新的特征(例如,可以通过构造一个数,其值通过正常数据特征除以异常数据特征计算得出的新特征,这样其比值变化便能帮助我们筛选出异常样本)来让算法在保证其他结果不变的情况下,筛选出这个异常样本,使其在后续拟合的函数中落在边界之外。
而特征的处理则比较简单,我们在将数据应用于算法在之前,可以先可视化数据,若其图像不符合高斯分布,可以通过数据转换(像指数函数,对数函数等等)使其数据分布性质符合高斯分布,从而让算法运行得更好。
多元高斯分布(Mul-variate gaussian distribu-on)
算法无法检测特殊异常样本
如图,正常样本的范围是在椭圆形里,但是普通异常检测算法的逻辑是判断两个特征各自的高斯函数值,实际上判断的是是否落在圆内,所以像图里在椭圆以外的异常样本无法检测出来。
鉴于此,我们不再分别对特征建模,而是构建一个整体的模型,也就是多元高斯分布模型。
多元高斯分布概率及参数公式
如图,与普通的高斯分布相比,多元的高斯分布依然是两个参数,分别代表中心点和协方差矩阵,一个是n维向量,一个是n×n的矩阵,依然是前者决定中心位置,后者决定函数离散程度,只是后者可以改变矩阵右对角线的元素的值使得图像不再是轴对称而往其他方向偏移,也就是说普通高斯分布实际上就是当是对角矩阵时的多元高斯分布。
一般当样本数量很大的时候,我们还是倾向于使用普通高斯分布模型,其计算成本较低,特殊的异常值我们可以通过手动构建新的特征来捕捉;而当样本数量较少时(100或1000),我们可以通过构建多元高斯分布来捕捉特殊异常,注意样本数量要远远大于特征的数量,这会导致协方差矩阵不可逆拟合不了参数,如果在此情况下矩阵还是不可逆,那么就需要检查一下是否有冗余特征,即的情况出现。
视频学习来自:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=95