python进行异常值检测与处理

738 阅读3分钟

大家好,我是小寒~

原文链接

作为数据预处理的一部分,最重要的步骤之一是检测和处理异常值,因为它们会对统计分析和机器学习算法的训练过程产生负面影响,从而导致准确性降低。

什么是异常值

异常值是给定数据集中远离其余观察值的观察值。这意味着异常值远大于或小于集合中的其余值。

异常值的影响

在统计学中,有三种集中趋势的度量,分别是均值、中位数和众数。

当数据集不存在任何异常值时,均值是描述数据的准确度量

如果数据集中存在异常值,则使用中值。

如果存在异常值且大于总数的 1/2 或 更多数据是相同值时,则使用众数。

“均值” 是唯一受异常值影响的集中趋势的度量,异常值又会影响标准差。

例如:

考虑一个小数据集,样本 = [15, 101, 18, 7, 13, 16, 11, 21, 5, 15, 10, 9]。通过查看它,可以快速判断**“101”**是一个比其他值大得多的异常值。

从上图中,我们可以清楚地看出均值比中值受到的影响更大。

异常值检测

如果我们的数据集很小,我们可以通过查看数据集来检测异常值。但是如果我们有一个巨大的数据集,那么我们该如何识别异常值呢?这时就需要可视化和数学技术。

以下是一些常用的异常值检测技术。

  • 箱线图
  • Z-score
  • 分位数间距(IQR)
1、使用箱线图进行异常值检测:

箱线图的 python 代码如下所示。

原文链接

2、使用 Z-score 检测异常值

步骤:

  • 遍历所有数据点并使用公式 (X-mean)/std 计算 Z-score。
  • 定义阈值为 3,将 Z-score 绝对值大于阈值的数据点标记为异常值。

代码如下所示:

原文链接

3、使用分位数间距 (IQR) 检测异常值

位于 Q3 上方和 Q1 下方 1.5 倍 IQR 的数据点是异常值。

步骤:

  • 对数据集进行升序排列
  • 计算第一和第三四分位数 (Q1, Q3)
  • 计算 IQR = Q3 - Q1
  • 计算下限 = (Q1–1.5 * IQR),上限 = (Q3+1.5 * IQR)
  • 遍历数据集的值并检查那些低于下限和高于上限的值,并将它们标记为异常值。

原文链接

处理异常值

到目前为止,我们了解了如何检测异常值。下面我们来看一下如何对异常值进行处理。

常用的异常值处理方法如下。

  • 删除异常值
  • 基于分位数的剪枝
  • 平均数/中位数插补
1、删除异常值

在这种技术中,我们从数据集中删除异常值。虽然这不是一个好的做法。

原文链接

2、基于分位数的剪枝

在这种技术中,异常值的上限为第 90 个百分位值以上的某个值,或下限为第 10 个百分位值以下的值。

原文链接

小于第 10 个百分位数的数据点将替换为第 10 个百分位数的值,大于第 90 个百分位数的数据点将替换为第 90 个百分位数的值。

3、平均数/中位数插补

原文链接

处理异常值后可视化数据。