孤立森林-iForest(Isolation Forest)-异常点检测

目的:对于无label数据,寻找异常数据

孤立森林算法思想:

1)用一个随机超平面来切割(split)数据空间(data space), 切一次可以生成两个子空间(想象拿刀切蛋糕一分为二)
2)再继续用一个随机超平面来切割每个子空间,循环下去,直到每子空间里面只有一个数据点为止,直观上来讲,我们可以发现那些密度很高的簇是可以被切很多次才会停止切割,但是那些密度很低的点很容易很早的就停到一个子空间了
 
算法实现步骤:
iForest 由t个iTree(Isolation Tree)孤立树 组成,每个iTree是一个二叉树结构
1)从训练数据中随机选择Ψ个点样本点作为subsample,放入树的根节点
2)随机指定一个维度(attribute),在当前节点数据中随机产生一个切割点p——切割点产生于当前节点数据中指定维度的最大值和最小值之间
3)以此切割点生成了一个超平面,然后将当前节点数据空间划分为2个子空间:把指定维度里小于p的数据放在当前节点的左孩子,把大于等于p的数据放在当前节点的右孩子
4)在孩子节点中递归步骤2和3,不断构造新的孩子节点,直到 孩子节点中只有一个数据(无法再继续切割)或 孩子节点已到达限定高度 
 
评估测试数据:
对于一个训练数据x,我们令其遍历每一棵iTree,然后计算x最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值,设置一个阈值(边界值),低于此阈值的测试数据即为异常, 异常在这些树中只有很短的平均高度
 
例子遍历一棵树:

可以看到d最有可能是异常,因为其最早就被孤立(isolated)了

iForest算法默认参数设置如下:

subsample size: 256

Tree height: 8

Number of trees: 100

通俗解释就是——建100棵iTree,每棵iTree最高8层,且每棵iTree都是独立随机选择256个数据样本建成

算法优缺点:

1)通常树的数量越多,算法越稳定

2)iForest不适用于特别高维的数据,由于每次切数据空间都是随机选取一个维度,建完树后仍然有大量的维度信息没有被使用,导致算法可靠性降低

论文下载:

http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tkdd11.pdf

调包:

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

转载本博笔记须在文章明显处注明原文的链接和作者信息

参考资料:

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

猜你喜欢

转载自www.cnblogs.com/yinghuali/p/9260291.html