作者:Dhiraj K
机器之心编译
参与:李诗萌、一鸣
异常检测看似是机器学习中一个有些难度的问题,但采用合适的算法也可以很好解决。本文介绍了孤立森林(isolation forest)算法,通过介绍原理和代码教你揪出数据集中的那些异常值。

 从银行欺诈到预防性的机器维护,异常检测是机器学习中非常有效且普遍的应用。在该任务中,孤立森林算法是简单而有效的选择。 本文内容包括: 
- 介绍异常检测; 
- 异常检测的用例; 
- 孤立森林是什么; 
- 用孤立森林进行异常检测; 
- 用 Python 实现。 
 
 异常检测简介 
离群值是在给定数据集中,与其他数据点显著不同的数据点。 
异常检测是找出数据中离群值(和大多数数据点显著不同的数据点)的过程。 
真实世界中的大型数据集的模式可能非常复杂,很难通过查看数据就发现其模式。这就是为什么异常检测的研究是机器学习中极其重要的应用。 
本文要用孤立森林实现异常检测。我们有一个简单的工资数据集,其中一些工资是异常的。目标是要找到这些异常值。可以想象成,公司中的一些雇员挣了一大笔不同寻常的巨额收入,这可能意味着存在不道德的行为。 
在继续实现之前,先讨论一些异常检测的用例。 
异常检测用例 
异常检测在业界中应用广泛。下面介绍一场常见的用例: 
银行:发现不正常的高额存款。每个账户持有人通常都有固定的存款模式。如果这个模式出现了异常值,那么银行就要检测并分析这种异常(比如洗钱)。 
金融:发现欺诈性购买的模式。每个人通常都有固定的购买模式。如果这种模式出现了异常值,银行需要检测出这种异常,从而分析其潜在的欺诈行为。 
卫生保健:检测欺诈性保险的索赔和付款。 
制造业:可以监测机器的异常行为,从而控制成本。许多公司持续监视着机器的输入和输出参数。众所周知,在出现故障之前,机器的输入或输出参数会有异常。从预防性维护的角度出发,需要对机器进行持续监控。 
网络:检测网络入侵。任何对外开放的网络都面临这样的威胁。监控网络中的异常活动,可以及早防止入侵。 
接着了解一下机器学习中的孤立森林算法。 
什么是孤立森林 
孤立森林是用于异常检测的机器学习算法。这是一种无监督学习算法,通过隔离数据中的离群值识别异常。 
孤立森林是基于决策树的算法。从给定的特征集合中随机选择特征,然后在特征的最大值和最小值间随机选择一个分割值,来隔离离群值。这种特征的随机划分会使异常数据点在树中生成的路径更短,从而将它们和其他数据分开。 
一般而言,异常检测的第一步是构造「正常」内容,然后报告任何不能视为正常的异常内容。但孤立森林算法不同于这一原理,首先它不会定义「正常」行为,而且也没有计算基于点的距离。 
一如其名,孤立森林不通过显式地隔离异常,它隔离了数据集中的异常点。 
孤立森林的原理是:异常值是少量且不同的观测值,因此更易于识别。孤立森林集成了孤立树,在给定的数据点中隔离异常值。 孤立森林通过随机选择特征,然后随机选择特征的分割值,递归地生成数据集的分区。和数据集中「正常」的点相比,要隔离的异常值所需的随机分区更少,因此异常值是树中路径更短的点,路径长度是从根节点经过的边数。 
用孤立森林,不仅可以更快地检测异常,还需要更少的内存。 
孤立森林隔离数据点中的异常值,而不是分析正常的数据点。和其他正常的数据点相比,异常数据点的树路径更短,因此在孤立森林中的树不需要太大的深度,所以可以用更小的 max_depth 值,从而降低内存需求。
 这一算法也适用于小数据集。 
接着我们对数据做一些探索性分析,以了解给定数据的相关信息。 
探索性数据分析 
先导入所需的库。导入 numpy、pandas、seaborn 和 matplotlib。此外还要从 sklearn.ensemble 中导入孤立森林(IsolationForest)。