0Pricing
Learn AI with Python · 课时

异常值检测与移除

Z 分数法、IQR 法、孤立森林概念,以及实践中的异常值处理

异常值检测与移除 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是异常值

异常值是一个与其余数据相距很远的值。它可能是真实的极端值、数据录入错误,也可能是传感器故障。异常值会扭曲均值、方差和模型,因此请有意识地检测它们。

Z 分数方法

z 分数用于衡量一个值距离均值有多少个标准差:z = (x - mean) / std。常见规则是将 |z| > 3 的点标记为异常值。

import numpy as np
data = np.array([10, 12, 11, 13, 12, 100])
z = (data - data.mean()) / data.std()
print(np.round(z, 2))

使用科学计算库中的 zscore 进行标记

scipy.stats.zscore可以计算数组的 z 分数。将其与阈值结合,即可构建用于标记异常值的布尔掩码。

from scipy import stats
z = np.abs(stats.zscore(data))
outliers = z > 3
print(data[outliers])

Z 分数的局限性

z 分数使用均值和标准差,而这两个统计量本身也会受到异常值的拉动。在严重偏斜的数据或包含极端值的数据中,z 分数可能无法检测出所有异常值。IQR 方法更加稳健。

IQR 方法

四分位距 IQR = Q3 - Q1 覆盖中间的 50%。它根据四分位数计算,而异常值几乎不会改变四分位数,因此这种方法具有稳健性。

q1 = np.percentile(data, 25)
q3 = np.percentile(data, 75)
iqr = q3 - q1
print(q1, q3, iqr)

IQR 围栏

图基围栏定义了边界:下界 = Q1 - 1.5*IQR,上界 = Q3 + 1.5*IQR。超出边界的任何值都会被标记。箱线图的须线也使用同一规则绘制。

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
mask = (data < lower) | (data > upper)
print(data[mask])   # outliers

箱线图可视化

boxplot可以将 IQR 规则可视化:箱体从 Q1 延伸到 Q3,中间的线表示中位数,须线延伸到围栏,超出围栏的点则以单独的异常值圆点绘制。

# import matplotlib.pyplot as plt
# plt.boxplot(data)
# plt.show()

移除异常值

标记异常值后,您可以 DROP 异常值所在的行。请谨慎执行,因为移除真实数据可能会造成结果偏差。请记录移除了哪些数据,以及移除的原因。

clean = data[~mask]
print(clean)   # outlier removed

使用 np.clip 进行缩尾处理

您也可以不删除数据,而是使用 np.clip 将极端值限制在选定的边界内,进行缩尾处理。这样既能保留行数,又能减弱极端值的影响。

capped = np.clip(data, lower, upper)
print(capped)   # extreme value pulled to the upper fence

按百分位数进行截断

一种常见的缩尾处理方式是将数据截断到第 1 百分位数和第 99 百分位数,只对最极端的 2% 数值进行对称处理。

lo, hi = np.percentile(data, [1, 99])
print(np.clip(data, lo, hi))

删除还是封顶处理

请根据具体情境进行选择:对明显错误(不可能出现的值)执行 REMOVE;对希望保留的真实但极端的值执行 CAP;当异常值本身就是信号(例如欺诈检测)时,有时应 KEEP。请记录这项决定。

快速检查

请测试您对异常值的理解。

回顾

异常值处理工具箱:

  • z 分数:通过 scipy.stats.zscore 标记 |z| > 3 的值(容易受异常值影响)
  • IQR 围栏:从 Q1-1.5*IQR 到 Q3+1.5*IQR(稳健,也是箱线图的基础)
  • 移除真实错误;使用 np.clip进行缩尾处理,限制极端值
  • 请始终记录移除或封顶数值的原因

常见问题解答

「异常值检测与移除」课时是免费的吗?

是的 — 「异常值检测与移除」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「异常值检测与移除」这节课中我会学到什么?

Z 分数法、IQR 法、孤立森林概念,以及实践中的异常值处理 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「异常值检测与移除」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 异常值检测与移除
  2. 分类变量编码
  3. 特征缩放:归一化与标准化
  4. 构建预处理流程
← 返回 Learn AI with Python