机器学习总结----iForest异常值处理

本篇博客参考了
iForest

主要思想

iForest适用于连续数据的异常检测,它将一场定义为“容易被孤立的离群点”,也可以理解为分布稀疏且离密度高的群体较远的点,属于一种无参数无监督的方法。

在iforest中,我们不断的用超平面切割空间,直到每个子空间只剩下一个点,我们就可以看出,密度高的簇要被切很多次才能将里面的点单独分割出来,而密度低的点,很容易就会被超平面分割到一个单独的空间里。

iForest又叫孤立森林,森林么由一棵棵树组成。我们看下他是如何构造一棵树的。

iTree

如何构造一棵孤立树
1、随机选取一个属性Attr
2、随机选取该属性的值value,将其分为两份
3、将属性中小于value的样本放到左子节点中,大于value的样本放到右子节点中
4、进行递归,构造左右节点,直到传入数据只有一条数据或多条一样的数据或者树达到了我们限定的高度

iTree训练好之后我们就用测试的样本在iTree上走一走,异常值一般比较特殊,很快就会被分到叶子节点上,所以,可以使用路径的长度来判断样本点是不是异常值点,对于n个样本,树最小高度为log2(n),

S(x,n)=2 -h(x)/C(n)
C(n) = 2H(n-1) -(2(n-1)/n)
H(k) = In(k) + ξ \xi ξ

S(x,n)表示记录x在由n个训练样本构成的iTree的异常指数,h(x)是路径长度, ξ \xi ξ为欧拉常数,取值0.577215.
异常指数越接近1,异常点的可能性就越高,越接近0,为正常点的可能就越高。

因为属性和划分点都是随机选取的,所以我们需要训练多棵树,和随机森林的结构一样。很多棵iTree就构成了iForest

iForest构造

在训练一棵树之前,会对样本进行随机采样,论文里说采样超过256效果提升就不大了,

机器学习总结----iForest异常值处理_第1张图片
左边是原始数据,右边是采样数据,蓝色正常样本,红色一行样本,采样前异常样本出现重叠,但是采样之后可以明显分开。

对样本进行采样之后还减少了swamping和masking的影响。
masking:异常值很多,很密集,需要更多的拆分才能分出来
swamping:异常值与正常值靠得很近。
导致这两种情况的原因都是因为数据量太大,采样可以减少他们的影响,子采样控制了孤立树的数据量,每棵孤立树可以识别特定的子样本。

除了限制采样大小n,还要限制树的最大高度,l = log2n,因为异常值比较少,而且我们关注的是异常值,所以不用把每个样本点都单独划分到一个空间里,只用关心样本的平均路径长度就行了,路径长度比较低的有更大可能是异常值。


S(x,n)=2 -E(h(x))/C(n)

E(h(x))表示某个样本点的高度均值

iForest特点

1、iForest和随机森林的结构一致,训练速度快,可以并行运算
2、iForest并不适合高纬度的异常值筛选,我们可以看到一棵树只能训练一个特征,有大量的信息没有被使用,使模型的可靠性不高。
3、iForest对全局异常值点敏感,但是不善于处理局部异常值点。

你可能感兴趣的:(机器学习总结----iForest异常值处理)