孤立森林(Isolation Forest)
先简单解释一下什么是孤立森林
为什么叫孤立?
“孤立”(isolation)指的是“把异常点从所有样本中孤立出来”
为什么叫森林?
孤立森林是由N个树构成的。
每棵树的的学习过程非常随机:它会随机抽取特征、随机选取分割值来建立决策树,从而将每一个样本分到一个独立的子节点上(取值相同的样本视为同一个样本)。这样我们就得到了N个(基本)不相同的树。
从超空间的角度看,这样就是不断地用随机选取的超平面切分样本点,直到所有的样本点都被这些超平面“孤立”起来,即与其他样本点分隔开了。
「假设我们用一个随机超平面来切割(split)数据空间(data space), 切一次可以生成两个子空间(想象拿刀切蛋糕一分为二)。
之后我们再继续用一个随机超平面来切割每个子空间,循环下去,直到每子空间里面只有一个数据点为止。直观上来讲,我们可以发现那些密度很高的簇是可以被切很多次才会停止切割,但是那些密度很低的点很容易很早的就停到一个子空间里了」
既然是森林,那么和随机森林一样,孤立森林由 iTree(isolation tree) 组成,iTree树和随机森林的决策树不太一样,构建过程只是一个完全随机的过程。下面详细解释一下构建过程:
- 现有数据集中有n条数据,先从这n条数据中抽取一批样本(一般是无放回抽样),假设样本个数 ψ \psi ψ。
- 随机选择一个特征作为起始节点,并在该特征的值域里随机选择一个值,对个样本进行二叉划分,将样本中小于该取值的样本划到左分支,样本中大于该取值的划到右分支。
- 然后在左右两个分支重复这样的二叉划分操作。直到达到满足如下条件:
1.数据本身不可再分
2.二叉树达到限定的最大深度,树的最大深度在算法里面已经被限制了,一般只需要达到 l o g 2 ( ψ ) log_2(\psi) log2(ψ) 深度即可。
训练-测试过程
1. 单棵树的训练
- 单棵树的训练从训练数据中随机选择 Ψ 个点作为子样本,放入一棵孤立树的根节点;
- 随机指定一个维度,在当前节点数据范围内,随机产生一个切割点p——切割点产生于当前节点数据中指定维度的最大值与最小值之间;
- 此切割点的选取生成了一个超平面,将当前节点数据空间切分为2个子空间:把当前所选维度下小于p的点放在当前节点的左分支,把大于等于 p 的点放在当前节点的右分支;
- 在节点的左分支和右分支节点递归步骤2、3,不断构造新的叶子节点,直到叶子节点上只有一个数据(无法再继续切割)或树已经生长到了所设定的高度。(至于为什么要对树的高度做限制,后续会解释)
注意:在训练过程中,每棵孤立树都是随机选取部分样本。
2. 整合全部孤立树的结果
由于切割过程是完全随机的,一棵树不够可信?
没事,记得随机森林random forest不?没错,这里也引进一堆树。如果多数的树都在前几次分割时分出同一个点,那么这个点是异常点的概率就非常高了。
所以需要用ensemble的方法来使结果收敛,即反复从头开始切,然后计算每次切分结果的平均值。(注意,从头开始切意味着,重新从训练数据中随机选择 ψ \psi ψ个点作为子样本)
获得 t 个孤立树后,单棵树的训练就结束了。接下来就可以用生成的孤立树来评估测试数据了,即计算异常分数s。
对于一个训练数据x,我们令其遍历每一棵iTree,然后计算x最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值。
最后通过下面的公式计算这个训练数据 x 的异常得分:
s
(
x
,
ψ
)
=
2
−
E
(
h
(
x
)
)
c
(
ψ
)
s(x,\psi)=2^{-\frac{E(h(x))}{c(\psi)}}
s(x,ψ)=2−c(ψ)E(h(x))
- h ( x ) h(x) h(x)为 x 在每棵树的高度,
- c ( ψ ) c(\psi) c(ψ)为给定样本数Ψ时路径长度的平均值,用来对样本 x 的路径长度 h(x) 进行标准化处理。
- 如果异常得分接近 1,那么一定是异常点;
如果异常得分远小于 0.5,那么一定不是异常点;
如果异常得分所有点的得分都在 0.5左右,那么样本中很可能不存在异常点。
影响孤立森林效果的几个主要参数:
- 每棵树的训练样本数量
- 每棵树的高度
- 树的个数
训练一棵树的时候,从样本中随机抽取一定数量的样本——抽样的数量不宜过大,一般最大256个。研究表明,这个小样本集的容量超过256以后,模型的效果提升不大,有时候反而会降低模型的效果。当样本太多的时候,他们在高维空间中的分布会比较稠密,树会比较复杂,不利于离群点被区分出来。
参考
作者:大鱼
链接:https://zhuanlan.zhihu.com/p/74508141
来源:知乎
作者:桔了个仔
链接:https://www.zhihu.com/question/347847220/answer/836019446
来源:知乎
作者:YeZhu
链接:https://www.jianshu.com/p/5af3c66e0410
来源:简书
作者:李鹏宇
链接:https://zhuanlan.zhihu.com/p/30033618
来源:知乎