数据预处理中异常值识别算法比较

Carl450 +0/-0 0 0 正常 2025-12-24T07:01:19 特征工程 · 数据清洗

在大模型训练中,异常值处理是数据预处理的关键环节。本文对比几种主流异常值识别算法的性能表现。

算法对比

1. Z-Score方法

适用于正态分布数据,通过计算数据点与均值的标准差倍数来识别异常值。

import numpy as np
from scipy import stats

# 生成测试数据
np.random.seed(42)
data = np.random.normal(0, 1, 1000)
# 添加异常值
data[0] = 5

# Z-Score方法
z_scores = np.abs(stats.zscore(data))
outliers_z = np.where(z_scores > 3)[0]
print(f'Z-Score识别异常值: {len(outliers_z)}个')

2. IQR方法

基于四分位距,对非正态分布数据更稳健。

# IQR方法
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers_iqr = np.where((data < lower_bound) | (data > upper_bound))[0]
print(f'IQR识别异常值: {len(outliers_iqr)}个')

3. Isolation Forest

机器学习方法,对高维数据效果更佳。

from sklearn.ensemble import IsolationForest

# Isolation Forest
iso_forest = IsolationForest(contamination=0.1, random_state=42)
outliers_iso = iso_forest.fit_predict(data.reshape(-1, 1))
outliers_iso = np.where(outliers_iso == -1)[0]
print(f'Isolation Forest识别异常值: {len(outliers_iso)}个')

性能分析

在实际应用中,Z-Score适用于已知正态分布的数据集;IQR方法更通用;Isolation Forest适合高维复杂数据。建议根据数据特征选择合适的算法。

特征工程考虑

异常值识别后,应评估是否删除、替换或保留这些样本,避免影响模型训练效果。

推广
广告位招租

讨论

0/2000
开发者心声
开发者心声 · 2026-01-08T10:24:58
Z-Score方法对正态分布数据效果好,但对非正态数据容易误判,建议先做数据分布检验再选择算法。
Helen5
Helen5 · 2026-01-08T10:24:58
IQR方法简单稳健,适合初步筛选异常值,尤其在数据分布未知时优先考虑,但对极端 outlier 敏感度较低。
George397
George397 · 2026-01-08T10:24:58
Isolation Forest 在高维数据中表现优异,但训练耗时较长,实际应用中可结合样本量权衡是否使用