孤立森林算法简介
前言
现有的异常检测方法主要是通过对正常样本的描述,给出一个正常样本在特征空间中的区域,对于不在这个区域中的样本,视为异常。这些方法的主要缺点是,异常检测器只会对正常样本的描述做优化,而不会对异常样本的描述做优化,这样就有可能造成大量的误报,或者只检测到少量的异常。
异常具有两个特点:异常数据只占很少量,异常数据特征值和正常数据差别很大。而孤立森林不再是描述正常的样本点,而是孤立异常点。
在孤立森林中,异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可以将其理解为分布稀疏且离密度高的群体较远的点。 在特征空间里,分布稀疏的区域表示事件发生在该区域的概率很低,因而可以认为落在这些区域里的数据是异常的。
孤立森林是一种适用于连续数据的无监督异常检测方法。在孤立森林中,递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。
直观上来讲,那些密度很高的簇是需要被切很多次才能被孤立,但是那些密度很低的点很容易就可以被孤立。
如下图:
Xi 需要多次的分割才能被孤立,而 Xo 需要较少的分割次数就能被孤立。因此 Xi 为正常点,Xo 为异常点。
分割方式采用的是,随机选择一个特征以及拆分的值(这个值位于该特征的最小值和最大值之间)。
isolation tree (iTree)
定义:假设 T 是孤立树的一个节点,它要么是没有子节点的叶子节点,要么是只有两个子节点 (Tl,Tr) 的内部节点。
每一步分割,都包含特征 q 和分割值 p,将 q < p 的数据分到Tl,将 q ≥ p 的数据分到Tr。
给定 n 个样本数据 X = {x1,⋯,xn},特征的维度为 d。为了构建一棵孤立树,需要随机选择一个特征 q 及其分割值 p,递归地分割数据集 X
直到满足以下任意一个条件:(1) 树达到了限制的高度;(2) 节点上只有一个样本;(3) 节点上的样本所有特征都相同。
异常检测的任务是给出一个反应异常程度的排序,常用的排序方法是根据样本点的路径长度或异常得分来排序,异常点就是排在最前面的那些点。
Path Length(路径长度)
定义: 样本点 x 的路径长度 h(x) 为从 iTree 的根节点到叶子节点所经过的边的数量。
Anomaly Score(异常得分)
给定一个包含 n 个样本的数据集,树的平均路径长度为:
其中 H(i) 为调和数,该值可以被估计为 ln(i) + 0.5772156649。c(n) 为给定样本数 n 时,路径长度的平均值,用来标准化样本 x 的路径长度 h(x)。
样本 x 的异常得分定义为
其中,E(h(x)) 为样本 x 在一批孤立树中的路径长度的期望。下图给出了 s 和 E(h(x)) 的关系。
由上图可以得到一些结论:
当 E(h(x))→c(n) 时,s→0.5,即样本 x 的路径平均长度与树的平均路径长度相近时,则不能区分是不是异常。
当 E(h(x))→0 时,s→1,即 x 的异常分数接近1时,被判定为异常。
当 E(h(x))→n−1 时,s→0,被判定为正常。
参考链接:https://blog.csdn.net/extremebingo/article/details/80108247