特征工程
问题
什么是特征工程?为什么说"特征工程决定了模型的上限"?常见的特征处理技术有哪些?
答案
特征工程(Feature Engineering) 是将原始数据转换为模型能更好学习的特征表示的过程。在深度学习之前,特征工程是机器学习项目中最耗时也最关键的环节。
"Coming up with features is difficult, time-consuming, requires expert knowledge. Applied machine learning is basically feature engineering." —— Andrew Ng
一、特征类型
| 类型 | 示例 | 处理方式 |
|---|---|---|
| 数值特征 | 年龄、收入、温度 | 缩放、分桶、交叉 |
| 类别特征 | 性别、城市、颜色 | One-Hot、Label、Target Encoding |
| 文本特征 | 评论、标题 | TF-IDF、词嵌入、LLM Embedding |
| 时间特征 | 日期、时间戳 | 提取年/月/日/星期、周期性编码 |
| 图像特征 | 像素矩阵 | CNN 提取、预训练模型特征 |
二、特征缩放
不同特征的量级差异很大(年龄 0100,收入 01000000),如果不做缩放,大数值特征会主导距离计算和梯度更新。
| 方法 | 公式 | 特点 |
|---|---|---|
| Min-Max 归一化 | 缩放到 [0, 1],对异常值敏感 | |
| Z-Score 标准化 | 均值 0、标准差 1,更鲁棒 | |
| RobustScaler | 基于中位数和四分位数,抗异常值 |
关键注意事项
特征缩放必须在训练集/测试集划分之后进行,且用训练集的统计量(均值、标准差)来转换测试集。否则就是数据泄露。
哪些模型需要特征缩放?
- 需要:线性回归、逻辑回归、SVM、KNN、神经网络
- 不需要:决策树、随机森林、XGBoost(基于分裂,不依赖距离)
三、类别特征编码
| 编码方式 | 说明 | 适用场景 |
|---|---|---|
| Label Encoding | 映射为整数 0, 1, 2... | 有序类别(如 低/中/高) |
| One-Hot Encoding | 每个类别一个 0/1 列 | 类别少(<20)的无序类别 |
| Target Encoding | 用该类别下目标均值替换 | 高基数类别(如城市 ID) |
| Frequency Encoding | 用类别出现频次替换 | 简单有效的替代方案 |
| Embedding | 学习低维稠密向量 | 深度学习中 |
One-Hot 的维度爆炸
如果类别有 10000 种取值,One-Hot 会生成 10000 列——维度灾难。此时应考虑 Target Encoding 或 Embedding。
四、特征选择
减少特征数量,保留最有用的特征:
| 方法 | 原理 | 示例 |
|---|---|---|
| 过滤法(Filter) | 基于统计量筛选 | 方差阈值、相关系数、卡方检验 |
| 包装法(Wrapper) | 用模型表现评估特征子集 | 前向选择、后向淘汰、RFE |
| 嵌入法(Embedded) | 模型训练自带特征选择 | L1 正则化、特征重要性(树模型) |
五、深度学习时代的变化
| 传统 ML | 深度学习 |
|---|---|
| 人工设计特征,耗时耗力 | 模型自动学习特征表示 |
| 特征工程是核心竞争力 | 数据质量和模型架构更重要 |
| 领域知识驱动 | 数据驱动 |
但特征工程并未消失
- 表格数据场景(金融、广告、推荐),XGBoost + 精心设计的特征仍然是最优方案
- LLM 应用中,Prompt 本身就是一种"特征工程"——如何描述问题、提供上下文就是在做特征设计
- RAG 系统中,文档分块策略、元数据提取本质上也是特征工程
常见面试问题
Q1: 什么是特征交叉?举例说明。
答案:
特征交叉是将两个或多个特征组合成新特征。例如预测点击率时:
- 原始特征:
性别=男、年龄=25 - 交叉特征:
性别_年龄=男_25
这能捕捉到特征间的交互效应——"25 岁男性"对某类广告的点击偏好不能简单从"男性"和"25 岁"单独推断。
在深度学习中,DCN(Deep & Cross Network)、DeepFM 等推荐模型通过网络结构自动学习特征交叉。
Q2: 如何处理缺失值?
答案:
| 策略 | 方法 | 适用场景 |
|---|---|---|
| 删除 | 删除含缺失值的行或列 | 缺失比例很小且随机 |
| 填充 | 均值/中位数/众数/固定值 | 简单场景 |
| 插值 | 线性插值、KNN 插值 | 时序数据、空间数据 |
| 标记 | 新增 is_missing 列 | 缺失本身可能携带信息 |
| 模型预测 | 用其他特征预测缺失值 | 缺失有规律可循 |
Q3: 如何处理异常值?
答案:
- 检测方法:Z-Score > 3、IQR(四分位距法)、箱线图
- 处理方式:
- 删除(确认是数据错误)
- 截断/缩尾(Winsorization,压缩到 [P1, P99])
- 取对数变换(减小量级差异)
- 使用对异常值鲁棒的模型(如 MAE 替代 MSE)