2. 特征类型与数据预处理:数值型、类别型、文本型特征的特点;缺失值处理、异常值处理、数据标准化与归一化

在模型训练之前,对原始特征进行系统性的预处理是决定模型性能上限的关键步骤。不同类型的特征(数值型、类别型、文本型)具有截然不同的统计特性和数学含义,需要采用差异化的预处理策略。同时,缺失值、异常值以及量纲差异是数据预处理中必须解决的三大核心问题。

2.1 特征类型及其核心特点

理解特征的数据类型是选择预处理方法的前提。下表总结了三种主要特征类型的定义、数学含义及典型处理方法。

特征类型 定义与数学含义 典型例子 核心预处理方法
数值型 可进行四则运算的连续或离散数值,具有大小和距离意义。 年龄、收入、温度、商品价格 标准化、归一化、异常值截尾、对数变换
类别型 表示有限个离散类别或标签,数值大小无实际意义。 性别、城市、职业、产品类别 独热编码、标签编码、目标编码
文本型 非结构化自然语言文本,需转化为数值向量。 评论、邮件、文档摘要、日志 TF-IDF、词嵌入、词袋模型
实践提示: 在探索性数据分析(EDA)阶段,务必先确认每个特征的 dtype。常见陷阱是:整数编码的类别特征(如 1=男, 2=女)被误判为数值型,导致模型学习到错误的“大小关系”。

2.2 缺失值处理策略

缺失值是现实数据中最常见的问题。处理策略的选择取决于缺失机制(MCAR、MAR、MNAR)和缺失率。

  • 删除法: 适用于缺失率极低(<5%)且随机缺失的情况。包括删除缺失样本(行删除)或删除缺失率过高的特征(列删除)。
  • 统计量填充: 数值型特征常用均值或中位数填充;类别型特征常用众数填充。中位数对异常值更鲁棒。
  • 模型预测填充: 将待填充特征作为目标变量,利用其他完整特征构建回归或分类模型进行预测填充(如 KNN、随机森林)。
  • 标记法: 对于树模型,可直接将缺失值作为一个特殊分支处理,或新增一个“是否缺失”的二元指示特征。
避坑指南: 使用均值/中位数填充时,必须在训练集上计算统计量,然后应用到验证集和测试集,避免数据泄露。切勿使用全局数据计算填充值。

2.3 异常值检测与处理

异常值会严重扭曲统计量(如均值、方差),并对线性模型、KNN、SVM 等模型产生显著负面影响。树模型对异常值相对不敏感。

常用的异常值检测方法包括:

  • Z-Score 法: 假设数据服从正态分布,将 |Z| > 3 的样本视为异常值。
  • IQR 四分位距法: 定义下界为 Q1 - 1.5×IQR,上界为 Q3 + 1.5×IQR,超出此范围即为异常值。该方法不依赖正态分布假设。
  • 孤立森林: 基于集成学习的无监督异常检测算法,适用于高维数据。

处理方式通常包括:截尾(Winsorization,将异常值替换为边界值)、删除或视为缺失值进行填充。

异常值检测与处理流程 原始特征数据 Z-Score 法 (|Z|>3) IQR 四分位距法 孤立森林 (Isolation Forest) 截尾 (Winsorization) 直接删除异常样本 视为缺失值并填充 清洗后的特征数据

2.4 数据标准化与归一化

标准化与归一化是消除特征量纲影响的核心手段,尤其对基于距离(KNN、K-Means)和梯度下降(线性回归、神经网络)的模型至关重要。

  • Z-Score 标准化: 将数据转换为均值为 0、标准差为 1 的分布。公式为 x' = (x - μ) / σ。适用于数据近似正态分布或存在异常值的情况。
  • Min-Max 归一化: 将数据线性缩放到 [0, 1] 区间。公式为 x' = (x - min) / (max - min)。对异常值敏感,适用于分布范围已知且无极端值的情况。
  • RobustScaler: 使用中位数和 IQR 进行缩放,对异常值具有鲁棒性。公式为 x' = (x - median) / IQR。
选择建议:
  • 如果后续使用 PCA、SVM、线性回归、神经网络 → 优先使用 Z-Score 标准化。
  • 如果数据分布未知且存在较多异常值 → 优先使用 RobustScaler。
  • 如果需要对输出范围有硬性约束(如图像像素值 [0,1])→ 使用 Min-Max 归一化。
标准化与归一化方法对比 原始数据分布 范围: [100, 900] 均值: 500, 标准差: 200 存在异常值: 1500 Z-Score 标准化 均值=0, 标准差=1 异常值仍远离中心 保留分布形状 Min-Max 归一化 范围: [0, 1] 异常值压缩区间 正常值被过度挤压 注意:Min-Max 对异常值敏感,会压缩正常数据的区分度;Z-Score 和 RobustScaler 更稳健。

2.5 类别型与文本型特征的预处理要点

类别型特征的预处理核心在于将离散标签转换为数值形式,同时避免引入虚假的序关系。

  • 独热编码: 适用于无序类别(如颜色、城市)。每个类别创建一个二元特征。当类别数过多时会导致维度灾难。
  • 标签编码: 适用于有序类别(如教育程度:小学→1,中学→2,大学→3)。树模型可直接使用。
  • 目标编码: 用目标变量的均值或条件概率替换类别,需配合交叉验证防止过拟合。

文本型特征的预处理需要将非结构化文本转化为结构化数值向量。

  • TF-IDF: 衡量词语在文档中的重要性,兼顾词频和逆文档频率。适用于短文本分类、关键词提取。
  • 词嵌入: 如 Word2Vec、GloVe,将词语映射到低维稠密向量空间,能捕捉语义相似性。
  • 预训练模型: 如 BERT、Sentence-BERT,生成上下文相关的文本向量表示,效果最优但计算成本高。
预处理流水线示例(Python + scikit-learn):
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer

# 定义不同特征的预处理策略
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), ['age', 'income']),
        ('cat', OneHotEncoder(), ['city', 'gender']),
        ('text', 'passthrough', ['review_text'])  # 文本特征后续单独处理
    ])

# 缺失值填充
imputer = SimpleImputer(strategy='median')