使用 Python 检测和删除异常值

2025年1月5日 | 阅读 3 分钟

引言

在数据分析和机器学习领域,异常值的存在会严重影响模型的准确性和可靠性。异常值是指与大多数数据显著不同的数据点,它们常常会歪曲统计分析结果,导致误导性的结论。检测和删除异常值是数据预处理流程中的关键步骤。在本文中,我们将探讨使用 Python 识别和消除异常值的各种技术。

理解异常值

异常值可以表现为各种形式,例如极端值、数据收集错误或异常情况。这些偏差会扭曲数据集的统计特性,影响均值和标准差等度量。检测异常值对于确保分析和模型的完整性以及维护数据的整体质量至关重要。

检测异常值

Python 提供了多种库和技术来检测异常值。让我们探讨一些流行的方法:

描述性统计

首先,计算基本的描述性统计信息,例如均值、中位数和标准差。

识别落在某个范围之外的数据点(例如,超出四分位距 1.5 倍的数据点)。

箱线图

利用箱线图可视化数据的分布并识别潜在的异常值。

Z 分数

计算 Z 分数,它衡量数据点与均值的标准差数。

删除异常值

一旦识别出异常值,下一步就是决定是删除还是转换它们。以下是一些常见技术:

修剪

删除被视为异常值的一定百分比的数据点。

Winsorizing(缩尾处理)

通过将极端值替换为指定范围内的值来截断它们。

插补

用插补值(如数据集的均值或中位数)替换异常值。

转换

对数据应用数学变换,例如对数或平方根,以减小异常值的影响。

完整的代码实现

输出

Original Data:
[ 1.76405235  0.40015721  0.97873798 ... 10.91840364  9.63598556 11.75623524]

Indices of Outliers:
[800 801 802 ... 997 998 999]

Data After Removing Outliers using Winsorizing:
[ 1.76405235  0.40015721  0.97873798 ...  5.6693589   5.6693589   5.6693589 ]

说明

  • “原始数据”是一个包含生成样本数据的 NumPy 数组,该数据包含异常值。
  • “使用 Z 分数法检测到的异常值索引”数组包含使用 Z 分数法检测到的异常值的索引。
  • “使用 Winsorizing 删除异常值后的数据”显示了应用 Winsorizing(将极端值替换为指定范围内的值)后数据的数值。在此示例中,极端值已被替换为指定范围内的值。

结论

检测和删除异常值是数据预处理流程中的关键步骤,可确保分析和机器学习模型基于可靠准确的信息进行构建。Python 提供了丰富的库和技术生态系统来进行异常值检测,使数据科学家和分析师能够为他们特定的用例选择最合适的方法。通过理解和实现这些方法,可以增强数据驱动的见解和模型的鲁棒性和可靠性,最终带来更明智的决策。