数据分析过程中, 总是存在一些与其他数据大相径庭的非正常对象, 这种异常现象影响着数据挖掘的准确性, 甚至对其应用领域造成巨大的损失. 异常的产生可能会表现为人为错误、技术或机械方面的故障、噪声、系统变化和欺诈行为等[1]. 比如: 顾客的某次消费明显不同于以往正常的花销记录; 中转设备发生故障时, 通信或数据的传输出现错误; 路由器在短时间内突然收到大量交换包[2]. 为了避免这些异常的现象对数据挖掘的影响, 异常检测技术得到广泛应用. 虽然, 大部分的异常检测方法在技术上基本相同, 但是, 它们会有许多不同的名字, 比如离群值检测、异常值检测、新颖值检测、噪声检测或异常挖掘等[3]. 异常检测是数据挖掘中的一个重要问题, 目的是把那些与其他数据点显著不同的独特或不寻常的数据对象检测出来[4].
异常检测的算法可以大致分为4大类: 基于统计的异常检测算法[5, 6]、基于距离的异常检测算法[7–9]、基于密度的异常检测算法[10–12]和基于聚类的异常检测算法[13–16]. 基于统计的异常检测算法分为有参数和非参数两大类检测算法, 与之前的算法相比, 提升了异常检测的性能. 但是, 其数据分布需要提前确定, 基于距离的异常检测算法弥补了这一缺点, 不需要考虑数据分布. 基于距离的异常检测算法主要是基于目标对象邻域的稀疏状态与其异常状态之间的相关性假设[9]. 基于密度的异常检测算法根据数据点的密度检测异常, 如果某个数据点的密度低于其周围邻居的密度, 那么该数据点就是异常点[12]. 基于密度的异常检测算法主要从局部的角度来考虑异常情况, 可以识别更多有意义的局部异常数据点.
聚类作为一种无监督的方法, 根据相似度度量对数据进行分组, 其目标是获得高的簇内相似性(即类簇内的数据是相似的)和低的簇间相似性(即来自不同类簇的数据是不同的)[13]. 那么, 基于聚类的异常检测算法是根据数据点之间的相似性将数据集中的数据点分类为多个聚类, 异常值是指不位于任何聚类中或离最近聚类的质心很远的数据点[17]. DBSCAN (density-based spatial clustering of applications with noise)[14]可以发现任意形状的簇, 将数据有效的分开, 能够在低密度区域中识别噪声, 即噪声数据的密度必定低于簇的密度. Huang等[15]提出了一种新的基于聚类的异常检测算法(relative outlier cluster factor, ROCF), 不需要提前指定异常值的个数, 只需要一个参数k表示邻居的数量, ROCF也可以通过构造决策图自动计算出数据集的离群率. 整体而言, ROCF检测算法在获取离群值和离群值簇时更加倾向于自适应性. 为了提升大规模数据集中的异常检测性能, Nozad等[16]提供了基于批处理的异常检测算法, 是一种利用聚类方式检测异常的算法, 在此过程中通过密度实现聚类, 该算法对具有相关性或不相关性特征的高斯簇的检测效果表现更好, 同样适用于遵循任意分布的凸形簇.
本文提出了一种基于二阶近邻的异常检测算法, 通过二阶近邻获取相似性矩阵完成聚类过程, 利用每个簇中的数据点与其所属簇中心的关系捕捉异常情况. 该算法的相关假设是: 正常的数据点更加靠近所属簇中心, 远离簇中心的数据点则表现为异常; 一般情况下, 异常数据点的密度比正常数据点低. 基于二阶近邻的异常检测算法主要分为两阶段: 聚类阶段和异常检测阶段. 在聚类阶段, 通过二阶近邻的方式获取相似性矩阵, 这一过程捕获到了数据在聚类过程中的全局结构. 第二阶段考虑了每个簇中的数据点与其所属簇中心之间的关系, 根据正常数据点与簇中心关系更加紧密, 异常数据点与簇中心相距较远这个假设, 计算每个簇中所有的数据点与其所属簇中心之间的距离; 根据密度较小的数据点更有可能成为异常点的假设, 计算每个数据点的密度. 结合距离值与密度值, 最终获取每个数据点的异常值分数.
本文的主要贡献有以下两点.
(1) 提出了一种基于二阶近邻的异常检测算法, 利用二阶近邻获得相似性矩阵, 综合考虑数据的局部性和全局性结构信息, 深入挖掘数据点与数据点之间的关系, 增强了捕获它们之间的相似性的能力, 对于较稀疏的数据集会有更好的性能;
(2) 在异常检测阶段, 根据簇中的数据点与所属簇中心之间的关系判断异常情况, 同时考虑到簇与簇之间的临界处可能会存在数据点较密集的情况, 根据密度较小的数据点更有可能成为异常点的假设, 利用数据点的局部密度排除边界情况, 减少错误识别异常值的可能性.
1 相关概念如果近邻图中任意两个顶点
基于亲和传播的聚类(affinity propagation, AP)[19]是在2007年被提出的一种重要的聚类算法, 主要结合相似性和消息传递进行聚类, 将数据点对之间的相似性作为消息传递的一个输入度量. 真实值消息在数据点之间交换, 直到最优候选范例和相应的集群逐渐出现. 具体的消息传递过程如图2所示. 图2(a)表示的责任(responsibility)
2 算法描述
基于二阶近邻的异常检测算法通过二阶近邻获得相似性矩阵实现聚类, 以聚类结果为基础, 根据簇中的点与簇中心的关系, 计算每一个簇中的所有的点与该簇中心的距离, 捕获异常情况. 同时考虑每个数据点的局部密度, 避免在簇与簇之间的边界处错误识别异常值的情况. 基于距离值和局部密度值得到每个数据点的异常值分数, 并根据异常值分数排序, 取其值较大的数据点作为异常点. 该算法的流程图如图3所示.
2.1 聚类阶段
本节主要对整个数据集中的数据进行聚类. 在此过程中联合一阶近似性和二阶近邻捕获相似性, 深入探究数据点与数据点之间的紧密关系, 然后经过消息传递过程实现聚类. 这是异常检测的初始阶段.
2.1.1 二阶近邻求相似性相似性表示数据点与数据点之间的密切程度, 聚类往往通过相似性度量所有数据点之间的关系, 对于数据的分布则没有太大的要求. 聚类过程中将相似性较高的那些数据点聚集在一起形成一个簇, 而相似性较低的数据点之间则处于一个远离的状态, 据此可以很好地将不同类的数据分别聚集成不同的簇. 计算相似性的方式有很多种, 此处将数据点
$ S({x_i}, {x_j}) = - ||{x_i} - {x_j}|{|^2} $ | (1) |
欧几里得距离原本是正值, 但是两个数据点之间的距离越远, 它们的相似性越小, 因此在距离值前面加上了一个负号, 使得初始相似性为负值. 所有数据点之间的初始相似性存放在相似性矩阵
$ S = \alpha \times S + (1 - \alpha ) \times {S^2} $ | (2) |
通过为一阶近似性矩阵和二阶近邻矩阵分配合适的权值, 重新构造相似性矩阵
把通过二阶近邻获得的相似性矩阵传入到消息传递过程中, 不断更新迭代得到最后的聚类结果. 最初数据集中的每一个数据点都可以被看作候选聚类中心, 即需要向消息传递过程中输入一个表示数据点
责任
$ R({x_i}, {x_j}) = S({x_i}, {x_j}) - \mathop {\max }\limits_{x'_j \; {\rm{s.t.}} \; {x_j} \ne x'_j} \{ A({x_i}, x'_j) + S({x_i}, x'_j)\} $ | (3) |
在第一次迭代中, 因为可用性为0,
在上述责任更新过程中, 所有的候选聚类中心竞争同一个数据点的所有权, 即成为这个数据点的聚类中心. 而可用性的更新则来自那些数据点中是否每一个候选聚类中心都可以成为一个更好的聚类中心的证据:
$ A({x_i}, {x_j}) = \min \{ 0, R({x_j}, {x_j}) + \sum\limits_{x'_i \; {\rm{s.t.}} \; x'_i{} \notin \{ {x_i}, {x_j}\} } {\max \{ 0, R(x'_i, {x_j})\} \} } $ | (4) |
$ A({x_j}, {x_j}) = \sum\limits_{x'_i \; {\rm{s.t.}} x'_i \ne {x_j}} {\max \{ 0, R(x'_i, {x_j})\} } $ | (5) |
这个消息基于其他数据点发送给数据点
$ E({x_j}) = \arg \mathop {\max }\limits_{{x_j}} \{ R({x_i}, {x_j}) + A({x_i}, {x_j})\} $ | (6) |
消息传递的过程中通过不断迭代更新, 在形成簇的同时自动确定了每个簇的中心点, 即聚类中心, 完成了聚类.
2.2 异常检测阶段本节主要是根据第2.1节得到的聚类结果进行异常检测. 文中所提出的算法的相关假设中提到正常的数据点更加靠近所属簇中心, 而异常的数据点在所属簇中会距离簇中心较远. 基于上述假设, 那些紧密围绕在簇中心的数据点通常是正常值, 而异常的数据点则稀疏地围绕在簇的边界处. 由此说明正常的数据点往往与所属簇的簇中心有着密切的关系. 因此, 每个数据点的异常情况都可以很好地通过它本身与所属簇中心的距离近似表示. 假设第2.1节中基于二阶近邻得到的聚类结果为
$ dist({x_{km}}, {c_m}) = ||{x_{km}} - {c_m}|| $ | (7) |
其中,
$ {\rho _i} = \sum\limits_{{x_i} \ne {x_j}} {{{\rm{e}}^{ - {{(dist({x_i}, {x_j})/{d_c})}^2}}}} $ | (8) |
其中,
$ score({x_i}) = \frac{{dist({x_{km}}, {c_m})}}{{{\rho _i}}} $ | (9) |
数据点
文中所提出的基于二阶近邻的异常检测算法的实现步骤的详细描述如算法1所示. 该算法主要分为聚类(步骤1–5)和异常检测(步骤6–8)两个阶段. 聚类阶段, 计算数据点与数据点之间的相似性构造初始相似性矩阵
算法1. 基于二阶近邻的异常检测算法
输入: 数据集, 参数
阶段1. 聚类1. 通过式(1)计算数据点之间的相似性并构造初始相似性矩阵
基于二阶近邻的异常检测算法中取偏好值参数P为−0.2, 参数
算法1的计算复杂度主要体现在两个阶段: 聚类阶段(步骤1–5)和异常检测阶段(从步骤6–8), 第1阶段中, 步骤1和步骤2计算数据点之间的相似性并构造相似性矩阵需要花费
为了验证文中提出的异常检测算法的有效性, 我们基于10个真实的数据集做了一系列的比较实验. 这些数据集包括WPBC、Ovarian、Wholesale、ForestTypes、Haberman、Ionosphere、Leaf、MUSK、SHS、TAE. 除了Ovarian数据集(
实验的过程中将基于二阶近邻的异常检测算法与6种经典的异常检测算法进行比较, 这些算法分别为随机离群值选择异常检测算法SOS (stochastic outlier selection)[20]、主成分分析异常检测算法PCA (principal component analysis)[21]、基于偏差的线性离群值检测方法LMDD (linear method for deviation-based outlier detection) [22]、子空间离群值检测算法SOD (subspace outlier detection)[23]、一级支持向量机异常检测算法OCSVM (one-class support vector machines)[24]、局部相关积分异常检测算法LOCI (local correlation integral) [25]. 在SOS算法[20]中, 一个数据点与另一个数据点之间的关系, 可以通过亲和性来量化. PCA算法[21]作为一种线性降维方法, 将样本在所有特征向量上的投影距离的和作为其异常值分数, 据此确定异常值. LMDD算法[22]把平滑因子的概念用到了异常检测中, 该概念表明通过从数据集中删除一个元素的子集, 可以减少一定的差异. SOD算法[23]是子空间离群值检测方法, 能够根据数据对象与子空间的邻居的偏离程度来检测高维特征空间中不同子空间中的离群值. OCSVM算法[24]是支持向量算法对无标记数据情况的自然扩展, 是一种无监督的异常检测算法. LOCI算法[25]提供了一个自动的、数据指定的截断来确定某个点是否为异常值. 以上6种异常检测算法的源码皆来自于pyod工具包(
每个异常检测算法一般会需要设置不同的参数, 它们的取值会对异常检测的性能产生影响, 因此, 为参数分配适当的值非常重要. 为了保证合理性, 在实验过程中, 各种异常检测算法的参数都会设置为pyod工具包中推荐的值. 基于二阶近邻的异常检测算法中的参数设置在算法描述部分中会有详细的说明. 整个实验是在环境为64位、8 GB内存、Intel(R) Core(TM)i7-8550U CPU@1.80 GHz 2 GHz的Win10上进行的.
为了评估不同异常检测算法的性能, 文中采用了3种常用的度量指标, 分别是平均精度AP (average precision)、
$ P(q) = \frac{{|{G_h} \cap {G_q}|}}{q} $ | (10) |
平均精度AP就是所有
$ R(q) = \frac{{|{G_h} \cap {G_q}|}}{{|{G_h}|}} $ | (11) |
很容易可以看出,
$ {F_1}(q) = \frac{{2P(q)R(q)}}{{P(q) + R(q)}} $ | (12) |
接受者操作特性曲线ROC是一个由真阳性率和假阳性率构成的图形图, AUC度量的是ROC曲线下的面积, 它作为一种衡量性能优劣的评价指标, 用来表示比较检测性能的数值结果. 它的值总是保持在[0, 1]区间内, 而且, 其值越大越好, 平均精度AP和
我们分别在10个真实数据集上将基于二阶近邻的异常检测算法(anomaly detection based second-order proximity, SOPD)和其他的异常检测算法进行了性能测试和评估, 得到不同的实验结果. 在每个异常检测算法中, 每个数据集中的数据点的异常值分数都是自动生成, 根据异常值分数按从大到小的顺序对数据点进行排序, 取前q个数据点作为预测的异常值, q表示为真实异常值的个数. 根据生成的异常值分数、预测的标签和真实的标签, 计算每个异常检测算法在不同数据集下的平均精度AP 、
表2记录了SOPD算法与其他6种异常检测算法的平均精度AP, 其中粗体表示实验结果中每个数据集所对应的最高的AP值. 从表中可以看出, SOPD算法仅仅在SHS数据集上低于SOD算法的平均精度值, 其他数据集上, SOPD算法的平均精度都高于另外6种异常检测算法. 尤其是在Ionosphere数据集上, SOPD算法的平均精度高达0.92. 除此之外, Ovarian数据集上, OCSVM算法的平均精度和PCA算法、SOD算法一样都是0.70, 为6种异常检测算法中最高的, 这是因为OCSVM算法可以捕获到不同数据集的分布情况, 尤其是在维度较高的大样本数据集上, 事先并不知道数据的分布状况, 此种情况下OCSVM算法有较强的检测能力, 而SOPD算法的AP值为0.73, 比OCSVM算法更高, 因此, SOPD算法在未知数据分布的情况下, 对高维度数据集的异常检测性能也较好.
为了再次验证SOPD算法的优异性, 通过使用
实验过程中通过使用AUC准则衡量算法的性能, 根据AUC的评价度量, 再次证明了SOPD算法的优越性. 图4描绘了不同异常检测算法的AUC, 图4一共有10个柱形图, 分别表示SOPD算法和6种异常检测算法在10个数据集上的AUC值的比较结果, 其中每个柱形图中的不同颜色的长条代表不同的异常检测算法, SOPD算法由最后一个长条所表示, 通过图4可以清晰地看出同一个数据集上不同异常检测算法的性能差异. SOPD算法的AUC只在SHS数据集上较低于SOS算法和SOD算法, 即使在TAE数据集上, SOPD算法的AUC也与6种异常检测算法中的最高值一样. 除此之外, 在其他数据集上, SOPD算法的性能明显比另外6种异常检测算法较优越, 特别是在ForestTypes数据集、Ionosphere数据集、Leaf数据集上, SOPD算法的AUC分别为0.91、0.93和0.91, 表现出了良好的性能. 因此, 由图4可以看出, SOPD算法的准确性总体上较好.
4 结束语
本文提出了一种基于二阶近邻的异常检测算法, 利用二阶近邻将数据全局结构考虑进去, 并利用数据点与所属簇中心之间的关系捕获异常情况. 总体来说, 该算法主要包括聚类和异常检测两个阶段. 在聚类过程中利用一阶近似和二阶近邻综合考虑局部性和全局性信息, 对数据的初始相似性矩阵进行重新构造, 提高聚类的性能. 之后, 在聚类结果的基础上, 同时考虑每个簇中的数据点与该簇中心之间的距离和数据点本身的密度, 得到异常值分数, 根据异常值分数判断数据点的异常情况. 我们在10个真实数据集上进行了比较实验, 其结果表明, SOPD算法与经典的异常检测算法相比具有一定的优越性. 下一步的研究方向是减少算法的时间复杂度, 并进一步增强算法对异常值的敏感度.
[1] |
Saxena S, Rajpoot DS. Density-based approach for outlier detection and removal. Proceedings of 2018 International Conference on Signal Processing and Communication. Singapore: Springer, 2019. 281–291.
|
[2] |
Liu HW, Li EH, Liu XW, et al. Anomaly detection with kernel preserving embedding. ACM Transactions on Knowledge Discovery from Data, 2021, 15(5): 91. DOI:10.1145/3447684 |
[3] |
Liu TF, Gao H, Wu JJ. Review of outlier detection algorithms based on grain storage temperature data. Proceedings of 2020 IEEE International Conference on Artificial Intelligence and Computer Applications (ICAICA). Dalian: IEEE, 2020. 1045–1048.
|
[4] |
Wahid A, Rao ACS. An outlier detection algorithm based on KNN-kernel density estimation. Proceedings of 2020 International Joint Conference on Neural Networks (IJCNN). Glasgow: IEEE, 2020. 1–8.
|
[5] |
Siegel AF. Statistics and Data Analysis: An Introduction. New York: John Wiley & Sons, 1988.
|
[6] |
Laurikkala J, Juhola M, Kentala E. Informal identification of outliers in medical data. Proceedings of 5th International Workshop on Intelligent Data Analysis in Medicine and Pharmacology. Berlin: ECCAI, 2000. 20–24.
|
[7] |
Angiulli F, Fassetti F. DOLPHIN: An efficient algorithm for mining distance-based outliers in very large datasets. ACM Transactions on Knowledge Discovery from Data, 2009, 3(1): 4. DOI:10.1145/1497577.1497581 |
[8] |
Zhang K, Hutter M, Jin HD. A new local distance-based outlier detection approach for scattered real-world data. Proceedings of the 13th Pacific-Asia Conference on Knowledge Discovery and Data Mining. Bangkok: Springer, 2009. 813–822.
|
[9] |
Angiulli F, Basta S, Lodi S, et al. Reducing distance computations for distance-based outliers. Expert Systems with Applications, 2020, 147: 113215. DOI:10.1016/j.eswa.2020.113215 |
[10] |
Breunig MM, Kriegel HP, Ng RT, et al. LOF: Identifying density-based local outliers. ACM SIGMOD Record, 2000, 29(2): 93-104. DOI:10.1145/335191.335388 |
[11] |
Jin W, Tung AKH, Han JW, et al. Ranking outliers using symmetric neighborhood relationship. Proceedings of the 10th Pacific-Asia Conference on Knowledge Discovery and Data Mining. Singapore: Springer, 2006. 577–593.
|
[12] |
Riahi-Madvar M, Azirani AA, Nasersharif B, et al. A new density-based subspace selection method using mutual information for high dimensional outlier detection. Knowledge-based Systems, 2021, 216: 106733. DOI:10.1016/j.knosys.2020.106733 |
[13] |
Pu G, Wang LJ, Shen J, et al. A hybrid unsupervised clustering-based anomaly detection method. Tsinghua Science and Technology, 2021, 26(2): 146-153. DOI:10.26599/TST.2019.9010051 |
[14] |
Ester M, Kriegel HP, Sander J, et al. A density-based algorithm for discovering clusters in large spatial databases with noise. Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining. Portland: AAAI Press, 1996. 226–231.
|
[15] |
Huang JL, Zhu QS, Yang LJ, et al. A novel outlier cluster detection algorithm without top-n parameter. Knowledge-Based Systems, 2017, 121: 32-40. DOI:10.1016/j.knosys.2017.01.013 |
[16] |
Nozad N, Ahmad S, Haeri A, et al. SDCOR: Scalable density-based clustering for local outlier detection in massive-scale datasets. Knowledge-based Systems, 2021, 228: 107256. DOI:10.1016/j.knosys.2021.107256 |
[17] |
Gao JH, Ji WX, Zhang LL, et al. Cube-based incremental outlier detection for streaming computing. Information Sciences, 2020, 517: 361-376. DOI:10.1016/j.ins.2019.12.060 |
[18] |
Bansal M, Sharma D. A novel multi-view clustering approach via proximity-based factorization targeting structural maintenance and sparsity challenges for text and image categorization. Information Processing & Management, 2021, 58(4): 102546. DOI:10.1016/j.ipm.2021.102546 |
[19] |
Frey BJ, Dueck D. Clustering by passing messages between data points. Science, 2007, 315(5814): 972-976. DOI:10.1126/science.1136800 |
[20] |
Janssens JHM, Huszár F, Postma EO, et al. Stochastic outlier selection. Technical Report. Tilburg: Tilburg University, 2012.
|
[21] |
Shyu ML, Chen SC, Sarinnapakorn K, et al. A novel anomaly detection scheme based on principal component classifier. Proceedings of IEEE Foundations and New Directions of Data Mining Workshop, in Conjunction with the 3rd IEEE International Conference on Data Mining (ICDM). IEEE, 2003. 172–179.
|
[22] |
Arning A, Agrawal R, Raghavan P. A linear method for deviation detection in large databases. Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining. Portland: AAAI Press, 1996. 164–169.
|
[23] |
Kriegel HP, Kröger P, Schubert E, et al. Outlier detection in axis-parallel subspaces of high dimensional data. Proceedings of the 13th Pacific-Asia Conference on Knowledge Discovery and Data Mining. Bangkok: Springer, 2009. 831–838.
|
[24] |
Schölkopf B, Platt JC, Shawe-Taylor J, et al. Estimating the support of a high-dimensional distribution. Neural Computation, 2001, 13(7): 1443-1471. DOI:10.1162/089976601750264965 |
[25] |
Papadimitriou S, Kitagawa H, Gibbons PB, et al. LOCI: Fast outlier detection using the local correlation integral. Proceedings of the 19th International Conference on Data Engineering. Bangalore: IEEE, 2003. 315–326.
|
[26] |
Zhao Y, Nasrullah Z, Li Z. PyOD: A Python toolbox for scalable outlier detection. Journal of Machine Learning Research (JMLR), 2019, 20(96): 1-7. |