【数据处理方法】孤立森林(Isolation Forest, iForest)

孤立森林(iForest)是一种专门用于进行异常值检测的算法,它是一种基于ensemble的方法,相对于基于密度或者距离的方法,如LOF、KNN等,iForest不需要计算距离和密度,因此,iForest具有线性的时间复杂度(O(n)),非常适合用于大数据中进行异常检测。此外,iForest是被设计出来专门用于进行异常检测的,而很多基于密度或距离的方法,进行异常检测只是它们附带的作用,因此就准确率来说,iForest也具有一定的优势。

一. iForest简介

        iForest最早由周志华团队提出,原文如下

Liu F T, Ting K M, Zhou Z H. Isolation forest[C]//2008 eighth ieee international conference on data mining. IEEE, 2008: 413-422.

在iForest中,异常点指的是“和其他点的模式相差很大的点”,而isolation,则是指“将这样的异常值从正常值中孤立出去”。

相对于其他方法,iForest有以下几个特点:

1.基于ensemble:iForest由iTree,即孤立树组成,运行时通过训练大量iTree,来组成iForest。

2.子采样(sub-sampling): iForest中每棵iTree都是随机选择部分的样本,来建立Partial models,这样在节约时间成本的同时,还可以提高算法的准确率;同时,还通过训练大量iTree来保证算法性能收敛。

3.可分布式进行:由于是基于ensemble的方法,所以可部署在分布式系统上来加速运算。

因此,iForest具有以下优点:

1.可处理大数据:由于时间复杂度低,iForest可用于大数据量的异常检测,且无需太高的空间复杂度。

2.对高维数据适用:由于子采样和Partial models的使用,iForest可用于处理高维的数据,这是其他方法较难以运用的。

二. iForest思想

 iForest的核心思想就是,由于异常值的特征易于正常值,因此总是最容易被孤立出去。假如我们用一个随机超平面对数据空间进行切割,从而获得两个子空间(类似于切蛋糕),

这样不断切割,直到每个子空间中都只有一个数据。这时,从直觉上,我们也可以判断,正常值(密度较高的簇)需要较高的切割次数才能分离开来,而异常值(密度较低的簇)则只需进行较少的次数就可以被分开。

如图,左边(x_{i})为正常值,右边(x_{0})为异常值,可以看到,x_{i}使用了较多的次数才划分开来,而x_{0}则只使用了较少次数。

三. iForest过程

结合上述内容,iForest的主要过程,分为以下两个阶段:

1.训练iForest:从数据集中随机进行子采样,训练大量iTree组成iForest,统计各数据的平均路径长度。

2.计算异常分数:根据各数据的平均路径长度,计算异常分数,从而判断是否为异常值。

1.训练iForest:

该阶段的步骤如下:

        (1) 从数据中随机选择\varphi个点作为子采样,放入树的根节点。

        (2) 随机选择一个特征维度q,在当前节点的数据中随机产生一个切割点p(p的值域为当前节点数据中q的最小值和最大值之间)。

        (3) 以该切割点生成超平面,将当前节点数据空间划分成两个子空间:将在q上小于p的数据放于当前节点的左子节点,将大于等于p的数据放在当前节点的右子节点。

        (4) 在子节点中递归调用步骤(2)和(3),不断构造新的子节点,直到子节点中只有一个数据或已达到限定高度。

        (5) 循环(1)到(4),直到生成 t 棵 iTree。

伪代码如下:

这一步代表的是孤立森林的建立,X作为输入数据,t代表iTree的数目,\varphi代表iTree子采样的数据数目。对于一棵iTree,限制每棵树的树高l =ceiling(log_{2}\varphi),这里限制树高是因为算法目的是为了检测异常值,因此我们只关心那些路径长度较短的点。

 这一步代表每棵iTree的训练过程

这一步代表路径长度的计算,这里的c是一个调整项,我们放在下一部分来给出公式。

值得注意的是,控制子采样的规模,可以有效的避免Swamp和Mask两个现象。

Swamp:指错误地将正常值识别为异常值。

Mask:指错误地将异常值识别为正常值。

如图,假如这是一堆原始数据,红色的为异常值,可以看到,有两簇异常值过于密集,所以当直接将全部数据用于训练时,较难将其识别出。

而当我们使用子采样时,可以看到,在较少的采样规模下,就可以有效的识别异常值,同时,大量iTree的Ensemble也可以确保算法性能稳定,因此,在适当的情况下,每棵iTree使用较小的规模进行子采样建立Partial models会提高算法的性能。

2. 计算异常分数

首先我们,对于每个数据x,我们计算其在森林中的平均路径长度E(h(x))),然后,计算其异常分数

S(x,\varphi )=2^{-\frac{Eh(x))}{c(\varphi ))}}

其中,

c(\varphi )=2H(\varphi -1)-2(\varphi -1)/\varphi ,\varphi >2

              1,\varphi =2

              0,otherwise

这里的c既是第一步所提到的调整项。H(i)为调和数,等于ln(i)+0.5772156649。由上可得,当S越大时,数据异常程度越大,一般地:

如果异常得分接近 1,那么一定是异常点

如果异常得分远小于 0.5,那么一定不是异常点

如果异常得分所有点的得分都在 0.5 左右,那么样本中很可能不存在异常点

通常,当s\geq 0.6时,就可认为其是潜在的异常点,也可根据实际情况调整。

同样的,也可以直接用平均路径长度判断异常程度,平均路径长度越短,异常程度越大。从本质上说,其和使用异常分数判断是相同的。

四.实例

这里可以参考这篇文章:

异常检测算法 -- 孤立森林(Isolation Forest)剖析

五.总结

iForest是一种基于Ensemble的方法,通过不断划分数据空间来使异常值尽可能快地“孤立”出来。iForest的重点包括子采样建立Partial models,以及训练iTree的数目,通常树的数目越多,算法越稳定。由于每棵树都是互相独立生成的,因此可以部署在大规模分布式系统上来加速运算。

iForest具有以下优点:

1.可处理大数据:由于时间复杂度低,iForest可用于大数据量的异常检测,且无需太高的空间复杂度。

2.对高维数据适用:由于子采样和Partial models的使用,iForest可用于处理高维的数据,这是其他方法较难以运用的。

同时,iForest也有以下缺点:

1. 对于特别高维的数据,由于树的高度有限制,因此即使建完树后,仍有可能有大量维度信息没被使用。这时,需要使用子空间异常检测(Subspace Anomaly Detection)技术。

2. iForest仅对Global Anomaly,即全局稀疏点敏感,不擅长处理局部的相对稀疏点(Local Anomaly),目前,已有相对应的解决方案提出,详情可见文献:

Aryal S, Ting K M, Wells J R, et al. Improving iforest with relative mass[C]//Pacific-Asia Conference on Knowledge Discovery and Data Mining. Springer, Cham, 2014: 510-521.

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值