# 如何识别数据中的异常值

> 原文： [https://machinelearningmastery.com/how-to-identify-outliers-in-your-data/](https://machinelearningmastery.com/how-to-identify-outliers-in-your-data/)

Bojan Miletic在使用机器学习算法时询问了有关数据集中异常值检测的问题。这篇文章是对他的问题的回答。

如果您对机器学习有疑问，请注册时事通讯并回复电子邮件或使用[联系表格](http://machinelearningmastery.com/contact/ "Contact")并询问，我会回答您的问题，甚至可能将其变成博客文章。

## 离群值

许多机器学习算法对输入数据中属性值的范围和分布敏感。输入数据中的异常值可能会扭曲和误导机器学习算法的训练过程，从而导致更长的训练时间，更不准确的模型以及最终的较差结果。

![Outlier](img/eed40d3eda8dd5e6a750f2ac60525702.jpg)

异常
摄影： [Robert S. Donovan](http://www.flickr.com/photos/booleansplit/8482641188/sizes/l/) ，保留一些权利

即使在针对训练数据准备预测模型之前，异常值也可能导致误导性表示，进而导致对收集数据的误导性解释。异常值可以在描述性统计中偏离属性值的摘要分布，如平均值和标准差，以及直方图和散点图等图形，压缩数据体。

最后，异常值可以表示与问题相关的数据实例的示例，例如欺诈检测和计算机安全性中的异常。

## 异常值建模

异常值是极端值，远远超出其他观察值。例如，在正态分布中，异常值可以是分布尾部的值。

识别异常值的过程在数据挖掘和机器学习中有许多名称，例如异常值挖掘，异常值建模和新颖性检测以及异常检测。

在他的书[异常分析](http://www.amazon.com/dp/1461463955?tag=inspiredalgor-20)（联盟链接）中，Aggarwal提供了一个有用的离群检测方法分类，如下：

*   **极值分析**：确定数据底层分布的统计尾部。例如，统计方法，如单变量数据的z分数。
*   **概率和统计模型**：从数据的概率模型中确定不太可能的实例。例如，使用期望最大化优化的高斯混合模型。
*   **线性模型**：使用线性相关将数据建模到较低维度的投影方法。例如，主成分分析和具有大残差的数据可能是异常值。
*   **基于邻近度的模型**：与群集，密度或最近邻分析确定的数据质量隔离的数据实例。
*   **信息理论模型**：异常值被检测为数据实例，增加了数据集的复杂性（最小代码长度）。
*   **高维异常值检测**：搜索子空间中异常值的方法可以在更高维度（维数的诅咒）中分解基于距离的度量。

Aggarwal评论说，异常模型的可解释性至关重要。对于特定数据实例为何或不是异常值的决策，需要上下文或基本原理。

在他对[数据挖掘和知识发现手册](http://www.amazon.com/dp/0387098224?tag=inspiredalgor-20)（会员链接）的贡献篇章中，Irad Ben-Gal提出了异常模型的分类，如单变量或多变量，参数和非参数。这是基于已知数据来构造方法的有用方法。例如：

*   您是否考虑过一个或多个属性中的异常值（单变量或多变量方法）？
*   您能否假设一个统计分布，从中采集或不采样（参数或非参数）？

## 入门

有许多方法和很多研究都用于异常检测。首先进行一些假设和设计实验，您可以清楚地观察这些假设对某些表现或准确度测量的影响。

我建议通过极值分析，接近方法和投影方法的步进过程。

### 极值分析

您无需了解高级统计方法即可查找，分析和过滤数据中的异常值。通过极值分析开始简单。

*   专注于单变量方法
*   使用散点图，直方图和框和胡须图可视化数据并查找极值
*   假设分布（高斯分布）并寻找与平均值相比超过2或3个标准差的值或从第一个或第三个四分位数开始的1.5倍的值
*   从训练数据集中筛选出异常值候选者并评估您的模型表现

### 接近方法

一旦探索了更简单的极值方法，请考虑转向基于邻近度的方法。

*   使用聚类方法识别数据中的自然聚类（例如k均值算法）
*   识别并标记聚类质心
*   识别与集群质心具有固定距离或百分比距离的数据实例
*   从训练数据集中筛选出异常值候选者并评估您的模型表现

### 投影方法

投影方法应用起来相对简单，并且可以快速突出显示无关的值。

*   使用投影方法将数据汇总为两个维度（例如PCA，SOM或Sammon的映射）
*   可视化映射并手动识别异常值
*   使用来自投影值或码本向量的邻近度量来识别异常值
*   从训练数据集中筛选出异常值候选者并评估您的模型表现

### 方法鲁棒于异常值

另一种策略是转向对异常值具有鲁棒性的模型。有强大的回归形式可以最小化中位数最小二乘误差而不是均值（所谓的稳健回归），但计算量更大。还有一些方法，如决策树，对异常值很强。

您可以检查一些对异常值有效的方法。如果存在显着的模型准确率优势，则可能有机会对训练数据中的异常值进行建模和过滤。

## 资源

有很多网页讨论异常值检测，但我建议阅读一本关于这个主题的好书，更具权威性。即使查看机器学习和数据挖掘的入门书籍也不会对您有用。有关统计学家对异常值的经典处理，请查看：

*   [Rousseeuw和Leroy于2003年发布的鲁棒回归和异常检测](http://www.amazon.com/dp/0471488550?tag=inspiredalgor-20)（会员链接）
*   [Barnett和Lewis于1994年出版的统计量](http://www.amazon.com/dp/0471930946?tag=inspiredalgor-20)（会员链接）中的异常值
*   [异常值的识别](http://www.amazon.com/dp/041221900X?tag=inspiredalgor-20)（会员链接）霍金斯出版于1980年的专着

有关数据挖掘社区对异常值的现代处理，请参阅：

*   [异常分析](http://www.amazon.com/dp/1461463955?tag=inspiredalgor-20)（会员链接）由Aggarwal于2013年出版
*   第7章，Irad Ben-Gal在[数据挖掘与知识发现手册](http://www.amazon.com/dp/0387098224?tag=inspiredalgor-20)（会员链接）中编辑，由Maimon和Rokach编辑，于2010年出版