异常检测----子空间离群检测
一、概述
高维数据会出现数据稀疏性或距离集中的现象。
在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。例如基于邻近度的方法是在所有维度使用距离函数来定义局部性,但是,在高维空间中,所有点对的距离几乎都是相等的(距离集中),这使得一些基于距离的方法失效。
由于异常值被定义为稀疏区域中的数据点,这导致了一种鉴别力较差的情况,即所有数据点都位于全维中几乎相同的稀疏区域中。
在高维场景下,异常值通常嵌入在局部相关的子空间中,一个常用的方法是子空间方法(子空间离群检测subspace outlier detection,又名projected outlier detection)。
子空间离群值检测的假设是,异常值通常隐藏在低维子空间的不寻常的局部行为中,而这种不正常的行为被全维分析所掩盖。
相关子空间的识别是一个非常具有挑战性的问题。这是因为高维数据可能的投影数量与数据的维数呈指数相关。一种有效的离群值检测方法需要以一种集成的方式搜索数据点和维度,以揭示最相关的异常值。这是因为不同的维度子集可能与不同的异常值相关,这进一步增加了计算的复杂度。
通常,为每个数据点选择一个相关的子空间可能会导致不可预测的结果,因此组合来自多个子空间的结果很重要。换句话说,子空间离群值检测本质上是一个以集成为中心的问题。
集成是子空间思想中常用的方法之一,可以有效提高数据挖掘算法精度。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。
子空间离群值检测模型如下:
二、Axis-Parallel Subspaces
基于Axis-Parallel Subspaces所定义的模型从原始数据的特征子集中定义了一个离群集。显然,比较来自不同子空间的分数需要仔细的量化,特别是如果它们是不同的维度和使用不同的参考尺度。更多的是,模型需要量化不同子空间在暴露异常值方面的有效性。axis-parallel所使用的方法有两个主要的区分:
- 逐一个地检查点,并确定它们相关的外围子空间。这本质上是一种基于实例的方法
- 通过预先建立一个子空间模型来识别异常值。每个点都会根据模型进行评分。在某些情况下,每个模型可能对应于单个子空间。分数通常是通过使用不同模型的结果的综合分数来评分的。即使在模型中使用单个(全局)子空间来评分所有分数的情况下,组合分数也经常会增强分数的局部子空间特性,因为集成方法能够减少表示偏差。代表方法有:feature bagging, rotated bagging, subspace histograms, and isolation forests
代表方法分为:
2.1 Genetic Algorithms
2.2 HOS-Miner approach
2.3 Feature Bagging
Feature Bagging,基本思想与bagging相似,只是对象是feature。feature bagging属于集成方法的一种。集成方法的设计有以下两个主要步骤:
- 选择基检测器。这些基本检测器可以彼此完全不同,或不同的参数设置,或使用不同采样的子数据集。Feature bagging常用lof算法为基算法。下图是feature bagging的通用算法:
- 分数标准化和组合方法:不同检测器可能会在不同的尺度上产生分数。例如,平均k近邻检测器会输出原始距离分数,而LOF算法会输出归一化值。另外,尽管一般情况是输出较大的异常值分数,但有些检测器会输出较小的异常值分数。因此,需要将来自各种检测器的分数转换成可以有意义的组合的归一化值。分数标准化之后,还要选择一个组合函数将不同基本检测器的得分进行组合,最常见的选择包括平均和最大化组合函数。
下图是两个feature bagging两个不同的组合分数方法:
(广度优先)
(累积求和)
基探测器的设计及其组合方法都取决于特定集成方法的特定目标。很多时候,我们无法得知数据的原始分布,只能通过部分数据去学习。除此以外,算法本身也可能存在一定问题使得其无法学习到数据完整的信息。这些问题造成的误差通常分为偏差和方差两种。
方差:是指算法输出结果与算法输出期望之间的误差,描述模型的离散程度,数据波动性。
偏差:是指预测值与真实值之间的差距。即使在离群点检测问题中没有可用的基本真值
众所周知bagging这种有放回抽样的方法,容易导致一部分样本或者特征始终无法被抽取到,当样本或者特征的数量超过一百的时候,这种效应会比较明显,大概有30%多的样本或者特征始终无法抽取到,那么如果我们所有特征的信息都是非常丰富的,显然这种采样方式会损失部分特征的信息,对于有监督问题也存在这样的缺陷,信息丢失的问题,因此使用bagging实际上需要处理偏差和方差之间的一种微妙的均衡。
不均衡学习中采用集成采样之后虽然改变了原始数据的分布,但是相对来说模型的输出稳定性要比普通的简单欠采样或过采样更好。通过bagging或随机森林可以很好的解释不均衡学习中存在着的各种看似不合理的处理方法的合理性。
bagging的缺陷:[4]
除了假设所有特征都包含丰富的信息,在高维或者大量数据的情况下bagging不可避免的会损失一部分样本或者特征始终无法被采样也无法被模型训练到。bagging的比例始终建议在0.5到0.99之间,特别是存在过多的相关性特征的情况下,bagging很容易不停的采样相关性很高的特征,比如100个特征中有80个相关性非常高的特征,则不管怎么采样这一组高相关特征总会进入到基模型的训练过程中,所以当我们引入bagging的时候,无论是异常检测集成还是随机森林或者是xgb、lgb、cab的列采样之前,都必须进行严格的相关性分析,人们常常忽视这一点因为很多时候大量相关性特征存在的情况并不多,但是一旦出现就会导致很差的bagging泛化性能的表现。
针对与相关性对bagging的影响问题,后来衍生出了rotated bagging,对数据进行采样之后使用主成分分析等方式进行rotate然后训练子模型。。。。,显然每一轮基学习器的训练时间都要加上降维算法的运行时间,关于rotated bagging,其实就是每次采样之后得到的特征子集进行主成分分析然后再引入基学习器或者基检测器。。。wtf。。牛逼。显然,计算代价比单纯的bagging要高.。
三、Isolation Forests
孤立森林(Isolation Forest)算法是周志华教授等人于2008年提出的异常检测算法,是机器学习中少见的专门针对异常检测设计的算法之一,方法因为该算法时间效率高,能有效处理高维数据和海量数据,无须标注样本,在工业界应用广泛。
该算法基于异常数据的两个特征:(1)异常数据只占少量;(2)异常数据特征值和正常数据差别很大。
孤立森林属于非参数和无监督的算法,既不需要定义数学模型也不需要训练数据有标签。孤立森林查找孤立点的策略非常高效。假设我们用一个随机超平面来切割数据空间,切一次可以生成两个子空间。然后我们继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了。孤立森林认为这些很快被孤立的点就是异常点。
iForest算法由于简单高效的特点,常用于网络安全中的攻击检测和流量异常等分析【A survey of network anomaly detection techniques】。
用四个样本做简单直观的理解,d是最早被孤立出来的,所以d最有可能是异常。
怎么来切这个数据空间是孤立森林的核心思想。因为切割是随机的,为了结果的可靠性,要用集成(ensemble)的方法来得到一个收敛值,即反复从头开始切,平均每次切的结果。孤立森林由t棵孤立的数组成,每棵树都是一个随机二叉树,也就是说对于树中的每个节点,要么有两个孩子节点,要么一个孩子节点都没有。树的构造方法和随机森林(random forests)中树的构造方法有些类似。流程如下:
-
从训练数据中随机选择一个样本子集,放入树的根节点;
-
随机指定一个属性,随机产生一个切割点V,即属性A的最大值和最小值之间的某个数;
-
根据属性A对每个样本分类,把A小于V的样本放在当前节点的左孩子中,大于等于V的样本放在右孩子中,这样就形成了2个子空间;
-
在孩子节点中递归步骤2和3,不断地构造左孩子和右孩子,直到孩子节点中只有一个数据,或树的高度达到了限定高度。
获得t棵树之后,孤立森林的训练就结束,就可以用生成的孤立森林来评估测试数据。
孤立森林检测异常的假设是:异常点一般都是非常稀有的,在树中会很快被划分到叶子节点,因此可以用叶子节点到根节点的路径长度来判断一条记录是否是异常的。和随机森林类似,孤立森林也是采用构造好的所有树的平均结果形成最终结果的。在训练时,每棵树的训练样本是随机抽样的。从孤立森林的树的构造过程看,它不需要知道样本的标签,而是通过阈值来判断样本是否异常。因为异常点的路径比较短,正常点的路径比较长,孤立森林根据路径长度来估计每个样本点的异常程度。
路径长度计算方法:
孤立森林也是一种基于子空间的方法,不同的分支对应于数据的不同局部子空间区域,较小的路径对应于孤立子空间的低维
参考文献
- AnomalyDetection/五、集成方法.md · Datawhale/team-learning-data-mining - 码云 - 开源中国 (gitee.com)
- https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf
- 《Outlier Analysis》——Charu C. Aggarwal
- https://zhuanlan.zhihu.com/p/103619964