"An outlier is an observation which deviates so much from other observations as to arouse suspicions that it was generated by a different mechanism."
异常检测 (anomaly detection),或者又被称为“离群点检测” (outlier detection),是机器学习研究领域中跟现实紧密联系、有广泛应用需求的一类问题。但是,什么是异常,并没有标准答案,通常因具体应用场景而异。
通常我们定义“异常”的两个标准或者说假设:
异常数据跟样本中大多数数据不太一样。
异常数据在整体数据样本中占比比较小。
对于异常检测而言,最直接的做法是利用各种统计的、距离的、密度的量化指标去描述数据样本跟其他样本的疏离程度(详见异常检测概论)。而 Isolation Forest (Liu et al. 2011) 的想法要巧妙一些,它尝试直接去刻画数据的“疏离”(isolation)程度,而不借助其他量化指标。Isolation Forest 因为简单、高效,在学术界和工业界都有着不错的名声。
Isolation Forest 简称 IForest,这个算法是周志华老师在2010年提出的一个异常值检测算法,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,也是本文主要介绍的一种算法。
算法起源于08年的一篇论文《Isolation Forest》,这论文由澳大利亚莫纳什大学的两位教授Fei Tony Liu, Kai Ming Ting和南京大学的周志华教授共同完成,而这三人在2011年又发表了《Isolation-based Anomaly Detection》,这两篇论文算是确定了这个算法的基础。
论文地址:
http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf
http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tkdd11.pdf
iForest (Isolation Forest)孤立森林 是一个基于Ensemble的快速异常检测方法,具有线性时间复杂度和高精准度。IF采用二叉树去对数据进行切分,数据点在二叉树中所处的深度反应了该条数据的“疏离”程度。整个算法大致可以分为两步:iForest属于Non-parametric和unsupervised的方法,即不用定义数学模型也不需要有标记的训练。怎么来切这个数据空间是iForest的设计核心思想,本文仅介绍最基本的方法。由于切割是随机的,所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。iForest 由t个iTree(Isolation Tree)孤立树 组成,每个iTree是一个二叉树结构,其算法流程:
1.构建N棵iTree,为每棵树随机做无放回采样生成训练集。iTree是一棵随机二叉树,给定数据集DataSet,假设数据集内所有属性都是连续型变量,iTree构造过程可以描述为: