跳到主要内容

数据预处理

问题

数据预处理包含哪些步骤?缺失值、异常值如何处理?数据增强有哪些常用技术?

答案

数据预处理是 ML Pipeline 的第一步,也是直接决定模型上限的关键环节——垃圾进,垃圾出(Garbage In, Garbage Out)

一、数据预处理全流程

二、数据探索(EDA)

在动手处理之前,先了解数据的基本情况:

步骤内容
数据形状多少行、多少列
数据类型数值/类别/文本/时间
缺失值统计每列缺失比例
分布分析直方图、箱线图
相关性分析特征间的相关矩阵
类别分布标签是否均衡

三、缺失值处理

策略方法适用场景
删除行丢弃含缺失值的样本缺失比例 < 5% 且随机缺失
删除列丢弃缺失率极高的特征缺失比例 > 50%
均值/中位数用该列的统计量填充数值特征,分布近似正态
众数用出现最多的值填充类别特征
前向/后向填充用前一个/后一个有效值时序数据
插值线性、多项式、样条插值连续型时序数据
KNN 插值用 K 个最近邻的值特征间有相关性
标记缺失新增 is_null 布尔列缺失本身有信息量
模型预测用其他特征训练模型预测缺失有规律
注意

填充统计量必须只用训练集计算,然后应用到验证集和测试集。否则就是数据泄露。

四、异常值处理

检测方法

方法原理适用场景
Z-Scorez>3\|z\| > 3 视为异常近正态分布
IQR 法<Q11.5×IQR < Q1 - 1.5 \times IQR>Q3+1.5×IQR > Q3 + 1.5 \times IQR通用
箱线图可视化检测视觉探索
孤立森林基于树模型的异常检测高维数据

处理方式

方式说明
删除确认是数据录入错误
截断(Winsorization)将极端值压缩到 [P1, P99]
对数变换log(x+1)\log(x+1),压缩右偏分布
分桶将连续值离散化,极端值归入边界桶
保留如果异常值是真实的(如高收入用户),不应删除

五、数据增强

当训练数据不足时,通过变换生成更多样本:

图像数据增强

方法说明
水平/垂直翻转镜像变换
旋转随机角度旋转
裁剪随机区域裁剪
颜色抖动随机调整亮度、对比度、饱和度
Mixup两张图片线性混合
CutMix剪切一块区域替换

文本数据增强

方法说明
同义词替换随机替换同义词
回译(Back Translation)翻译到其他语言再翻回来
随机插入/删除/交换随机操作词语
LLM 生成用 LLM 改写或生成变体

表格数据增强

方法说明
SMOTE在少数类样本间插值(过采样)
噪声注入给数值特征加小幅高斯噪声
特征变换随机组合特征

六、数据集划分

划分方式适用场景注意事项
随机划分(70/15/15)通用,i.i.d 数据使用分层抽样保持类别比例
时间划分时序数据未来数据不能出现在训练集中
组划分同一用户/同一设备的数据同组数据必须在同一个 split 中
交叉验证数据量较小K-Fold,更可靠的评估

常见面试问题

Q1: 数据清洗中最常见的问题是什么?

答案

  1. 重复数据:同一条记录被多次录入
  2. 缺失值:某些字段为空
  3. 格式不一致:日期格式混乱、大小写不统一
  4. 异常值:数据录入错误或极端值
  5. 类型错误:数值存为字符串
  6. 标签噪音:标注错误

Q2: SMOTE 的原理是什么?有什么局限?

答案SMOTE(Synthetic Minority Over-sampling Technique) 通过在少数类样本之间插值来生成新样本:

  1. 对每个少数类样本,找到其 K 个最近邻(同为少数类)
  2. 随机选一个近邻,在两点连线上随机取一点作为新样本

局限

  • 可能在两个不同类别的重叠区域生成有噪声的样本
  • 高维数据中"最近邻"可能不准确(维度灾难)
  • 不考虑特征间的相关性

Q3: 为什么要做特征缩放?什么时候不需要?

答案需要缩放:基于距离(KNN、SVM)或梯度(线性回归、神经网络)的模型——不同量级的特征会导致梯度更新不均匀或距离计算被大数值特征主导。

不需要缩放:基于树的模型(决策树、随机森林、XGBoost)——它们基于特征值的排序做分裂,不依赖绝对值。


相关链接