特征构建造了一堆料,降维把料熬成了高汤,但桌上还是会剩下冗余、不相关、甚至互相打架的料。特征选择就是最后一道把关:只留好料——在不造新维度的前提下,从原始特征里挑出最有代表性的子集。
Table of contents
Open Table of contents
一句话理解
好的料桌应满足两条:
- 高类别相关——每样料都和「这道菜好不好吃」(目标变量)强相关;
- 低特征间冗余——料和料之间别重复(少放两样味道一样的),避免共线性。
挑料有三种流派:看体检报告(过滤)、真炒一遍尝(包装)、边炒边挑(嵌入)——一个比一个准,也一个比一个贵。
| 流派 | 思想 | 优点 | 缺点 |
|---|---|---|---|
| 过滤 Filter | 独立于模型,只看特征自身统计特性 | 通用、快,适合大规模 | 忽略特征间依赖,可能漏掉组合价值 |
| 包装 Wrapper | 拿最终模型给特征子集打分 | 能为特定模型找到最优子集 | 计算量巨大(每个子集训一个模型) |
| 嵌入 Embedded | 把选择集成进模型训练 | 效率高于包装、考虑特征交互 | 依赖特定模型的机制 |
1. 过滤法:先看料的「体检报告」
过滤法在训练前就动手,只看特征自身的分散性、相关性、信息量打分筛选,和用什么模型无关。
1.1 分散性:方差选择法
方差太小的特征(所有样本几乎同值)不提供信息,直接砍。布尔变量方差 Var[X] = p(1−p),p 是取 1 的概率——p 接近 0 或 1 的二值特征基本没用。
1.2 关联度:皮尔逊 & VIF
- 皮尔逊相关系数:衡量特征与目标的线性相关,
r = Cov(X,Y) / √(Var(X)·Var(Y)) ∈ [−1,1]。局限:只管线性。 - VIF(方差膨胀因子):衡量特征之间的多重共线性,
VIFₖ = 1 / (1 − Rₖ²)。VIF > 10 通常认为严重共线,该剔。这直接服务于「低特征间冗余」那条原则。
1.3 信息度量:互信息 & MIC
- 互信息 MI:度量两变量相互依赖,能抓非线性关系;
X,Y独立时 MI = 0。关系I(X;Y) = H(X) − H(X|Y)。 - 最大信息系数 MIC:克服 MI 对分箱的依赖,度量各种函数关系的强度,取值
[0,1],普适又公平。
1.4 统计检验与回归
| 方法 | 场景 | 直觉 |
|---|---|---|
| 卡方检验 χ² | 定性自变量 × 定性因变量 | 比较观察频数与期望频数的差距,越大越相关 |
| Fisher Score | 分类 | 类间距离大、类内距离小的特征得分高 |
| F 检验 / F 回归 | 特征 × 连续目标 | 用线性回归测单特征的解释力 |
过滤法的通病:只看单个特征和目标的关系,看不到特征之间的配合。两个各自平庸、但组合起来很强的特征,会被它双双误杀。
2. 包装法:真炒一遍尝味道
包装法把最终模型当尺子:拿一个特征子集去训模型,用验证集表现打分,好就留、差就换。准,但每换一个子集就得重训一次,贵。
| 方法 | 做法 |
|---|---|
| 前向选择 | 从空集开始,每次加入能让模型提升最大的特征,直到不再提升 |
| 后向剔除 | 从全集开始,每次剔除影响最小的特征,直到性能开始下降 |
| 递归特征消除 RFE | 反复训模型 → 按权重排序 → 剔除最不重要的 → 重复,直到剩下指定数量 |
RFE 的稳定性取决于底层模型:用 Ridge 比用普通线性回归更稳(正则化让权重不那么抖)。
3. 嵌入法:边炒边挑
嵌入法把选择融进训练过程——模型一边学,一边通过自身机制(正则项、特征重要性)决定谁去谁留。效率高于包装,又比过滤多考虑了特征交互。
3.1 正则化:L1 会「杀特征」,L2 不会
Loss = Loss_原始 + λ · P(w)
| 正则 | 惩罚项 P(w) | 选择效果 | 稳定性 |
|---|---|---|---|
| L1 (Lasso) | `Σ | wᵢ | ` |
| L2 (Ridge) | Σwᵢ² | 让关联特征系数趋于相等、不置 0 | 相对稳定,利于理解 |
一句话记:L1 做减法(杀特征),L2 做收缩(都留但压小)。想要稀疏、自动选特征就上 L1。
3.2 树模型的特征重要性
树模型(随机森林、GBDT、XGBoost)天生能给特征打重要性分:
- 平均不纯度减少 (MDI):特征在分裂时平均减少了多少不纯度(Gini / 信息增益);
- 平均精确率减少 (MDA):把某特征的取值打乱后,模型精度下降多少——降得越多越重要。
3.3 其他:最大熵 & 深度学习
- 最大熵模型 (MaxEnt):在满足所有已知约束下,选熵最大(最不武断)的模型,约束由特征函数引入。
- 深度学习:SAE 等网络能从大数据里自动学习特征表示,本身就是一种高效的特征选择/抽取。
4. 终点:自动化特征学习
传统特征工程的痛,三个字概括:慢、贵、难迁移。
- 人力依赖:好特征高度依赖领域专家;
- 效率低:从原始数据挖有用特征既耗时又费力;
- 可推广性差:为某任务设计的特征换个领域就废了。
于是方向很自然:让机器自己学特征(Feature Learning)。核心思想是从原始数据里自动发现、抽取更抽象、更有区分度的表示,让特征工程更快、有效、可推广——尤其是对图像、文本、序列这类高维非结构化数据。这也是深度学习端到端之所以强大的原因:它把「构建 + 选择 + 提取」揉进了模型本身。
但别误会——自动化不等于「不用管特征了」。工业界现实是手工业务特征 + 自动表示学习混用:懂业务的人切的那几刀(衍生变量),机器目前仍然想不到。
TL;DR — 三句话
- 两条原则:高类别相关(和目标强相关)+ 低特征间冗余(别重复、VIF>10 要剔)。
- 三大流派:过滤(看体检报告,快但不管搭配)、包装(真炒一遍尝,准但贵)、嵌入(边炒边挑,折中)。
- L1 杀特征、L2 做收缩;树模型自带重要性;终局是「手工业务特征 + 自动表示学习」混用,机器还替代不了懂业务的那几刀。
下一篇是系列收官——特征编码:把「文字菜谱」翻译成「秤上的克数」,One-Hot / Label / Count / Frequency / Target 五种编码各自的适用场景与坑(尤其 Target Encoding 的数据泄漏)。