深入机器学习系列——异常检测(Anomaly Detection)
- 异常值
霍金斯的定义为:“异常值是一个与其他观察结果有很大差异的观察结果, 以此引起人们怀疑它是由不同 的机制产生的”。
- 异常检测
所谓异常检测就是发现与大部分对象不同的对象,也就是发现离群点。一般规定数据具有“正常”模型,而异常被认为是与这个正常模型的偏差。在实际应用中对异常的定义也是特定的。
- 网络入侵检测
- 保险/信用卡诈骗检测
- 保健信息获取/医疗诊断
- 产业损坏检测
- 图像处理/视频监控
- 很难定义具有代表性的“正常”区域
- 正常行为与异常行为之间的界限往往并不明确
- 不同的应用领域对异常值的确切定义不同
- 难以获取用于训练/验证的标记数据
- 数据可能含有噪声
- 正常行为并不是一成不变的,会不断发展变化
四、 基于密度的方法:LOF
五、 基于模型的方法:孤立森林、RNN
- 方框的底部和顶部分别为Q1(下四分位数)和Q3(上四分位数)
- 方框内的线段为第二四分位数(中位数)
- 大于下四分位数+1.5IQR或小于上四分位数-1.5IQR的值为异常值(四分位距IQR=Q3-Q1)
- 已知某种统计分布(如高斯分布)
- 假设所有数据点都由该分布生成(如平均值和标准差),进行参数计算
- 异常值是整体分布产生概率较低的点
基本假设
- 正常数据点遵循(已知的)分布且出现在该模型的高概率区域中
- 异常值偏离这种分布
1、单变量高斯分布
(1) 选出可能表示异常实例的特征xj
(2) 与参数u1, …, un, σ12,…, σn2拟合
- 平均值和标准偏差对异常值非常敏感。
- 这些值是针对完整数据集(包括潜在异常值)而计算的。
- 很难选择恰当的ε值。
- 数据分布未知。
- 根据与相邻点的距离来判断一个点是否为异常
基本假设
- 正常数据点具有密集的邻域
- 异常值则远离其相邻点,即具有较为稀疏的邻域
实施方法
- 计算每对数据点间的距离
定义异常值的几种方法
- 在给定距离D之内相邻点少于p的点为异常值
- 与第k个相邻点的距离最大的前n个点为异常值
- 与k个最邻近点的平均距离最大的数据点为异常值
问题
- 该假设不一定适用于所有情况。
- 计算每对数据之间的距离花费较大。
- 维数灾难问题,即随着维数的增加,计算量呈指数倍增长。
- 将某一点周围的密度与其局部相邻点周围的密度进行比较
- 该点与其邻相邻点的相对密度计为异常得分
基本假设
- 正常数据点的密度与其近邻的密度相近
- 异常点的密度与其近邻的密度相差较大
1. 对于点p的第k距离
点p的第k距离(k为任意正整数),表示为k-distance(p),其定义为点p到点o∈ D的 距离d(p,o),使得:
(1) 在集合中至少有不包括p在内的k个点o’∈D满足d(p,o,)≤d(p,o) 且
(2) 在集合中最多有不包括p在内的k−1个点o’∈D,满足d(p,o,)<d(p,o)
点p的第k距离邻域Nk(p),就包含了距点p的距离不大于第k距离所有点,即Nk-distance(p)(p) = { q ∈D \ {p} | d(p, q) ≤ k-distance(p)}。
这些点就称为p的k个最近邻点。
2. 点p关于点o的可达距离
设k为一个自然数,点p关于点o的可达距离定义为:
reach-distk(p, o) = max { k-distance(o), d(p, o) }
- 计算每个点与数据集中其他点之间的(欧几里德)距离。O(n2)
- 将所得距离排序。O(nlogn)(最近邻问题)
- 计算每个点的可达距离。
- 计算每个点的局部可达密度。
- 计算每个点的局部异常因子。
5. Spark-LOF可视化
- 运行时间呈指数增长
- 维度灾难
(i) 这些方法不针对检测异常进行优化,因此,它们的性能通常不尽人意,可能会触发过多错误警报(将正常值检测为异常),也可能检测灵敏性低,遗漏一些异常;
(ii) 由于其原始算法的遗留,许多现有方法受限于低维数据和较小的数据量。
(1) 假设
孤立森林通过孤立实例来检测异常,并不依赖于任何距离或密度度量。
i)检测对象是少数包含几个实例的数据集
ii)它们的属性值与正常实例的属性值相差较大
可通过任何分隔实例的方式实现孤立。
因此,经过训练的RNN更可能很好地再现共同模式,而表示异常值的模式的再现效果则较为逊色,且重构误差较高。
重构误差可用于衡量数据的孤立程度。