开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天
一、本篇笔记重点内容:
- 异常值概述
- 异常值检测
- 基于统计的方法:四分位数、盒图、3σ准则、假设检验
- 基于距离的方法:K-means聚类
- 基于密度的方法:LOF 算法
- 复杂方法:One-Class SVM、Isolation Forest、Robust covariance
二、详细知识点介绍
异常值概述
异常值,也称为离群值,指一个数据集中那些明显偏离数据集中的其他样本 一个观测与其他观测偏离太多以致于值得怀疑它是由不同的机制所产生的
异常值产生的原因:
- 数据录入错误:在错误的字段提交值、无意中的胖手指值(fat finger value)
- 采样偏差
- 业务操作的影响:网站广告费用增加10倍,导致流量激增
- 测量错误
异常值检测
- 最直观的想法是通过数据可视化 (分布图、直方图和盒图等),人工来判断是否存在离群值
- 对于高维数据,这种直观的方法不再奏效
- 自动且量化地检测离群值
异常值检测的分类
- 新奇检测 (Novelty detection) 已知训练数据集是“纯净”的 未被真正的“噪音”数据或真实的“离群值”污染 针对这些数据训练完成之后再对新的数据进行训练以寻找异常数据
- 离群值检测 (Outlier detection) 离群值检测的训练数据集则包含“离群点”数据,对这些数据训练完成之后再 在新的数据集中寻找异常数据
异常值检测方法
- 基于统计的方法:四分位数、盒图、3σ准则、假设检验
- 基于距离的方法:K-means聚类
- 基于密度的方法:LOF 算法
- 复杂方法:One-Class SVM、Isolation Forest、Robust covariance
盒图
在1997年由统计学家约翰·图基(John Tukey)发明
- 表示是一种数据离散度的图形
- 由五种数据样本构成:
- 最小非异常值、下四分位数
- 中位数、上四分位数和最大非异常值
拉依达准则(3σ准则)
- 假设数据中仅存在随机误差
- 根据给定一个置信度水平确定相应的置信区间后,超过置信区间的误差就认为不属于随机误差的范围
- 含有这种误差的取值就被认为是异常值
- 在统计学中,常用的检测方法是拉依达准则 (Pauta criterion)
拉依达准则存在的前提:数据集服从或者近似服从正态分布 如果有超过均值三个标准差以上的样本存在,那么认为该样本为异常值
基于距离的异常检测方法
- 包含并拓展了基于统计的思想
- 给出样本点间的距离(如曼哈顿距离、欧式距离等),基于聚类如K-means的方法将离每个簇中心点最远或者不属于任何一个类的样本点作为异常点
K-means聚类
K-means聚类原理:将n个样本划分到K个簇中,其中每个样本归属于距离自己最近的簇 K-means算法步骤:
-
1.随机选择K个样本作为初始中心 -
2.重复迭代如下步骤直至收敛: -
(a)把每个样本指派到最近的中心,形成K个簇; -
(b)重新计算每个簇的中心; -
(c)直到中心不在发生变化。
- 直观上来看,如果一个样本是异常值,那么它离其他样本的距离会比较远 对样本的离群程度进行量化,分数由它与K个最近邻的距离决定 分数的取值区间为[0, +∞)
- 由此,引出基于K近邻算法的异常值检测方法KNN
KNN算法的步骤:
-
计算每一个样本与其最近的K个近邻样本的距离,放入到集合C中 -
对C中的所有元素进行降序排列 -
根据给定的距离阈值,选取C中大于给定阈值的距离对应的样本异常值
基于密度的异常值检测方法
- 如果数据包含两个密度分布不均衡的区域
- KNN能够检测全局异常值x_1,但无法检测到局部异常值x_2
- 局部异常因子算法(LOF算法,Local Outlier Factor)
LOF 算法:
-
局部离群因子算法给数据集中每一个样本计算局部离群分数 -
该分数通过样本邻居的密度和当前样本的密度相对值来计算 -
在计算每个样本的局部离群分数后,可以直接根据分数大小来识别离群样本