异常值检测与移除
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 反馈 — 无需本地设置。
此课程中的所有课时
- 异常值检测与移除
- 分类变量编码
- 特征缩放:归一化与标准化
- 构建预处理流程