Isolation Forest

什么是Isolation Forest?

Isolation Forest的思路很简单。假设我们的数据集合是一维空间下的点

Isolation Forest_第1张图片

我们通过切分的方式可以很方便的将异常点B点切分出来。

如何定义方便?

切分的次数

那这个思路对于正常点点A来说也可以取,可以看到如果要把A隔离出来我要切很多遍。

 

Isolation Forest算法

1.训练:抽取多个样本,构建多棵二叉树(isolation tree,即iTree);

2.预测:综合多棵二叉树的结果,计算每个数据点的异常分值

 

训练

构建一棵iTree时,先从全量数据中抽取一批样本,然后随机选择一个特征作为起始节点,并为该特征的最大值和最小值之间随机选择一个值,将样本中小于该取值的数据划到左分支,大于等于该取值的划到右分支。然后,在左右两个分支数据中,重复上述步骤,直道满足如下条件:

1.数据不可再分,即:只包含一条数据,或者全部数据相同。

2.二叉树达到限定的最大深度

 

预测

计算数据x的异常分值时,先要估算它在每棵iTree中的路径长度(也可以叫深度)。具体的,先沿着一棵iTree,从根节点开始按不同特征的取值从上往下,直到达到某叶子节点。假设iTree的训练样本中同样落在x所在叶子节点的样本数为T.size,则数据x在这棵iTree上的路径长度h(x),可以用下面这个公式计算:

公式中,e表示数据x从iTree的根节点到叶结点过程中经过的边的数目,C(T.size)可以认为是一个修正值,它表示在一棵用T.size条样本数据构建的二叉树的平均路径长度。一般的,C(n)的计算公式如下:

 

其中,H(n-1)可用ln(n-1)+0.5772156649估算,这里的常数是欧拉常数。数据x最终的异常分值Score(x)综合了多棵iTree的结果:

 

Isolation Forest_第2张图片

从异常分值的公式看,如果数据x在多棵iTree中的平均路径长度越短,得分越接近1表明数据x越异常;如果数据x在多棵iTree中的平均路径长度越长,得分越接近0,表示数据x越正常;如果数据x在多棵iTree中的平均路径长度接近整体均值,则打分会在0.5附近

 

总结

其实这个很好理解,就看score函数2的指数部分,是一个分数形式,分子是数据x的在树中的平均长度,分母是树的平均长度。所以假设这个点是异常点,则整体的分数值应该是小于1的,而且是趋近于0。然后呢前面这个负号很有说法。等于说,越异常的点,带负号分数值就越大越趋近于0。所以1为数据x越异常。

 

参考

机器学习-异常检测算法(1):https://zhuanlan.zhihu.com/p/27777266

你可能感兴趣的:(算法,异常检测)