(https://www.cnblogs.com/wj-1314/p/10461816.html)
iForest适用于连续数据(Continuous numerical data)的异常检测,将异常定义为“容易被孤立的离群点(more likely to be separated)”——可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因此可以认为落在这些区域里的数据是异常的。
提到森林,自然少不了树,毕竟森林都是树构建的,看Isolation Forest(简称iForest)前,我们先来看看Isolation Tree(简称iTree)是怎么构成的。iTree是一种随机二叉树,每个节点要么有两个女儿,要么就是叶子节点,一个孩子都没有。给定一堆数据集D,这里D的所有属性都是连续型的变量,iTree的构成过程如下:
1,随机选择一个属性Attr
2,随机选择该属性的一个值Value
3,根据Attr 对每条记录进行分类,把Attr小于Value的记录放在左女儿,把大于等于Value的记录放在右孩子。
4,然后递归的构造左女儿和右女儿,直到满足以下条件:
1,传入的数据集只有一条记录或者多条一样的记录
2,树的高度达到了限定高度
iTree构建好之后,就可以对数据进行预测了。预测的过程就是把测试记录在ITree上走一下,看看测试记录在哪个叶子节点。iTree能有效检测异常的假设是:异常点一般都是非常稀有的,在iTree中会很快被划分到叶子节点。
(注意:异常点一般来说是稀疏的,因此可以用较小次划分把他们归结到单独的区域中,或者说只包含它的空间的面积较大)
总结:
IForest目前是异常点检测最常用的算法之一,它的优点非常突出,他具有线性时间复杂度。因为是随机森林的方法,所以可以用在含有海量数据的数据集上,通常树的数量越多,算法越稳定。由于每棵树都是互相独立生成的,因此可以部署在大规模分布式系统上来加速运算。对于目前大数据分析的趋势来说,它的好用是由原因的。
但是IForest也有一些缺点,比如不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度和该维度的随机一个特征,建完树后仍然有大量的维度没有被使用,导致算法可靠性降低。此推荐降维后使用,或者考虑使用One Class SVM 。
另外IForest仅对即全局稀疏点敏感,不擅长处理局部的相对稀疏点,这样在某些局部的异常点较多的时候检测可能不是很准。
而One Class SVM对于中小型数据分析,尤其是训练样本不是特别海量的时候用起来经常会比IForest顺手,因此比较适合做原型分析。