Isolation Forest 孤立森林

Isolation Forest 孤立森林

Isolation Forest 孤立森林

  从今天开始打算在CSDN博客上做笔记.希望有兴趣的可以一起讨论.现在主要做的和弱监督和无监督有关.今天读的是Isolation Forest这个文章.这是一篇有关异常检测,或者又称离群点检测的方法,在工业界很流行.我把里面对自己有用的部分结合自己的理解后摘录下来.为了给自己一些压力,我决定在今天将这个博客更完.

ITree

   Isolation(孤立)是指将每个样本都和其他样本分开.这里假设异常点具有”少而不同”的特性,因而更容易被孤立.这里建立的ITree树是一种二分树,其建立过程如下图所示:
Isolation Forest 孤立森林_第1张图片
   用自然语言描述下就是输入训练数据集 X , e 为当前的树高, l 为树的高度限制.首先将 X  放在根节点中,随机选择 X 中的一个维度 q ,并在 q 上的最大值和最小值之间随机选择一个值 p ,将 X 中在 q 上比 p 大的样本流向右子节点中,比 p 小的样本流向左子节点.然后重复上述步骤直到:1.每个子节点中都只有一个样本或者多个相同的样本,即每个样本都被孤立了;或2.树的高度达到 l
   如下图所示,当采用上述方法建立ITree的时候,异常点 xo 更容易被孤立,因此其被孤立时所在的子节点的路径长度也较短,即从根节点到 xo 所在子节点所经历过的边数.而正常点 xi 1不容易被孤立,因此其路径长度也较长.
   Isolation Forest 孤立森林_第2张图片

   下图展示了,正常点和异常点随着ITree数量的增加其路径长度的变化趋势.可以看出正常点的路径长度大于异常值.
   Isolation Forest 孤立森林_第3张图片
   这里树高 l 取多少合适呢?假设 中有n个样本,则n个样本组成的搜索二分树的平均树高为 ceiling(log2n) 。我们已知异常点的平均路径比较短,所以可以想到如果树增长到平均树高,如果 X 中每个点还没孤立完,那么这些没孤立完的样本基本上不可能是异常点了,所以这里讲 l 设置为平均树高。

IForest

   如何建立深林呢?
   IForest 实际上就是很多的ITree组成的.那这些ITree是怎么建立的呢?这里面采用的是对 X 多次采样,得到众多子数据集,然后根据每个子数据集来建立一个ITree.这样的好处是什么呢?首先是当 X 的规模比较大时,很容易出现正常点和异常点混在一起的情况,而采样可以一定程度上抑制这种情况.如图所示:
   Isolation Forest 孤立森林_第4张图片
   这里红色的是异常点,蓝色的是正常点.IForest采用的是不放回抽样.那么要建立几棵树,以及每次采样多少次呢?给出的结论是是建立100棵树,每次采样256次,就够了,这是根据大量实验得出的结果.

   下一个问题是如何根据建立的孤立森林来估计 X 中每个点的异常程度呢?
   我们知道异常点的路径比较短,正常点的路径比较长,因此我们首先统计森林里所有树上待判断点 x 的平均路径,记为 E(h(x)) , E() 表示平均的意思, h(x) 表示 x 的路径长度,是从根节点到 x 被孤立的节点经过的边的总数。然后呢,假设 X 中有 n 个点,那这 n 个点如果用一个二分树来搜索,平均搜索不成功的路径就等于这 n 个点的平均路径长度 c(n)=2H(n1)(2(n1)/n) 。所以用 c(n) 来归一化 E(h(x)) 。那么这里存在一个疑问,为什么用 c(n) 来归一化,而不是这么多树真实的,每个点的平均路径长度来归一化呢?难道是为了节省计算力?不知道有没有小伙伴明白?请赐教。
   异常程度便可表示为:
                 s(x,n)=2E(h(x))c(n)
可以看出当其趋于0.5时,表示很可能是正常值,当其趋于1时,很可能是异常值。这里意思是如果某个点的平均路径和n个点(数据集中的点数)的平均路径趋于相同,则不太可能是异常点,只有当其大大小于n个点的平均路径时,才可能是异常值。
   至此对 X 中的样本进行异常成都估计的步骤就已经讲完。

你可能感兴趣的:(Isolation Forest 孤立森林)