特征选择有哪些方法?Filter、Wrapper、Embedded 怎么区分?
简化版
特征选择是从原始特征里挑出对目标最有用的子集,目的是降维、去噪、防过拟合、提速、增强可解释性。三大类方法:Filter(过滤法)——按统计指标(方差、相关系数、卡方、互信息)打分排序,和模型无关、快、但忽略特征间组合;Wrapper(包裹法)——把模型当黑盒,用「加减特征看模型效果」搜索最优子集(如 RFE、前向/后向),效果好但极慢、易过拟合;Embedded(嵌入法)——特征选择嵌在模型训练里(L1 正则让系数变 0、树模型的特征重要性),效率和效果的平衡,工业最常用。
详细版
三类方法对比:
| 类别 | 代表方法 | 是否用模型 | 速度 | 是否考虑特征组合 | 过拟合风险 |
|---|---|---|---|---|---|
| Filter 过滤 | 方差、相关系数、卡方、互信息、IV | 否 | 快 | 否(单特征打分) | 低 |
| Wrapper 包裹 | RFE、前向/后向选择、遍历搜索 | 是(反复训练) | 慢 | 是 | 高 |
| Embedded 嵌入 | L1(Lasso)、树的特征重要性、正则 | 是(训练即选择) | 中 | 部分 | 中 |
为什么要做特征选择:
- 对抗维度灾难 / 过拟合:无关特征多会让模型学到噪声。
- 提速降本:特征少,训练和推理都快、存储省。
- 增强可解释性:留下真正重要的特征,模型更好理解。
- 去冗余去噪:删掉重复、无关、纯噪声的特征。
要点: Filter 快但盲(不看特征组合、不看模型);Wrapper 准但贵;Embedded 训练顺带完成,最实用。
完整版教学
一、为什么要专门做特征选择——不是特征越多越好
新手常以为「特征越多信息越多、模型越准」,其实相反:
- 维度灾难 + 过拟合:无关或噪声特征越多,模型越容易把噪声当规律,泛化变差,尤其样本不够多时。
- 训练/推理变慢、成本变高:每多一维都要计算和存储。
- 可解释性变差:几千个特征没人说得清模型在看什么。
- 共线性 / 冗余:重复表达同一信息的特征互相干扰。
特征选择就是从原始特征集里挑一个更小、更有用的子集,在不明显损失(甚至提升)效果的前提下,换来更快、更稳、更可解释的模型。注意它和降维(PCA)不同:特征选择是保留原始特征的一个子集(可解释),降维是把特征组合成新特征(不可解释)。
二、Filter 过滤法:先用统计指标筛一遍
思路:完全不依赖模型,只用统计指标给每个特征打分,排序后取 Top-K 或卡阈值。常见指标:
- 方差过滤:方差接近 0 的特征(几乎所有样本取值一样)没区分度,直接删。
- 相关系数(Pearson):衡量特征与目标的线性相关,适合连续特征、连续目标。
- 卡方检验(Chi-square):衡量类别特征与类别目标的相关性。
- 互信息(Mutual Information):能捕捉非线性依赖,比相关系数更通用。
- IV / WOE:风控里衡量特征对二分类目标的区分能力。
优点:快、和模型解耦(选完可用于任何模型)、不易过拟合。 缺点:
- 只看单特征与目标的关系,忽略特征间的组合效应——两个单独看都弱、组合起来很强的特征会被误删;两个都强但高度冗余的特征会被同时保留。
- 打分标准和最终模型无关,Filter 认为好的特征,模型未必用得好。
所以 Filter 常作为第一道粗筛(先砍掉明显没用的),再交给后面更精的方法。
三、Wrapper 包裹法:让模型来评判特征子集
思路:把模型当成黑盒评估器,直接用「某个特征子集训练出的模型效果(如交叉验证得分)」来评价这个子集好不好,通过搜索找最优子集。
- 前向选择:从空集开始,每轮加入「使效果提升最大」的一个特征,直到不再提升。
- 后向消除:从全集开始,每轮删掉「删了效果损失最小」的特征。
- RFE(递归特征消除):反复训练模型、按重要性删掉最差的特征、再训练,逐步逼近目标特征数。
优点:直接以「模型效果」为目标,能考虑特征间的组合/交互,选出的子集对该模型往往最优。 缺点:
- 极慢:要反复训练模型很多次,特征多时组合爆炸。
- 易过拟合:反复用同一批数据挑特征,可能过拟合到验证集,要用嵌套交叉验证防。
- 和特定模型绑定:为模型 A 选的特征换到模型 B 未必好。
四、Embedded 嵌入法:训练模型时顺便完成选择
思路:把特征选择嵌进模型训练过程,训练完成的同时就得到了特征重要性/取舍。两大代表:
- L1 正则(Lasso):在损失里加
λΣ|wᵢ|,会把不重要特征的系数直接压成 0,非零系数对应的就是被选中的特征。这是「训练即选择」的经典例子(原理见 L1/L2 正则专题)。 - 树模型的特征重要性:随机森林、GBDT、XGBoost 训练后能给出每个特征的重要性(按分裂带来的纯度增益 / 使用次数),据此筛选。
优点:效率和效果兼顾——只训练一次(或少数几次)就完成选择,比 Wrapper 快得多,又比 Filter 更贴合模型、能部分考虑特征交互。工业界最常用。 缺点:和具体模型(及其正则强度)绑定;树的重要性对高基数特征有偏好(易高估),Lasso 在特征高度相关时会随机只留一个。
五、三类方法怎么配合用——实战流程
它们不是互斥的,实战常串起来用:
① Filter 粗筛:先删掉零方差、与目标几乎无关、明显冗余的特征(快、省后续算力)
↓
② Embedded 精选:用 Lasso / 树重要性 在剩余特征上做主力筛选
↓
③ Wrapper 微调(可选):特征已不多时,用 RFE 等在小范围里搜最优子集
↓
④ 结合业务:保留业务上确知重要、可解释的特征,剔除会造成泄露的特征
六、几个高频追问
- 特征选择 vs 降维(PCA)区别? 选择是保留原始特征子集(可解释、可回溯业务含义);PCA 是线性组合出新特征(不可解释,但能压缩相关信息)。要可解释选前者,纯压缩可用后者。
- 相关系数高的两个特征删哪个? 它们冗余,保留和目标更相关、或业务更可解释的那个,另一个删掉降共线性。
- 特征选择要不要放进交叉验证? 必须放进 Pipeline,在每一折的训练部分内部做选择,否则「用全量数据选特征」会造成数据泄露、评估虚高。
- Filter 会不会误删有用特征? 会——它看不到特征组合,所以别只靠 Filter,配合 Embedded 更稳。
七、用数字和工程流程校验理解
从 1000 个候选特征中先用 Filter 降到 100 个,再用 L1 或树模型 Embedded 方法缩到 30 个,最后对少量候选做 Wrapper 搜索,比直接枚举 2^1000 个子集现实得多。选择过程必须嵌入交叉验证,否则会高估效果。
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| Filter | 统计量独立于或弱依赖模型 | 快,但可能漏掉交互 |
| Wrapper | 反复训练评估特征子集 | 针对模型但计算昂贵 |
| Embedded | 训练过程中完成选择 | 效率与模型偏好折中 |
把面试题落到可执行流程:
remove leakage/constant/duplicate
-> filter coarse screening
-> embedded selection
-> nested CV evaluate final pipeline
先用全量数据选特征再交叉验证会把验证折信息泄露进选择结果;特征选择本身也必须在每个训练折内完成。
八、常见误区与追问
- 误区:相关系数低的特征一定无用。 它可能通过非线性关系或与其他特征交互产生预测价值。
- 误区:树的 feature importance 高就代表因果重要。 重要性只描述模型预测贡献,还可能受高基数和相关特征偏置影响。
- 追问:RFE 属于哪类方法? 它反复训练模型并递归删除特征,属于 Wrapper。
- 追问:L1 为什么属于 Embedded? 选择效果在模型目标优化过程中由稀疏系数直接产生。
- 追问:强相关特征怎么处理? 可按稳定性、成本和业务含义保留代表项,并检查选择在不同折中的一致性。
九、加强记忆
记忆时抓住这条主线:特征选择目的是降维去噪、防过拟合、提速、增可解释,做法分三类,抓住「要不要用模型、慢不慢、看不看特征组合」就能区分:Filter 过滤——纯统计指标(方差/相关/卡方/互信息)打分,不用模型、最快、但只看单特征忽略组合,当粗筛;Wrapper 包裹——把模型当黑盒,靠加减特征搜索最优子集(RFE、前后向),看组合、效果好但极慢易过拟合;Embedded 嵌入——训练即选择(L1 让系数变 0、树的特征重要性),效率效果平衡、工业最常用。实战是「Filter 粗筛 → Embedded 精选 →(可选)Wrapper 微调 → 结合业务」,且选择必须放进交叉验证的每一折防泄露。别忘了它和 PCA 降维的区别:选择保留原始特征(可解释),降维组合出新特征(不可解释)。