很高兴能参与到Datawhale组织的第25期开源学习任务中,在本期任务中,我加入了数据挖掘(异常检测)方向的学习。
大千世界,无奇不有。仅仅拿数据来说,随着信息技术的发展,我们可以接触到海量数据,但这些数据都是按照我们的“设想”的来的吗?换句话说:这些数据都是“正常的”吗?答案当然是否定的,总有些数据因为各种原因来“捣乱”整个数据集。
上文我们提到了“捣乱的数据”,现在用更加标准且学术的语言在重新定义一下,我们称上文的“捣乱的数据”为异常数据(异常样本)。现在在说一下本期课程中异常检测的概念:
定义:
异常检测(anomaly detection)指的是在数据中发现不符合预期行为模式的数据。在不同的应用领域中这些不符合的模式通常称为异常(anomalies)、离群点(outliers)、例外(exception)等等1。
目的:
异常检测的目的在于让机器知道我不知道的事情。
学过“数据挖掘”课程的同学,可能记得,我们在该课程中学过“离群点检测”这一章节,其实离群点检测也就是本文所述的异常检测啦
与其他机器学习任务类似,按照训练集中有无标签异常检测任务可分为下面三类:有监督异常检测、无监督异常检测,其中无监督学习有可分为两类2-3。总结起来就是两大类,三小类。
labeled:训练集中每个样本都有标签,用这些样本来训练一个分类器(classifier),这个分类器出了能识别训练集中已有的样本标签外,还能识别未知(unknown)的标签,用来表示该输入是“没见过的”,不在训练集中的。我们也可以把它叫做“Open-set Recognition”,即开放式识别。
unlabeled:这种情况下,我们的训练集是没有标签的。
在研究各种异常检测算法之前,我们先对异常检测任务给出形式化、数学化的定义(见3.1小节)
常见的异常检测算法可分为下面几种5
1.基于统计学的方法
简单来说,基于统计的模型就是学习拟合一个生成模型,然后识别该区域中低密度的样本点,把这些点作为异常点。因此,统计学方法的有效性高度依赖于对给定数据所做的统计模型假定是否成立。统计学的方法分类两大类:参数化方法和非参数化方法。这两种方法的主要区别在于,前者对给定数据中的潜在分布模型有一个假设,它根据已知数据估计分布模型的参数。后一种方法没有任何假设
类如对于参数化方法,假定输入数据集为{
x
1
,
x
2
,
.
.
.
,
x
N
x^1,x^2,...,x^N
x1,x2,...,xN},数据集中的样本服从正态分布,即
x
(
i
)
x^{(i)}
x(i)~
N
(
N(
N(
μ
,
σ
2
\mu,\sigma^2
μ,σ2)我们可以根据样本求出参数 。
优点:①它们在数学上是可以接受的,一旦模型建立,就有一个快速的评估过程。②模型通常适合定量实值数据集或一些定量有序数据分布。序数数据可以更改为适当的值进行处理,从而缩短复杂数据的处理时间。
缺点:①由于它们的依赖性和参数模型中分布模型的假设,由于缺乏关于潜在分布的先验知识,产生的结果的质量在实际情况和应用中大多是不可靠的。②于大多数模型适用于单变量特征空间,因此它们在多维场景中不适用。在处理多变量数据时,它们会产生很高的计算成本。
2.基于邻近度的方法
(1)基于距离度量的方法
基于距离的检测算法的基本原理集中于观测值之间的距离计算。一个点被视为离其附近的邻居较远的离群值。
常见的算法如:KNN
优点:它们简单易懂,因为它们大多不依赖于假设的分布来拟合数据。它们在多维空间中的伸缩性更好,因为它们有强大的理论基础,并且与统计方法相比,它们在计算上更高效。
缺点:性能由于维数灾难而下降。数据中的对象通常具有离散的属性,这使得定义这些对象之间的距离具有挑战性。不适合大型数据集。
(2)基于密度的方法
这些方法的核心原理是可以在低密度区域中找到离群值,而正常值则位于密集区域中。
常见的算法:Local Outlier Factor (LOF)局部因子。
优点:在基于密度的方法中,使用的密度估计是非参数的;他们不依靠假设的分布来拟合数据。
缺点:复杂,计算成本也更高。它们对参数设置很敏感,例如确定邻居的大小。
(3)基于聚类的方法
使用聚类方法来描述数据的行为。背后的思想是包含比其他聚类少得多的数据点的较小规模的聚类被标记为异常值。
基于聚类的方法是无监督的,因为它们不需要任何先验知识。
代表性算法有:DBSCAN
优点:无监督学习。由于不需要先验知识,这使得它更适合增量模式,从聚类中学习后,可以插入额外的新点,然后测试异常值。
缺点:它们对输入参数的设置非常敏感。数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。
3.基于线性模型的方法
可以利用线性模型构建分类器,将异常点和正常样本点区分开来。
4.基于集成学习的方法
集成学习6(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时候也成为多分类器系统、基于委员会的学习。
基本思想是是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。
常见的方法有Feature bagging,孤立森林。
优点:更稳定,并给出更好的预测模型。它们适用于高维数据中的异常值分析。
上文我们讲到了,异常检测的任务是发现不符合预期行为的数据,因此有数据的地方就可能存在异常模式,所以异常检测任务在实际生活中应用十分广泛。下文举几个常见的应用。
Training data:正常的刷卡行为,输入 x x x:盗刷?
信用卡欺诈越来越普遍,因为信用卡号码等敏感信息更容易被泄露。在许多情况下,未经授权使用信用卡可能表现出不同的模式,例如从特定地点疯狂购买或进行非常大的交易。这种模式可用于检测信用卡交易数据中的异常值。
Training data:正常连续,输入 x x x:网络攻击行为?
在许多计算机系统中,都会收集有关操作系统调用、网络流量或其他用户操作的不同类型的数据。由于恶意活动,此数据可能显示异常行为。对此类活动的识别称为入侵检测。
Training data:正常细胞,输入 x x x:癌细胞
癌症的治疗越来约收到人们的重视,但是依靠传统手段不能及时的发现癌细胞,近年来随着信息技术的发展,通过使用信息技术的方法来辅助检测癌细胞已经掀起了一股热潮。通常来说,癌细胞与正常的细胞有很大的差异,首先在形态上,癌细胞会失去正常的形态。此外癌细胞的生长速度非常快。这些都是癌细胞与正常细胞的差异。那么我们在想,把癌细胞看做“异常细胞”,能不能使用机器学习或者深度学习的方法,训练出一个模型,该模型能够精确的识别检测出“癌细胞”呢,从而为后续治疗提供了宝贵的时间 .
在处理日志时,需要一些自动化的数据挖掘技术来搜索大量日志中的异常模式。这些日志为异常检测监视提供了很好的信息来源。
异常检测在目前主要面临着未知性、异常类的异构型和类别数据集难以收集4等挑战,下面对这三个方面的挑战做简要的叙述。
挑战1:未知性:异常与许多未知因素有关,例如,具有未知的突发行为、数据结构和分布的实例。它们直到真正发生时才为人所知,比如恐怖袭击、诈骗和网络入侵等应用;
挑战2:异常类的异构性: 异常是不规则的,一类异常可能表现出与另一类异常完全不同的异常特征。例如,在视频监控中,抢劫、交通事故和盗窃等异常事件在视觉上有很大差异;
挑战3:数据量小:异常通常是罕见的数据实例,而正常实例通常占数据的绝大部分。因此,收集大量标了标签的异常实例是困难的,甚至是不可能的。这导致在大多数应用程序中无法获得大规模的标记数据。
[1]《异常检测》.机器之心.2021年.https://www.jiqizhixin.com/graph/technologies/3eaea908-6266-4c97-bb63-79b0fcade338
[2]李宏毅.机器学习.2019年http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2019/Lecture/Detection%20(v9).pdf
[3]Datawhale.异常检测.2021年.https://github.com/datawhalechina/team-learning-data-mining/tree/master/AnomalyDetection
[4]王晋东不在家.全面了解“异常检测”领域.2020年09月.https://zhuanlan.zhihu.com/p/260651151
[5]H. Wang, M. J. Bah and M. Hammad, “Progress in Outlier Detection Techniques: A Survey,” in IEEE Access, vol. 7, pp. 107964-108000, 2019, doi: 10.1109/ACCESS.2019.2932769.
[6]周志华.机器学习[M].北京:清华大学出版社.2016年