孤立森林(Isolation Forest)

背景

现有的异常检测方法主要是通过对正常样本的描述,给出一个正常样本在特征空间中的区域,对于不在这个区域中的样本,视为异常。这些方法的主要缺点是,异常检测器只会对正常样本的描述做优化,而不会对异常样本的描述做优化,这样就有可能造成大量的误报,或者只检测到少量的异常。

异常的两个特点:异常数据只占很少量、异常数据特征值和正常数据差别很大。

孤立森林,不再是描述正常的样本点,而是要孤立异常点,由周志华教授等人于2008年在第八届IEEE数据挖掘国际会议上提出。

先了解一下该算法的动机。目前学术界对异常(anomaly detection)的定义有很多种,在孤立森林(iForest)中,异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可以将其理解为分布稀疏且离密度高的群体较远的点。 在特征空间里,分布稀疏的区域表示事件发生在该区域的概率很低,因而可以认为落在这些区域里的数据是异常的。孤立森林是一种适用于连续数据(Continuous numerical data)无监督异常检测方法,即不需要有标记的样本来训练,但特征需要是连续的。对于如何查找哪些点容易被孤立(isolated),iForest使用了一套非常高效的策略。在孤立森林中,递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。

直观上来讲,那些密度很高的簇是需要被切很多次才能被孤立,但是那些密度很低的点很容易就可以被孤立。这里参考下面的图进行说明。

这里写图片描述

这里写图片描述

在图(a)和图(b)中,可以看到,正常点 xi 需要更多次的分割才能被孤立,而异常点 xo 需要较少的分割次数就能被孤立。这里的分割方式采用的是,随机选择一个特征以及拆分的值(这个值位于该特征的最小值和最大值之间)。图(c)展示了异常点的平均路径长度小于正常点的路径长度。

isolation tree (iTree)

定义:假设 T 是孤立树的一个节点,它要么是没有子节点的叶子节点,要么是只有两个子节点 (Tl,Tr) 的内部节点。每一步分割,都包含特征 q 和分割值 p ,将 q<p 的数据分到 Tl ,将 qp 的数据分到 Tr

给定 n 个样本数据 X={x1,,xn} ,特征的维度为 d 。为了构建一棵孤立树,需要随机选择一个特征 q 及其分割值 p ,递归地分割数据集 X ,直到满足以下任意一个条件:(1)树达到了限制的高度;(2)节点上只有一个样本;(3)节点上的样本所有特征都相同。

异常检测的任务是给出一个反应异常程度的排序,常用的排序方法是根据样本点的路径长度或异常得分来排序,异常点就是排在最前面的那些点。

Path Length

定义: 样本点 x 的路径长度 h(x) 为从iTree的根节点到叶子节点所经过的边的数量。

Anomaly Score

给定一个包含 n 个样本的数据集,树的平均路径长度为

c(n)=2H(n1)2(n1)n

其中 H(i) 为调和数,该值可以被估计为 ln(i)+0.5772156649 c(n) 为给定样本数 n 时,路径长度的平均值,用来标准化样本 x 的路径长度 h(x)

样本 x 的异常得分定义为

s(x,n)=2E(h(x))c(n)

其中, E(h(x)) 为样本 x 在一批孤立树中的路径长度的期望。下图给出了 s E(h(x)) 的关系。

这里写图片描述

由上图可以得到一些结论:

  • E(h(x))c(n) 时, s0.5 ,即样本 x 的路径平均长度与树的平均路径长度相近时,则不能区分是不是异常。

  • E(h(x))0 时, s1 ,即 x 的异常分数接近1时,被判定为异常。

  • E(h(x))n1 时, s0 ,被判定为正常。

这里写图片描述

孤立树的特点

孤立森林作为孤立树的总体,将具有较短路径长度的点识别为异常点,不同的树扮演不同异常识别的专家。

已经存在的那些异常检测的方法大部分都期望有更多的数据,但是在孤立森林中,小数据集往往能取得更好的效果。样本数较多会降低孤立森林孤立异常点的能力,因为正常样本会干扰隔离的过程,降低隔离异常的能力。子采样就是在这种情况下被提出的。

swamping和masking是异常检测中比较关键的问题。swamping指的是错误地将正常样本预测为异常。当正常样本很靠近异常样本时,隔离异常时需要的拆分次数会增加,使得从正常样本中区分出异常样本更加困难。masking指的是存在大量异常点隐藏了他们的本来面目。当异常簇比较大,并且比较密集时,同样需要更多的拆分才能将他们隔离出来。上面的这两种情况使得孤立异常点变得更加困难。

造成上面两种情况的原因都与数据量太大有关。孤立树的独有特点使得孤立森林能够通过子采样建立局部模型,减小swamping和masking对模型效果的影响。其中的原因是:子采样可以控制每棵孤立树的数据量;每棵孤立树专门用来识别特定的子样本。

下面两张图说明了上述的现象。

这里写图片描述

这里写图片描述

iForest用于异常检测

基于iForest的异常检测包括两个步骤:训练阶段,基于训练集的子样本来建立孤立树;测试阶段,用孤立树为每一个测试样本计算异常分数。

训练阶段

在训练阶段,iTree的建立是通过对训练集的递归分隔来建立的,直到所有的样本被孤立,或者树达到了指定的高度。树的高度限制 l 与子样本数量 ψ 的关系为 l=ceiling(log2(ψ)) ,它近似等于树的平均高度。树只生长到平均高度,而不继续生长的原因是,我们只关心路径长度较小的那些点,它们更有可能是异常点,而并不关系路径很长的正常点。详细的训练过程如算法1和算法2所示。

这里写图片描述

这里写图片描述

子样本大小 ψ 和树的数量 t 的经验值: ψ=256 t=100

评估阶段

在评估阶段,每一个测试样本的异常分数由期望路径长度 E(h(x)) 得到, E(h(x)) 是将样本通过孤立森林中的每一棵树得到的。具体过程见算法3。

这里写图片描述

Example

这里写图片描述

这里写图片描述

这里写图片描述

参考

[1] Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. “Isolation forest.” Data Mining, 2008. ICDM’08. Eighth IEEE International Conference on. IEEE, 2008.

[2] Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. “Isolation-based anomaly detection.” ACM Transactions on Knowledge Discovery from Data (TKDD) 6.1 (2012): 3.

[3] Preiss, Bruno R. Data structures and algorithms with object-oriented design patterns in Java. John Wiley, 2000.

[4] https://www.jianshu.com/p/5af3c66e0410?utm_campaign=maleskine

[5] http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

猜你喜欢

转载自blog.csdn.net/extremebingo/article/details/80108247