转载请注明作者和出处:http://blog.youkuaiyun.com/u013829973
我的GitHub:https://github.com/weepon
欢迎评论,顶!
今天和大家简单聊聊异常检测技术的简要概述。
什么是离群值,如何处理它们?
“Observation which deviates so much from other observations as to arouse suspicion it was generated by a different mechanism” — Hawkins(1980)
异常值是偏离数据其他观测值的极端值,它们可能表示测量的可变性,实验误差或新事物。 换句话说,异常值是偏离整体样本的观察值。
离群值的类型
异常值可以是两种:单变量和多变量。 当查看单个特征空间中的值分布时,可以找到单变量异常值。 多变量异常值可以在n维空间(n个特征)中找到。 观察n维空间中的分布对于人类大脑来说可能非常困难,这就是为什么我们需要训练一个模型。
不同的环境,异常值也可以有不同的风格:点异常值,背景异常值或集体离群值。 点异常值是与分布的其余部分相距甚远的单个数据点。 语境异常值可以是数据中的噪声,例如在进行语音识别时实现文本分析或背景噪声信号时的标点符号。 集体异常值可以是诸如可能指示发现新现象的信号的数据的新颖性子集(如图B所示)。
数据集中出现异常值的最常见原因:
数据输入误差(人为误差)
测量误差(仪器错误)
实验误差(数据提取或实验计划/执行误差)
故意的(测试检测方法的假异常值)
数据处理错误(数据处理或数据设置意外突变)
抽样错误(提取或混合来自错误或不同来源的数据)
自然(不是错误,数据中的新奇)
在制作,收集,处理和分析数据的过程中,异常值可以来自许多来源,并在许多方面隐藏起来, 那些不是错误的产物被称为新奇。
检测异常值对于几乎任何定量学科都是至关重要的(即:物理,经济,金融,机器学习,网络安全)。 在机器学习和任何定量学科中,数据质量与预测或分类的模型一样重要。
当试图在数据集中检测离群值时,记住上下文并尝试回答这个问题非常重要:“为什么我要检测离群值?你的发现的意义将由上下文决定。
此外,当开始一个离群的检测任务时,你必须回答关于你的数据集的两个重要问题:此外,当开始一个离群的检测任务时,你必须回答关于你的数据集的两个重要问题:
- 我要考虑哪些特征来检测离群值?(单变量或多变量)我要考虑哪些特征来检测离群值?(单变量或多变量)
- 我可以为我选择的特性假设一个值的分布吗?(参数/非参数)
一些最流行的离群检测方法是:
z分数(Z-Score )或极值分析(参数)
概率和统计建模(参数)
线性回归模型(PCA,LMS)
基于邻近模型(非参数)
信息理论模型
高维离群检测方法(高维稀疏数据)
Z-Score
一个观测的z分数或标准分数是一个度量,表示一个数据点偏离样本均值的多少个标准差,假设一个高斯分布。这使得z分数是一个参数化的方法。非常频繁的数据点并不是由高斯分布描述的,这个问题可以通过将转换应用于数据,比如:缩放它来解决。
一些Python库,如Scipy和scikit学习,可以很容易地使用函数和类利用Pandas和Numpy轻松实现。在对数据集的选定特征空间进行适当的转换之后,任何数据点的z分数都可以用以下表达式计算:
当计算数据的每个样本的z分数时,必须指定一个阈值。一些好的“thumb-rule”阈值可以是:2.5、3、3.5或更高的标准差。
通过“标记”或删除超出给定阈值的数据点,我们将数据分类为异常值,和非异常值。