profileName: youpingfang postId: 252 postType: post categories:

- 6

简介

数据预处理将原始数据转化为适合建模的格式,核心步骤包括:清洗(缺失值、异常值、重复值)、变换(无量纲化、特征编码)、降维(特征选择与提取)以及划分(训练/测试集)。预处理质量直接影响模型性能上限。


一、核心理念

Garbage In, Garbage Out(垃圾进,垃圾出)——数据质量决定模型天花板。预处理通常占数据科学家约 80% 的工作时间。


二、数据清洗

缺失值

  • 删除:缺失占比小且样本充足时
  • 填充:均值/中位数/众数,或用 KNN、插值法预测填充

重复值

直接删除完全重复记录(需结合业务判断,如时间序列中的重复可能有意义)

异常值

  • 明显偏离分布的值(如身高 200 cm 记录为 200 m)
  • 处理:截尾(Winsorization)、删除、替换为边界值(注意:异常值有时携带重要信息,如欺诈检测)

三、数据变换

无量纲化

避免不同量纲(如"装修费用" vs "房间数")对模型产生偏差:

  • 归一化(Min-Max Scaling):将数据映射到 $[0,1]$ $$\text{X}{new} = \frac{X - X{min}}{X{max} - X{min}}$$ 适用于有界分布、无极端值的场景。

  • 标准化(Z-score):转为均值为 $0$、标准差为 $1$ 的分布 $$\text{X}_{new} = \frac{X - \mu}{\sigma}$$ 适用于存在离群点或算法假设正态分布的场景(如 SVM、PCA)。(补充:标准化鲁棒性更强,归一化对异常值更敏感。)

特征编码

模型仅接受数值输入,非数值特征需转换:

  • 标签编码:将类别映射为整数(红=1, 黄=2, 蓝=3)—— ⚠️ 会引入假性大小关系,对线性模型有误导;对树模型影响较小
  • 独热编码:为每类创建独立的二元特征,地位平等(补充:类别过多时易导致维度灾难,可用哈希编码或目标编码替代)

四、数据划分

  • 常用比例:训练集:测试集 = 70:30 或 80:20,必要时增加验证集
  • 注意:需随机分层抽样以保持类别分布一致;时间序列数据须按时间顺序划分,避免未来信息泄露

五、面试题与参考答案

Q1:为何先处理缺失值和异常值,后做归一化/标准化?
A1: 缺失值和异常值会严重干扰均值和标准差的计算。若先缩放,脏数据会导致变换结果不可靠、污染正常数据。正确流程是:先清洗,后变换。

Q2:归一化与标准化如何选择?
A2: 归一化适合有明确上下界、无异常值且算法需固定输入范围的场景(如神经网络);标准化适合数据含异常值、或算法假设正态分布的场景(如PCA、SVM)。标准化鲁棒性更优。

Q3:独热编码与标签编码分别适用哪些场景?
A3: 独热编码用于无序类别(如颜色、国家),避免假性顺序;标签编码用于有序类别(如等级:小<中<大),或树模型(不受数值大小影响)。

Q4:训练集和测试集的缺失值如何填充?
A4: 必须仅用训练集的统计量(均值、中位数等) 填充训练集和测试集,不可使用测试集信息,否则造成数据泄露。

Q5:什么是数据泄露?如何避免?
A5: 数据泄露指模型在训练时"无意"接触测试集信息,导致评估结果虚高。避免方法:先划分再预处理(缩放、编码参数均从训练集计算);时间序列按时间顺序划分;目标变量不参与特征选择。


补充说明:原文中"Jin Garbage jab"为转录错误,正确表述为 "Garbage in, garbage out"