[论文阅读] Adaptive kernel density-based anomaly detection for nonlinear systems
摘要
本文提出一个无监督的基于密度的用于异常检测的方法
目的:定义一种*滑而有效的异常度量,可用于检测非线性系统中的异常。
局部离群值得分(local outlier score, LOS):该方法为每个样本分配一个局部离群值分数(local outlier score, LOS),表明一个样本在其位置上与其他样本的偏差程度。具体为,一个样本与其一组相邻样本之间的局部密度的相对度量。
自适应和宽度:在高密度区域,我们应用宽核宽度来*滑正常样本之间的差异;在低密度区域,我们使用狭窄的核宽度来强化潜在异常样本的异常。
简介
对于复杂系统,线性逼*很容易导致问题的不拟合,导致较大的偏差
在本文中,我们只考虑无监督、基于知识的、数据驱动的异常检测技术。
本文提出了一种基于自适应核密度的异常检测(adaptive kernel density-based anomaly dection, Adaptive-KD)方法,用于检测非线性系统中的异常。该方法是基于实例的,并为每个样本分配了一定程度的异常值,即局部离群值分数。具体来说,局部离群值得分是一个点和其一组参考点之间的局部密度的相对度量。测量局部密度通过光滑核函数定义。
创新点:在计算局部密度时,核宽度参数根据一个候选点到其邻*点的*均距离自适应设置——距离越大,宽度越窄,反之亦然。使用该方法的好处在于增强了异常值测量的判别能力,可以突出潜在异常点与正常点之间的对比,并*滑正常点之间的差异,这是非线性异常检测应用所需要的。
相关工作
非参数密度估计可以通过核方法或k最*邻方法来实现。前者使用固定大小的区域中样本个数的信息,而后者考虑包含固定数量样本的区域的大小。
设 \(X\) 为一个 \(m \times n\) 的矩阵,表示 \(m\) 个独立同分布的样本 \(\{x_1,x_2,\dots,x_m \}\)。样本是从 \(n\) 维欧几里得空间中以未知的概率密度 \(p(x)\) 取得。
Parzen窗口估计
低概率密度可能意味着样本的出现不符合底层数据生成机制,因此表明可能存在异常,反之亦然。
对于样本 \(x\) 的密度估计如下:
其中 \(K(\cdot)\)代表核函数, \(h\) 为控制估计器*滑度的宽度参数。系数 \(\frac{1}{m}\) 和 \(h^{-n}\) 将密度估计归一化,使其在 \(x\) 的域内归一化。
为了实现密度估计的*滑性,需要一个*滑核。*滑核是一个参数的函数,它满足 \(\int{K(x)dx}=1,\int{xK(x)dx}=0,\int{x^2K(x)dx}>0\)
异常检测方法:为了检测给定集合 \(X\) 中的异常,我们可以使用公式(1)评估所有样本的密度,然后在这个单变量密度上设置阈值。密度小的样品可视为潜在异常。
优点:Parzen窗口估计没有对数据分布的假设,因此具有实际意义
缺陷:它在检测包含几个密度有显著差异的集群的数据集中的异常时可能表现不佳。
如图1所示:O点(红色星号)是靠*密集簇C1(蓝点),远离分散簇C2(黑点)的异常点。假设选择L2范数作为距离测度,采用宽度为 \(d_c\) 的均匀核
如果我们忽略归一化常数,用公式(1)计算出来的 \(\hat{p}(o)\) (点o的密度)可以直观地解释为落在半径为 \(d_c\) 的圆(虚线圈)上的点的数量。\(\hat{p}(o)\) 可能比簇 C2中许多点的密度要高。
如果阈值设置的高,虽然能捕获到异常点 o,但也可能导致较高的误报率,因为这里的密度估计是全局度量。
因此,它缺乏从密度较小的簇C2中的那些点中区分异常点o的能力。除此之外,不建议使用公式(1)中固定的核宽度从正常样本中分离潜在异常。
局部离群值因子(Local outlier factor,LOF)
局部离群因子(LOF)方法根据包含 \(k\) 个最*邻的区域的大小来定义密度,其定义如下
其中 \(KNN(x_i)\) 为第 \(i\) 个点的 \(k\) 个最*邻的索引集,\(\text{reach-dist}_k(x_i,x_j)\) 为 \(x_i\) 相对于在集合 \(kNN(x_i)\) 中的\(x_j\) 的可达距离,定义如下
\(d(x_i,x_j)\) 是点 \(x_i\) 到 \(x_j\) 的距离度量(例如\(L_2\)范数),\(\text{k-dist}(x_j)\) 是点 \(x_j\) 到它的第 \(k\) 个最*邻居的距离(即,对距离进行从小到大排序后的 \(KNN(x_j)\) 中的第 \(k\) 个元素)。引入可达距离的目的是为了减少距离测量中的统计波动。
直观地说,局部可达密度可以反映包含一个点的k个最*邻居的区域大小。局部可达密度越小,该点的越可能是离群点,反之亦然。
然而,局部可达性密度不一定是局部离群值的度量。它可能会遇到图1中使用Parzen窗口估计器进行异常检测的问题。为了解决这个问题,LOF定义了一个次要度量,一个局部离群因子,来度量局部离群值。第 \(i\) 点的局部离群因子定义如下:
这是一个相对度量,计算一个点的 \(k\) 个最*邻居的*均局部可达密度与该点自己的局部可达密度之间的商。
通常,局部离群因子在1附*(或小于1)的点应该被认为是正常的,因为它们的密度大致等于(或大于)它们邻*点的*均密度。局部离群因子显著大于1的点更有可能是异常点。
局部离群值度量的关键点: 将一个点的度量与其参考点点的度量进行比较。比如将一个点的局部可达密度与其周围的 \(k\) 个邻居的局部可达密度进行比较。在局部意义上定义离群性度量的意义在于,局部离群性度量相对于密度估计中的波动更具不变性,因此在具有不同密度的数据集上更具可比性。
缺陷:
- 局部可达密度不*滑。这可能导致局部离群值度量不连续
- 对于输入参数(最*邻的数量)比较敏感。错误选择该参数很容易隐藏数据中的结构,如图5(1d)所示
基于核密度的自适应异常检测方法
本文将将上述两种方法结合起来,得到一种*滑的局部离群度量,能够从非线性数据中检测出异常。
LOF方法提供了定义局部离群值的基本方案,而在Parzen窗口估计方法中使用核函数的思想有助于导出*滑密度估计。为了增强局部离群测度的鉴别能力,我们使用自适应的核带宽。
该方法的一般思想
Adaptive-KD 的方法试图定义一个函数 \(f\),将 \(X\) 映射为一个的实值向量 \(LOS\in R^m\)。即 \(f: X\rightarrow LOS\),其中\(LOS(x_i)\) 表示第 \(i\) 点的局部离群值。
Adaptive-KD方法遵循LOF方法的基本步骤来获取局部离群度量:
- 定义参考集,推导主要度量(局部密度)
- 基于主要度量和参考集计算次要度量(局部离群)
在第二步中,为了实现局部离群度量的*滑,采用Parzen窗估计的思想,使用*滑的核函数来定义主要度量。为了增强对正常样本和异常样本的区分能力,采用了自适应核宽度的方法。
一般方法是在高密度区域应用较小的带宽 \(h\),在低密度区域应用较大的 \(h\)。但获取有关高密度和低密度区域的信息需要了解密度信息,而这正式密度估计的目的。
Silverman规则使用点到其 \(k\) 个*邻点的*均距离信息作为点密度的粗略估计,并定义核宽度 \(h_i\):
其中,\(c\) 是控制整体*滑效果的用户自定义参数。密度估计值为:
在异常检测的背景下,核宽度的优选设置与密度估计问题中的设置正好相反。也就是说,高密度区域优先选择较大的宽度,低密度区域优先选择较小的宽度。
原因:
- 在高密度区域,虽然可能有一些有趣的结构,但我们通常对它们不感兴趣,因为它们在试图区分异常和正常样本时没有信息。
- 在高密度区域进行过*滑密度估计可以减少正常样本局部离群度量的方差,有助于区分异常。
- 在低密度区域,采用较小的带宽,会使得来自核的“长尾”部分的贡献大大减少,从而导致更小的密度估计。这可以使异常点突出,增强方法对异常的敏感性。
利用自适应核宽度计算局部密度
我们用 \(r_i\) 和 \(\rho(xi)\) 分别表示第 \(i\) 个点的核宽度和局部密度。值得注意的是,我们方法中的局部密度不需要是概率密度。因此,式(6)中的归一化常数可以忽略。我们也不需要为整个数据空间定义局部密度,对给定集合的每个数据点上定义一个指标就足够了。通过应用高斯核,也称为径向基函数(Radial Basis Function, RBF),第i个点的局部密度如下:
公式7中的右式不包括第 \(i\) 个点本身的贡献(即,\(exp(-(x_i-x_i)^2/r_i^2)=1\)),这是为了突出不同点之间密度的相对差异(例如,0.1/0.3 远小于数量 1.1/1.3)。
高斯核函数的定义
\(x'\) 为核函数中心,\(\|x-x'\|^2\) 为向量 \(x\) 和向量 \(x'\) 的欧氏距离(L2范数),随着两个向量的距离增大,高斯核函数值单调递减。
\(\sigma\) 控制高斯核函数的作用范围,其值越大,高斯核函数的局部影响范围就越大。\(\sigma\)选太小容易过拟合。
- 当 \(\sigma\) 比较大时,取个倒数就变成了很小的一个系数,此时向量 \(x\) 和 \(x'\)之间距离的变化对指数整体数值的影响就会变小,此时 \(k(x,x')\) 的变化也会比较 “*滑”。
- 同理,当 \(\sigma\) 比较小时,让向量 \(x\) 和 \(x'\) 之间距离的变化对指数整体数值的影响变大了,此时 \(k(x,x')\) 的变化会变得比较 “尖锐”。
对一个点的局部密度的简单解释如下:使用高斯核对局部范围内的点进行卷积,每个点的*均贡献。一个更直观的解释如图2(a)所示。点 \(x_2\) 的局部密度是高斯核下,蓝色实心垂直线的*均高度。从图2(a)中也可以明显看出,局部密度反映了一个点被其他点支持的程度。靠*关注点的邻*点越多,其局部密度就越大,反之亦然。
当带宽趋于无穷时,图中的高斯函数对应的曲线将会趋于*坦,\(x_1,x_3,x_4,x_5\)对密度的贡献接*1,从而导致 \(\rho(x_2)=1\)。同理,其他点的密度也趋*于1。所以,一个大的带宽会模糊点之间的密度差异。
当带宽趋于无穷小时,高斯函数就变成了狄拉克函数。这意味着只有在给定数据集中的那些点的密度为非零,而其他点的密度为零。这就解释了为什么一个小的带宽会加剧点之间的密度差异。
宽度 \(r_i\) 应该依赖于局部性。高密度区域首选大 \(r_i\),低密度区域首选小 \(r_i\),如图2(b)所示。正如预期的那样,这种局部依赖的宽度将导致两个结果:远离其他点的点将更加孤立,正常点之间的差异将被模糊。
对于第 \(i\) 个点,定义 \(d_k(x_i)\) 表示它到它的 \(k\) 个最*邻的*均距离。\(d_\text{k-max}\) 和 \(d_\text{k-min}\) 表示最大的 \(d_k(x_i)\) 和最小的 \(d_k(x_i)\)。与Silverman规则类似,我们使用 \(d_k(x)\) 作为密度的粗略估计,然后在宽度 \(r\) 和 \(d_k(x)\) 之间构造一个负相关关系。我们限制核带宽为正数。定义第 \(i\) 个点的带宽如下:
其中 \(c(c>0)\) 也是控制整体*滑效果的缩放因子,\(\varepsilon\) 是一个非常小的正值(例如,\(10^{−5}\)),确保宽度非零。Silverman的经验法则表明,在密度估计问题中,c应该从0.5到1。
公式(8)中的核宽度 \(r\) 与数量 \(d_k(x)\) 呈线性负相关。一般来说,只要满足上述要求,这两个量之间的关系可以是任何形式的函数。
计算局部离群值
第 \(i\) 个离群值的得分定义如下:
对上述数量的一个直观解释是,它是一个点的最*邻的*均局部密度与它自身的局部密度的相对比较。
模型集成及其在线扩展
Adaptive-KD伪代码如图3所示。其中的特征归一化是对不同特征的数值范围进行标准化的一种重要技术。它避免了在以后的计算中,较大数值范围的特征支配较小数值范围的特征。在异常检测应用中,我们推荐使用Z-score归一化而不是MinMax缩放,因为后者可能会抑制异常的影响。Z-score 方法将给定的矩阵 \(X\) 归一化为 无量纲矩阵 \(X^*\)。第 \(i\) 个点 \(x_i\) 的归一化公式为 \(x_i^*=(x_i-\bar{x})/\sigma\),其中 \(\bar{x}\) 和 \(\sigma\) 是 \(X\) 的均值向量和标准差向量
通常,在线异常检测任务分为离线模型训练和在线测试两个阶段,如图4所示。在无监督的环境中,第一阶段试图学习正常行为;第二阶段在新生成的样本到达时,将其与学习到的正常模式进行比较。测试时,将样本偏离正常模式的程度作为判别异常和正常样本的依据。
离线模型训练阶段如图4所示,基本遵循图3中Adaptive-KD算法的流程。由于该阶段旨在学习系统正常行为的模式,因此需要精心选择无异常样本来构建训练集。因为正常用本中的异常的存在可能会降低测试时时样本的局部离群值得分,所以我们添加了一个数据精炼程序,从训练集中排除那些具有非常高的局部离群值的样本,然后重新训练模型。该方法偏主观。
在第一阶段学习到的正常模式作为模型参数,在第二阶段使用。值得注意的是,我们的模型参数在训练后是固定的。这个在线扩展的基本假设是,系统的正常行为不会随着时间的推移而变化(数据流中没有概念漂移)。我们可以定期对模型进行再训练,以吸收系统中的正常变化。
在测试阶段,在线样本到它们的 \(k\) 个最*邻的*均距离可能非常大。当应用公式(8)时,这可能会导致核宽度为负,违反了正性要求。因此,我们使用以下校正的线性函数来重新定义核宽度。值得注意的是,任何测试样本的参考集都来自于训练集。
复杂度
算法中计算最密集的步骤是 \(k\) 个最*邻的推导和局部密度的计算,两者的时间复杂度为 \(O(m^2\cdot\max(n,k))\)。减少查找 \(k\) 个最*邻居的时间复杂度的典型方法是采用索引结构,例如 \(k-d\) 树或 \(R^*\) 树,时间复杂度可以降低到 \(O(m\cdot log(m)\cdot\max(n,k))\)
局部密度计算的复杂性在于高斯核计算,这主要是因为高斯核具有无界支持度。换句话说,对于每个点,高斯核函数需要对所有剩余的点求值。
与离线模型训练阶段一样,在线测试阶段对计算量要求最高的步骤是 \(k\) 个最*邻的推导和局部密度的计算,两者的时间复杂度都为 \(O(m\cdot\max(n,k))\)。使用与前面讨论的相同的考虑因素,可以大大降低计算成本。
实验结果
该部分将Adaptive-KD 与 SVDD 和 KPAC 进行比较。
使用“聚合”数据集进行*滑性测试
如图5(1a)所示,数据集包含788个样本,形成7个不同的聚类。
Adaptive-KD
如子图(1b)和(2b)所示,我们的方法可以正确地检测聚类的形状,并给出一个非常*滑的局部离群值度量。此外,本例中的结果对参数k的变化具有相当的鲁棒性。当参数k = 20时等高线图的另一个例子是在子图(2a)中。注意,在集群核心中,局部离群值几乎相同。这是由于高密度区域大核宽的*滑效应造成的**。
LOF
虽然LOF方法可以在 \(k\) 较小时检测出聚类的形状,如(1c)所示,但当k取较大值时,会破坏左下两个聚类的结构,如(1d)所示。此外,从子图(2c)和(2d)中可以看出,局域离群因子的等值线曲线从簇心到簇晕呈一种摆动的曲线,这是因为推导LOF测度的局域可达性密度不是一个光滑的度量。
SCDD
如(1e)所示,当核宽度较小时,SVDD方法容易欠拟合,无法检测到数据集中簇的形状。当 \(\sigma_\text{rbf}\) 较大时,该方法可以捕获不同星团的整体形状,但是异常值的度量并不*滑,如(1f)中星团内部的浅蓝色凹陷所示。
KPCA
与SVDD方法不同,当 \(\sigma_\text{rbf}\) 较大时,KPCA方法容易欠拟合。虽然当 \(\sigma_\text{rbf}\) 较小时,KPCA方法成功地识别了集群的形状,如(1g)所示,但它对离群性的测量并不像使用我们的方法产生的局部离群值分数那样*滑。
使用高度非线性数据集的有效性测试:二维环形螺旋
我们将这些方法应用于一个高度非线性的数据集,并比较结果。在本例中,训练集是一个包含1000个样本的二维环形螺旋,如图6(1a)所示。
Adaptive-KD
我们的方法可以有效地检测到数据的形状,等高线图*滑地向内外凹陷波动,如图6 (1b)和(2b)所示。
LOF
同样,LOF方法可以在一定程度上识别数据的形状,但等高线图是相当不均匀的,并且在测量局部异常值方面的不连续是显著的,特别是当k取较大值时。
SVDD、KPCA
SVDD方法在内核宽度较大时检测形状,而KPCA方法在宽度参数较小时工作。SVDD在环形螺旋内部的表现似乎比KPCA更好,但三种方案的离群性测量并不像我们预期的那么*滑。
一般来说,较小的 \(k\) 会导致较小的 \(d_k(x)\) 和 \(r\),从而降低整体的*滑效果。这种现象可以通过选择较大的c来补偿。
使用图1中的数据
一个经过调优的核密度估计器中获得的整体异常值度量可以在这些例子中实现类似的*滑性,但它可能在集群密度有显著差异的数据集中失败。如图7所示。那些离群值大于或等于 \(o\) 点(密集簇C1附*的点,被怀疑为异常点)的点被标记为红色。
这个实验澄清了我们关于当数据显示不同密度区域时,使用Parzen窗口估计在离群值检测中的缺陷的主张。此外,它还说明了使用我们的方法的好处。
使用“flame”数据集进行鲁棒性测试
使用“flame”数据集来确定训练集中异常的存在如何影响各种方法。我们还讨论了我们的方法对输入参数扰动的鲁棒性。“flame”数据集如图8 (1a)所示,左上角的两点被认为是异常点。
Adaptive-KD方法自然能够将局部离群值分配给训练集中的任何样本。因此,离线训练阶段的数据精炼步骤应该能够捕获和丢弃这两个异常,并在精炼集上重新训练模型。
输入参数的扰动对Adaptive-KD方法的影响
参数c
如图9(1a)和(1b)所示,相应的等高线图如图(2a)和(2b)所示
参数c直接控制整体*滑效果。较小的c可能会增强数据中的精细细节,导致过拟合,而较大的c可能会导致过*滑和欠拟合。注意,当选择较大的c时,训练集中异常的影响可以在一定程度上抵消,因为两个异常处的局部信息被*滑了。
参数k
如图9(1c)和(1d)所示,相应的等高线图如图(2c)和(2d)所示
由于参数k对核宽度的尺度有间接的影响,所以它可以以类似于c的方式影响*滑效果。
与其他无监督学习方法一样,Adaptive-KD方法依赖于点之间的相似性(或不相似性)测量。具体来说,LOS计算的是一个点的局部密度与其 \(k\) 个最*邻居的密度的相似程度。
k还决定了参考集的数量,从而影响了局部离群测度。
- 如果k取的值非常小,则极少数参考点的局域密度可能会主导该点局域离群值得分的计算,从而导致离群值测度的不连续,如图9 (2c)所示。这就解释了(2c)中所示的等高线图在k取很小的值时内部会有很大的波动。
- 在极端的情况下,当k取训练集大小的值时,LOS恢复到一个全局的离群性度量。式(9)中的分子对于每个点都是相同的,离群性度量的排名仅仅是局域密度的排名的倒序
根据我们在上面三个例子中的实验,只要参数 \(k\) 不落在太大或太小的范围内,结果对参数 \(k\) 的变化是相当稳健的。因此,我们建议将 \(k\) 设置为一个相当小的值来捕捉局部性的概念,然后相应地调整 \(c\)。
使用真实世界的数据集进行验证
图10显示了数据中不同密度的聚类,可能对应于不同的装载重量、操作模式等。
最终数据集包含9970个样本,其中30个为异常。数据有八个维度。
如图11所示,Adaptive-KD方法在精度上优于其他两种方法。
在我们的方法中,在所有的计算中,都可以追溯到点的 \(k\) 个最*邻居、核宽度、局部密度和局部离群值。有了这些知识,就可以对所识别的异常样本的异常行为作出初步解释。
总结
本文提出了一种基于非监督密度的非线性系统异常检测方法。像许多其他无监督学习方法一样,它使用不同点之间的相似性度量,并为每个点分配一个异常度,即局部离群值(LOS)。LOS在这里被定义为一个点与其相邻点集之间的局部密度的相对度量,而局部密度是评估一个点与其相邻点之间相似性的相似度度量。为了使测度*滑,我们采用了高斯核函数。为了增强度量的鉴别能力,我们使用了依赖于局部性的内核宽度:宽的内核宽度应用于高密度区域,而窄的内核宽度用于低密度区域。通过这样做,我们可以模糊正常样本之间的差异,强化潜在异常样本的异常。当采用Silverman规则时,对不同密度区域的识别就变成了对密度的粗略估计,即从一点到它的 \(k\) 个最*邻居的*均距离(呈负相关关系)。
根据实验,我们得出以下结论:
- 该方法能够识别数据中的非线性结构。
- 所提出的局部离群值是一种*滑测度。此外,簇心处的局部离群值基本相同,而簇晕的离群值明显较大。这表明局部依赖的核宽度可以增强异常检测任务的分辨能力。
- 随着数据细化步骤的增加,所提方法的在线扩展对训练集中异常的存在具有更强的鲁棒性。它对参数 \(k\) 的变化也比LOF方法更稳健。
- 该方法的可解释性远大于其他从输入空间到特征空间隐式进行非线性转换的核方法。
- 在工业数据集上的实验证明了该算法在实际应用中的适用性。
以下考虑留给未来的工作:
- 我们的方法可以扩展到在时间上下文中检测非*稳数据流中的故障,例如使用滑动窗口策略。
- 使用其他具有紧凑支持的*滑核函数可以加快计算速度,但使用其他核函数的影响需要充分研究。
本文来自博客园,作者:Un-Defined,转载请保留本文署名Un-Defined,并在文章顶部注明原文链接:https://www.cnblogs.com/EIPsilly/p/17278405.html