提示:这里可以添加本文要记录的大概内容:
一、问题动机
异常检测问题的具体应用其实在我们的生活中很常见,例如我们的飞机制造工厂新生产了一批飞机,我们需要检测这批飞机中是否存在不合格的飞机,这时我们就会应用异常检测。
我们通常的做法是构建一个模型,计算p(x),也就是对x的分布概率建模。我们设定一个阈值ε,当p(xtest)<ε,则判定为异常。当p(xtest) >= ε时就判定为合格。
二、高斯分布
假设x∈实数,且x的均值为u,方差为σ2,则用数学符号可以表示为x~N(u,σ2),图像大致如下图所示:
其中u确定了中心位置,σ则确定了山峰的宽度。
其中
三、算法
假设特征x∈Rn,且各个特征之间相互独立,那么可以得到以下等式:
整理一下异常检测算法的思路,有下面几步:
1、选择一些你认为能够指示出异常的特征
2、拟合参数
3、给出新的样本,计算出错的概率,判断是否发生异常
如下面就是一个应用异常检测的例子:
四、开发和评估异常检测系统
在我们构建异常检测系统的时候,我们也需要一些方法来评估我们构建系统的好坏。
因此假定我们拥有一些带标签的数据(一些y=0的正常样本,一些y=1的异常样本),我们会将它们划分为训练集、交叉验证集和测试集。
例如下面这个例子,在飞机检测中,我们拥有10000架好的飞机,20架不合格的飞机样本。我们会按照如下来分配数据集:
下面介绍一下评估异常系统好坏的算法的具体步骤如下:
1、利用训练集去构建模型p(x)
2、使用交叉验证集或测试集去进行预测,如下图所示:
3、利用精确率、召回率、F值等指标进行评估系统构建的好坏。
4、使用交叉验证集选取最优的阈值ε
五、选择要使用的功能
对于一些不服从高斯分布的特征,可以对数据进行一些转换,使得它看上去更像高斯分布。如下图所示
此外,因为我们通常希望正常样本的p(x)比较大,而异常样本的p(x)比较小,这样就方便我们进行监测。但是,在实际问题中,我们也可能会到的正常样本和异常样本的p(x)都很大的情况。
这时,我们可以通过创造新特征的方法来解决这个问题。
下面以一个监测电脑数据的例子进行介绍,如下图所示:
一般情况下,如果网络流量增加了,那么CPU的负载也会增加,两者是呈一个正相关的趋势的。但是对于x3,x4特征,有可能出现CPU负载很大,但是网络流量很小的情况,因为两者都分别处于正常范围内,所以不会被判断为异常。但是实际上是出现异常了,因此单独的特征无法正确反映情况。
因此,可以尝试构建新特征,如下图所示:
六、多变量高斯分布
上小节谈到的监测电脑异常的问题,无法判断两个变量之间的关系,进而对于异常产生错误的判断,具体也如下图所示:
改进的方法是这里采用多元高斯分布(多元正态分布)
具体思想:使用p(x)计算所有特征的概率分布,其中参数u∈Rn,σ∈Rn*n。 ∑指的是协方差矩阵。具体如下图所示:
多元高斯分布可视化如下图所示
七、使用多变量高斯分布的异常检测
我们需要准备如下构建模型的参数,具体如下图所示:
具体的算法步骤如下:
1、准备拟合模型的参数
2、引入新的样本,进行异常检测
下面介绍一下原始的模型和多变量高斯模型的联系:
1、如果多变量高斯模型的协方差矩阵除了对角线之外,全是0。那么多变量高斯模型和原始的模型就是一样的模型。
2、由于第一点原因,原始的模型的可视化图一定是轴对称的。而多变量高斯模型还可以是y=x对称。因此原始的模型其实是多变量高斯模型的一种特殊情况。
3、原始的模型,协方差矩阵是对角矩阵,暗示各个特征之间是相互独立的。当使用多变量高斯模型的时候,暗示各个特征之间是有联系的。
对于原始模型和多变量高斯模型的选择主要遵循以下几个方面:
1、原始的模型需要手动建立特征之间的关系,也就是创建新的特征。手动创建的特征,可以使得原始模型运行的更好。
2、多变量高斯模型则可以自动捕捉这种不同特征之间的关系。
3、原始模型计算成本较低,能够适应更高维的计算。多变量高斯模型要计算逆矩阵,所以计算成本较高。
4、对于样本数量m比较小的时候,原始模型也可以计算的很好。但是对于多变量高斯模型,必须使得样本数量m>特征数量n,否则会出现不可逆的情况,比较适合m>=10*n的情况。
注意:如果在使用多变量高斯模型的时候,发现不可逆了。首先检查m是否大于n,其次检查特征中是否有线性相关的特征,去掉冗余的特征。