Isolation Forest 孤立森林
Isolation Forest 孤立森林
从今天开始打算在CSDN博客上做笔记.希望有兴趣的可以一起讨论.现在主要做的和弱监督和无监督有关.今天读的是Isolation Forest这个文章.这是一篇有关异常检测,或者又称离群点检测的方法,在工业界很流行.我把里面对自己有用的部分结合自己的理解后摘录下来.为了给自己一些压力,我决定在今天将这个博客更完.
ITree
Isolation(孤立)是指将每个样本都和其他样本分开.这里假设异常点具有”少而不同”的特性,因而更容易被孤立.这里建立的ITree树是一种二分树,其建立过程如下图所示:
用自然语言描述下就是输入训练数据集
X
,
如下图所示,当采用上述方法建立ITree的时候,异常点
下图展示了,正常点和异常点随着ITree数量的增加其路径长度的变化趋势.可以看出正常点的路径长度大于异常值.
这里树高
l
取多少合适呢?假设
IForest
如何建立深林呢?
IForest 实际上就是很多的ITree组成的.那这些ITree是怎么建立的呢?这里面采用的是对
X
多次采样,得到众多子数据集,然后根据每个子数据集来建立一个ITree.这样的好处是什么呢?首先是当
这里红色的是异常点,蓝色的是正常点.IForest采用的是不放回抽样.那么要建立几棵树,以及每次采样多少次呢?给出的结论是是建立100棵树,每次采样256次,就够了,这是根据大量实验得出的结果.
下一个问题是如何根据建立的孤立森林来估计
X
中每个点的异常程度呢?
我们知道异常点的路径比较短,正常点的路径比较长,因此我们首先统计森林里所有树上待判断点
异常程度便可表示为:
s(x,n)=2−E(h(x))c(n)
可以看出当其趋于0.5时,表示很可能是正常值,当其趋于1时,很可能是异常值。这里意思是如果某个点的平均路径和n个点(数据集中的点数)的平均路径趋于相同,则不太可能是异常点,只有当其大大小于n个点的平均路径时,才可能是异常值。
至此对
X
<script type="math/tex" id="MathJax-Element-8136">X</script>中的样本进行异常成都估计的步骤就已经讲完。