在大模型训练中,异常值处理是数据预处理的关键环节。本文对比几种主流异常值识别算法的性能表现。
算法对比
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适合高维复杂数据。建议根据数据特征选择合适的算法。
特征工程考虑
异常值识别后,应评估是否删除、替换或保留这些样本,避免影响模型训练效果。

讨论