一、概述
主要内容包括
- Feature Bagging
- 孤立森林
在实际场景中,很多数据集都是多维度的,随着维度的增加,数据空间的大小会以指数级别增长,使数据变稀疏。维度诅咒不止给异常检测带来了挑战,对距离的计算、聚类都带来了难度。例如,在之前介绍的基于邻近度的方法是在所有维度中使用距离函数来定义局部性,但是,在高维空间中,所有点对的距离几乎是相等的,这使得一些基于距离的方法失效。在高维场景下,一个常用的方法是子空间法。
集成是子空间思想中常用的方法之一,可以有效提高数据挖掘算法精度。集成算法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。
二、Feature Bagging
基本思想与bagging相似,只是对象是Feature。实现步骤:
- 选择基检测器,Feature Bagging常用LOF为基检测器,下图是Feature Bagging的通用算法:
- 分数标准化和组合方法
不通检测器可能会在不同的尺度上产生分数。下图是两个feature bagging两个不同的组合分数方法:
(广度优先)
(累积求和)
三、孤立森林
核心思想:
-
异常点相比其他数据点较为疏离,只需少数几次切分就可以被隔离,即异常样本更容易被划分至叶结点,从而使得异常样本所属的叶结点距离根节点有更短的路径长度。
-
在iTree中,异常点被isolated后,更加靠近树的根部,而正常数据在树中更深。
训练过程 -
抽取若干个样本构成子样本集,放置于根节点,用于训练单颗itree
-
随机选择一个特征q作为起点,然后在特征q的最大值和最小值之间随机选择一个值p作为分割点
-
根据属性q的取值进行分支,把q< p 的样本划分至左子节点,把q>p的样本划分至右子结点
-
重复上边两步,递归构造左子节点和右子结点,知道满足下列条件之一:
- 数据不可再分
- 二叉树达到了限定的最大深度
-
获得t个iTree后,孤立森林训练就结束了。
下面是代码介绍,这里直接调包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
rng = np.random