异常点检测 孤立森林(isolation forest)

先说重点

1、孤立森林是一种适用于连续数据无监督异常检测方法

2、孤立森林,不再是描述正常的样本点(给出一个正常样本在特征空间中的区域,对于不在这个区域中的样本,视为异常),而是要孤立异常点

3、根据‘高密度的簇是需要被切很多次才能被孤立,低密度的点被切分较少次就可以被孤立’的原理,最终算法比较路径长度的平均值即可捕获异常点。

4、对小数据集能取得更好的效果。样本数较多会降低孤立森林孤立异常点的能力,从而出现典型的swamping和masking问题。

细说原理

异常值的两个特点:异常数据只占很少量、异常数据特征值和正常数据差别很大。

孤立森林机制是近似随机森林的。下图直观地看出,正常点通常是密度很高的簇,需要被切很多次才能被孤立,但是那些密度很低的点很容易就可以被孤立。由于数的切割点是随机生成的,且直到树的孩子节点中只有一个数据(无法再继续切割) 或 孩子节点已到达限定高度时停止。故需计算各点的平均路径长度作为衡量标准(均值)。如右图看到异常点的平均路径长度小于正常点的路径长度。

异常点检测 孤立森林(isolation forest)_第1张图片异常点检测 孤立森林(isolation forest)_第2张图片

isolation tree (iTree)

定义:假设T是孤立树的一个节点,它要么是没有子节点的叶子节点,要么是只有两个子节点(Tl,Tr)的内部节点。每一步分割,都包含特征q和分割值p,将q

异常检测的任务是给出一个反应异常程度的排序,常用的排序方法是根据样本点的路径长度或异常得分来排序,异常点就是排在最前面的那些点。

Path Length

定义: 样本点x的路径长度h(x)为从iTree的根节点到叶子节点所经过的边的数量。

Anomaly Score

给定一个包含nn个样本的数据集,树的平均路径长度为 c(n)=2H(n−1)−2(n−1)/n

其中H(i)为调和数,该值可以被估计为ln(i)+0.5772156649。c(n)为给定样本数nn时,路径长度的平均值,用来标准化样本x的路径长度h(x)。
其中,E(h(x))为样本x在一批孤立树中的路径长度的期望。下图给出了s和E(h(x))的关系。

异常点检测 孤立森林(isolation forest)_第3张图片

由上图可以得到一些结论:

当E(h(x))→c(n)时,s→0.5,即样本xx的路径平均长度与树的平均路径长度相近时,则不能区分是不是异常。

当E(h(x))→0时,s→1,即xx的异常分数接近1时,被判定为异常。

当E(h(x))→n−1时,s→0,被判定为正常。
异常点检测 孤立森林(isolation forest)_第4张图片

子采样

样本数较多会降低孤立森林孤立异常点的能力,因为正常样本会干扰隔离的过程,降低隔离异常的能力。子采样就是在这种情况下被提出的。

swamping和masking是异常检测中比较关键的问题。swamping指的是错误地将正常样本预测为异常。当正常样本很靠近异常样本时,隔离异常时需要的拆分次数会增加,使得从正常样本中区分出异常样本更加困难。masking指的是存在大量异常点隐藏了他们的本来面目。当异常簇比较大,并且比较密集时,同样需要更多的拆分才能将他们隔离出来。上面的这两种情况使得孤立异常点变得更加困难。

造成上面两种情况的原因都与数据量太大有关。孤立树的独有特点使得孤立森林能够通过子采样建立局部模型,减小swamping和masking对模型效果的影响。其中的原因是:子采样可以控制每棵孤立树的数据量;每棵孤立树专门用来识别特定的子样本。
异常点检测 孤立森林(isolation forest)_第5张图片异常点检测 孤立森林(isolation forest)_第6张图片

scikit-learn的相关连接

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest

鸣谢 https://blog.csdn.net/extremebingo/article/details/80108247

你可能感兴趣的:(机器学习算法)