README
自己翻译的+参考有道,基本是手打的可能会有很多小问题。
括号里的斜体单词是我觉得没翻译出那种味道的或有点拿不准的或翻译出来比较奇怪的地方,尤其是profile、swamping和masking这三个词不知道怎样更准确。
欢迎指正和讨论,需要Word版可以留言。
孤立森林
摘要
大多数现有的基于模型的异常检测算法构建了一个正常实例的特征轮廓(profile),然后将不符合正常轮廓的实例识别为异常。本文提出了一种完全不同的基于模型的方法,显示地隔离异常而不是构建正常点的特征轮廓。据我们所知,目前的文献中还没有讨论过孤立的概念。
隔离性的使用使得本文提出的方法,iForest,能够在一定程度上采用现有方法无法使用的子采样,创建了一个有低常数项和低内存需求的线性时间复杂度的算法(an algorithm which has a linear time complexity with a low constant and a low memory requirement)。本文的实验结果表明,iForest在AUC和处理时间上优于ORCA(一种具有线性时间复杂度的基于距离的方法)、LOF和随机森林,尤其是在大数据集上。iForest也适用于具有大量不相关属性的高维问题,以及训练集不包含任何异常的情况。
1 引言
异常是具有与正常实例不同的数据特征的数据模式。异常的监测有明显的相关性(significant relevance),通常可以为各种应用领域提供关键的可操作(actionable)信息。例如,信用卡交易中的异常可能表示信用卡的欺诈使用。一张天文学图片中的一个异常点可能表明一颗新星的发现。一个不正常的计算机网络流量模式可能代表着未经授权的访问。这些应用需要检测性能高和执行速度快的异常检测算法。
大多数现有的基于模型的异常检测算法构建一个正常实例的轮廓,然后将不符合正常轮廓的实例识别为异常。值得注意的例如统计方法[11]、基于分类的方法[1]、基于聚类的方法[5]都使用了这种普遍的方法。这种方法的两个主要缺点是:(i)异常检测器被优化用于构建正常实例的轮廓,而不是被优化用于检测异常——结果,异常检测的结果可能并不像预期的一样好,导致大量的误报(将正常实例识别为异常)或检测到的异常太少;(ii)许多现有的方法由于其较高的计算复杂度而被局限于低维数据和小数据量的情况。
本文提出一种基于模型的不同类型的方法,显式地分离异常而不是对正常实例构建轮廓。为了实现这个目的,本文的方法利用了异常点的两个数量属性(quantitative properties):i)它们是由较少实例组成的少数,并且 ii)它们有和正常实例非常不同的属性值。换言之,异常“少且不同”,这使得它们比正常点更容易被孤立。本文表明一个树结构可以被有效地构建来隔离每个单独的实例。由于它们容易被孤立,异常点在离树的根结点更近的地方被隔离;而正常点在树的更深的末端被隔离。树的这种隔离特征构成了本文方法检测异常的基础,本文称这种树为孤立树(Isolation Tree)或iTree。
本文提出的方法,被称为孤立森林(Isolation Forest)或iForest,为一个给定的数据集合构建一