特征构建把料切配、造出更多特征,但料太多会维度爆炸(计算慢、易过拟合)。这一篇讲怎么「吊高汤」——把一大堆料浓缩成少数几味精华,或换成更省空间的表示。
先厘清一个常被混淆的概念:特征提取 ≠ 特征选择。
Table of contents
Open Table of contents
一句话理解
- 特征选择 = 从一桌子料里挑几样原样留下(原维度的子集)。→ 下一篇特征选择专门讲。
- 特征提取 = 把一大堆料熬成高汤(造出全新的、更浓缩的维度,是原特征的组合)。
高汤里已经找不到「那根胡萝卜」了——PCA / LDA 造出的新维度,是原特征的线性组合,不是原来的任何一个。
1. 换个省地方的表示:稀疏表示 & 特征哈希
1.1 稀疏表示:用「字典 + 少量系数」重建原信号
把原始信号 x 表示成字典 D 元素的线性组合:x ≈ Dα,其中 α 尽量稀疏(大量为 0)。
字典学习的优化目标:
min ‖X − Dα‖² + λ·‖α‖₀
D,α └重构误差┘ └稀疏惩罚┘
- 第一项:重构误差(
Dα要能还原X); - 第二项:稀疏惩罚(
α非零元越少越好)。
好处:高效存储(一堆零)、简化模型(稀疏往往近似线性可分)。相关的压缩感知更进一步——利用稀疏性,从欠采样观测里高概率重建完整信号。
1.2 特征哈希(Hashing Trick):adtech 高基数的救星
广告场景里,用户 ID × 特征的笛卡尔积会让维度爆炸到天文数字。特征哈希用一个哈希函数把高维稀疏压成低维稠密:
原理:定义两个独立哈希函数,把 N 维压到 M 维(M ≪ N):
zⱼ = Σᵢ xᵢ · 𝟙(h(i) = j) · ξ(i)
h: {1..N} → {1..M}决定落哪个桶;ξ: {1..N} → {−1,+1}决定符号(缓解碰撞抵消偏差)。
| 优点 | 不足 |
|---|---|
| 降维提速、省内存 | 可解释性差(参数和原特征对不上号) |
| 免维护巨大的特征表 | 哈希碰撞(不同特征撞进同桶) |
| 在线学习友好:新用户/新特征来了维度不变 | —— 碰撞影响有限,可用多个哈希表缓解 |
| 保持稀疏性(只哈希非零项) |
为什么 adtech 爱它:广告特征天生高基数(几亿用户 ID、几千万广告 ID),又天天来新 ID。哈希让你不用维护一张不断膨胀的特征字典,维度还恒定——这对在线学习太关键了。
2. 三种线性降维,各自在最大化什么
PCA、LDA、ICA 都是把数据投影到低维,但目标函数完全不同。这是本篇最该记住的一张图:
| PCA | LDA | ICA | |
|---|---|---|---|
| 监督 | 无监督 | 有监督(用标签) | 无监督 |
| 最大化 | 方差(信息量) | 类间/类内之比(可分性) | 非高斯性(独立性) |
| 假设 | 主成分正交、可高斯 | 正态、各类协方差相等 | 成分独立、非高斯 |
| 用途 | 降维、去冗余 | 降维 + 增强分类 | 解混、信号分离 |
2.1 PCA:最大化方差的无监督降维
核心思想:把 N 维映射到 R 维(R < N),新的 R 维是相互正交的主成分,是原特征的线性组合。目标是投影后方差最大(数据最分散、信息损失最小)且各主成分协方差为 0(不相关)。
核心结论一句话:PCA 就是对协方差矩阵 C = (1/M)·XXᵀ 做对角化——特征值是新维度的方差,特征向量就是要找的正交基。取最大的 R 个特征值对应的特征向量当投影矩阵。
算法五步:① 数据按行排成 M×N 矩阵 → ② 每列零均值化 → ③ 求协方差矩阵 → ④ 特征值分解 → ⑤ 取前 R 大特征向量组成 P,Y = XP 即降维结果。
sklearn 里就是一行:
from sklearn.decomposition import PCA
import numpy as np
X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) # 6 样本 × 2 特征
pca = PCA(n_components=1) # 降到 1 维
X_reduced = pca.fit_transform(X) # (6, 1):每行是样本在主成分上的投影
2.2 LDA:最大化「类间/类内」的有监督降维
PCA 只顾方差、不看标签,可能把「最能区分类别」的方向丢掉。LDA 用上标签,目标是「投影后类内方差最小,类间距离最大」——同类挤成一团,异类离得远。
二分类的 Fisher 判别比:
w* = argmax (wᵀ·S_B·w) / (wᵀ·S_W·w)
w
其中 S_W 是类内散度、S_B 是类间散度。最优方向就是 S_W⁻¹·S_B 最大特征值对应的特征向量。
降维上限:多分类 LDA 最多降到
k−1维(k是类别数),因为rank(S_B) ≤ k−1。这是 LDA 相比 PCA 的一个硬约束。
2.3 ICA:鸡尾酒会上的「解混」
经典场景:一屋子人同时说话,几个麦克风录下混合声音。ICA 要在不知道原始声源和混合方式的情况下,把每个人的声音分离出来。
模型 x = As(观测 = 混合矩阵 × 源信号),求分离矩阵 W 使 s = Wx。关键假设:源信号统计独立且非高斯。
PCA vs ICA 一句话:PCA 要求主成分不相关(二阶统计);ICA 要求成分独立(更强,用到高阶统计)。如果信号是高斯的,独立 = 不相关,ICA 就没优势了——它的价值恰恰在非高斯信号上。
3. 其他降维法,一表带过
| 方法 | 一句话 |
|---|---|
| MDS(多维尺度) | 降维时保持样本两两距离尽量不变,常用于可视化到 2D/3D |
| 矩阵分解(MF) | 高秩矩阵拆成低秩乘积,推荐系统的老朋友 |
| 稀疏自编码器(SAE) | 神经网络版降维:编码器压缩、解码器重建 |
| 因子分解机(FM/FFM) | 把交叉特征参数化,用隐向量内积表达两两交叉 |
TL;DR — 三句话
- 提取 ≠ 选择:选择是原样挑几个原特征,提取是把原特征熬成全新的浓缩维度(高汤里找不到那根胡萝卜)。
- 稀疏表示 / 特征哈希换的是「省地方的表示」;哈希是 adtech 高基数、天天来新 ID 的救星——免维护特征表、维度恒定、在线学习友好,代价是碰撞和不可解释。
- PCA/LDA/ICA 最大化的东西完全不同:PCA 最大方差(无监督)、LDA 最大类间/类内比(有监督、封顶 k−1 维)、ICA 最大非高斯/独立(解混)。
下一篇讲「只留好料」——特征选择:过滤法 / 包装法 / 嵌入法三大流派,从方差、相关系数、互信息到 L1 正则和树模型重要性。