文章目录
一、原理
孤立森林(Isolation Forest,简称 iForest)是一种无监督学习算法,用于识别异常值。
其基本原理可以概括为一句话:异常数据由于数量较少且与正常数据差异较大,因此在被隔离时需要较少的步骤。
有两个假设:
- 异常的值是非常少的(如果异常值很多,可能被识别为正常的)
- 异常值与其他值的差异较大(这点也可以引出主要是全局上都为异常的异常,局部小异常可能发现不了,因为差异并不大)
二、具体流程
2.1 训练森林
- 子采样: 首先从整个数据集中随机抽取一定数量的样本来为构建树做准备。这些抽样的子集大小通常远小于原始数据集的大小,这样可以限制树的大小,并且减少计算复杂度。
- 构建孤立树 (iTrees): 对于每个子采样集,算法构建一棵孤立树。构建孤立树的过程是递归的。在每个节点,算法随机选择一个特征,并在该特征的最大值和最小值之间随机选择一个分割值。然后,数据根据这个分割值将样本分到左子树或右子树(这里其实就是简单的将样本中特征小于这个分割点的样本分到左边,其次分到右边)。这个过程的结束条件:树达到限定的高度, 节点中的样本数量到一定的数目,或者所有样本的所选特征值都是同一个值。
- 森林构建: 重复1-2构建完特定数量的孤立树,集合为孤立森林。
2.2 首先要明确几个相关概念
- 路径长度( h ( x ) h(x) h(x)): 指样本通过该孤立树构建阶段的特征选择方式,从树的根节点到达该样本被孤立的节点(被孤立就是意味着这个样本最终到达的树的叶子节点)所需要的边数。
- 平均路径长度 E ( h ( x ) ) E(h(x)) E(h(x)): 该样本在森林中所有树的路径长度的平均值。
- 树的平均路径长度:
c ( n ) = 2 H ( n − 1 ) − 2 ( n − 1 ) n c(n)=2H(n-1)-\frac{2(n-1)}{n} c(n)=2H(n−1)−n2(n−1)
H ( i ) H(i) H(i) 是调和数,可以近似为 l n ( i ) + 0.5772156649 ln(i) + 0.5772156649 ln(i)+0.5772156649,其中