美文网首页机器学习
孤立森林(Isolation Forest)算法简介

孤立森林(Isolation Forest)算法简介

作者: 坐看云起时zym | 来源:发表于2019-06-14 14:01 被阅读0次

简介:

孤立森林算法是一种适用于连续数据的无监督异常检测方法,由南京大学周志华教授等人于2008年首次提出,之后又于2012年提出了改进版本。与其他异常检测算法通过距离,密度等量化指标来刻画样本间的疏离程度不同,孤立森林算法通过对样本点的孤立来检测异常值。具体来说,该算法利用一种名为孤立树iTree的二叉搜索树结构来孤立样本。由于异常值的数量较少且与大部分样本的疏离性,因此,异常值会被更早的孤立出来,也即异常值会距离iTree的根节点更近,而正常值则会距离根节点有更远的距离。此外,相较于LOF,K-means等传统算法,孤立森林算法对高纬数据有较好的鲁棒性。

定义:

我们先给出孤立树(Isolation Tree)和样本点x在孤立树中的路径长度h(x)的定义

孤立树:若T为孤立树的一个节点,T存在两种情况:没有子节点的外部节点,有两个子节点\left ( T_{l},T_{r} \right )和一个test的内部节点。在T的test由一个属性q和一个分割点p组成,q < p的点属于T_{l},反之属于T_{r}

样本点x在孤立树中的路径长度h(x):样本点xiTree的根节点到叶子节点经过的边的数量

基本思想:

从下图我们可以直观的看到,相对更异常的x_{o}只需要4次切割就从整体中被分离出来,而更加正常的x_{i}点经过了11次分割才从整体中分离出来。这也体现了孤立森林算法的基本思想。(ps:图片来自原论文)

Isolation_Forest_show.jpeg

算法介绍:

下面,我们来详细介绍孤立森林算法。该算法大致可以分为两个阶段,第一个阶段我们需要训练出t颗孤立树,组成孤立森林。随后我们将每个样本点带入森林中的每棵孤立树,计算平均高度,之后再计算每个样本点的异常值分数。

Step1:X = \left \{ x_{1},...,x_{n} \right \} 为给定数据集, \forall x_{i} \in X, x_{i} = \left ( x_{i1},...,x_{id} \right ),从X中随机抽取\psi个样本点构成X的子集X^{'}放入根节点。
Step2:从d个维度中随机指定一个维度q,在当前数据中随机产生一个切割点pmin\left ( x_{ij}, j = q, x_{ij} \in X^{'} \right ) < p < max\left ( x_{ij}, j = q, x_{ij} \in X^{'} \right )
Step3:此切割点p生成了一个超平面,将当前数据空间划分为两个子空间:指定维度小于p的样本点放入左子节点,大于或等于p的放入右子节点。
Step4:递归Step2和Step3,直至所有的叶子节点都只有一个样本点或者孤立树 (iTree)已经达到指定的高度。
Step5:循环Step1至Step4,直至生成t个孤立树(iTree)

第二阶段:
Step1: 对于每一个数据点x_{i},令其遍历每一颗孤立树(iTree),计算点x_{i}在森林中的平均高度h\left ( x_{i} \right ),对所有点的平均高度做归一化处理。异常值分数的计算公式如下所示:
s\left ( x,\psi \right ) = 2^{\frac{E\left ( h\left ( x \right ) \right )}{c\left ( \psi \right )}}
其中,c\left ( \psi \right ) = \left\{\begin{matrix} 2H\left ( \psi - 1 \right ) - 2 \left ( \psi - 1 \right )/\psi, \psi > 2\\ 1, \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \psi = 2\\ 0, \quad \quad \quad \quad \quad \quad \quad \quad otherwise \end{matrix}\right.

示例:

from sklearn.ensemble import IsolationForest  
from scipy import stats  
rng = np.random.RandomState(42)
X_train = data[:10000,:]
X_test = data
clf = IsolationForest(max_samples=256,random_state=rng)
clf.fit(X_train)
y_pred_test = clf.predict(X_test)

参考:https://dl.acm.org/citation.cfm?doid=2133360.2133363

相关文章

网友评论

    本文标题:孤立森林(Isolation Forest)算法简介

    本文链接:https://www.haomeiwen.com/subject/bzgenqtx.html