高维稀疏场景如何使用线性模型?
简化版
高维稀疏场景通常指特征维数 p 很大、但每条样本只有少量非零项,甚至 p>n。此时 OLS 系数通常不唯一或方差很高,但线性模型仍很合适:用 CSR/CSC 等稀疏存储和只遍历非零项的求解器,再用 L1、L2、Elastic Net 或结构化正则控制复杂度。L1 可产生稀疏系数,却可能在强相关变量间不稳定选择;Elastic Net 更倾向保留相关组,Group Lasso 适合已有可靠分组。所有词典、过滤、缩放与调参必须在训练折内完成,验收除预测指标外还要看入选稳定性、非零数、内存、延迟和训练/服务索引一致性。
详细版
以平方损失 Lasso 为例:
β̂ = argmin_β [(1/2n)‖y-Xβ‖² + λ‖β‖₁]
正则化不是从数据凭空创造信息,而是引入“系数较小或只有少数特征有效”的结构偏好,以偏差换方差和可计算性。p>n 不代表一定要深度模型,也不保证 Lasso 能找回真实变量;支持恢复还依赖稀疏度、信号强度、噪声和设计矩阵条件。
| 场景或先验 | 常见方案 | 主要边界 |
|---|---|---|
| 个体特征稀疏 | Lasso / L1 逻辑回归 | 相关项选择可能不稳 |
| 大量弱信号 | Ridge / L2 | 不产生精确零,模型可能较大 |
| 相关组共同作用 | Elastic Net | 需同时调混合比例与强度 |
| 已知特征分组 | Group Lasso | 分组错误会引入错误偏置 |
| 极大开放词表 | Feature hashing + 稀疏优化 | 哈希碰撞降低直接解释性 |
数据管道应保持稀疏,避免在标准化、One-Hot 或交互生成时意外 densify。部署必须固定特征字典/哈希规则、列顺序、预处理与系数版本。
完整版教学
一、先区分高维和稀疏
p 很大叫高维;单条样本只有 s≪p 个非零值叫输入稀疏。文本词袋可能有 100 万维,但一篇文档只出现几百个词;广告 One-Hot 也只激活每个字段的少数类别。高维不一定稀疏,例如基因表达可能几万个维度且大多非零,两者在存储和求解器选择上不同。
还要区分“输入稀疏”和“系数稀疏”。输入稀疏只说明计算可利用零值;L1 产生的参数稀疏则说明许多特征权重为零。稀疏输入并不证明真实信号只存在于少数变量。
二、为什么 p 大于 n 时 OLS 不够
当 p>n 时,设计矩阵秩最多为 n,Xβ=y 可能有无穷多组参数产生相同拟合;即使 p<n,强相关也会让问题病态。直接追求训练误差最小无法决定选哪组系数,泛化方差通常很高。
正则化通过增加偏好使问题可控:Ridge 选择较小范数的唯一收缩解;Lasso 偏好较少非零项;Elastic Net 组合两者。这里的“可识别”来自额外约束/惩罚,不等于数据已经证明被选变量是真实因果因素。
三、L1、L2 和 Elastic Net 怎么选
三类目标可以统一写成损失加惩罚:
L1: loss(β) + λ‖β‖₁
L2: loss(β) + λ‖β‖₂²
Elastic Net: loss(β) + λ[α‖β‖₁ +(1-α)‖β‖₂²/2]
- 预期少量强信号、需要压缩模型时,L1 是自然基线。
- 预期大量弱信号共同贡献,或相关特征不希望任意淘汰时,L2 往往更稳。
- 同时想要稀疏与相关组效应时比较 Elastic Net;“倾向成组”不是必然全部保留。
- 已知互斥或层级结构时,可考虑 Group Lasso、sparse-group Lasso 等结构化惩罚,但组大小可能需要权重校正。
惩罚对特征单位敏感。连续特征通常需折内缩放;One-Hot 频率差异、稀有类别和是否中心化也会影响有效惩罚,且对稀疏矩阵直接中心化会变稠密。
| 正则 | 典型系数形态 | 高维场景的主要取舍 |
|---|---|---|
| L1 | 大量精确零 | 部署紧凑,但相关变量选择不稳 |
| L2 | 多数系数为小的非零值 | 预测稳定,但模型存储可能更大 |
| Elastic Net | 部分为零、相关项较可能共存 | 需联合选择 λ 与 α |
四、一个 n=2000、p=50000 的例子
假设文本分类有 2000 个训练样本、50000 个词特征,每篇平均 150 个非零项。稠密 float64 矩阵需要约:
2000 × 50000 × 8 bytes ≈ 800 MB
而稀疏矩阵主要保存约 2000×150=300000 个非零值及索引,容量会小很多。若 L1 模型在某折得到 120 个非零系数,这只说明该折、该 λ 下的优化结果。五折分别选出 120 个变量但交集只有 35 个,就表明变量级解释不稳,即便五折 AUC 很接近。
因此至少同时报告:预测均值与方差、非零系数数、跨折入选率、符号稳定性、模型字节数和稀疏点积延迟。
五、折内预处理与嵌套选择
方差过滤、词频门槛、单变量筛选、标准化和 λ/α 选择都会利用数据,必须放进交叉验证训练折。尤其不能先用全量标签选前 1000 个词,再对这 1000 个词做 CV;验证折标签已经参与了特征集合。
若还要用最终性能比较多个特征方案,使用嵌套交叉验证:
外层训练折
-> 内层拟合词典/过滤/缩放并选择 λ、α
-> 外层验证折只做 transform 和评分
汇总外层性能
-> 冻结方案后在全训练集重训
-> 独立测试集一次验收
文本、用户行为等数据要按时间或实体分组切分,避免同一文档近重复、同一用户历史同时出现在训练与验证中。
六、稀疏求解和存储的工程边界
算法应按非零数 nnz(X) 工作,而不是把矩阵展开。常见选择包括稀疏 SGD、SAGA、坐标下降、FTRL、LSQR/LSMR 等;具体可用性取决于损失、正则和库实现。CSR 适合按行做批量点积,CSC 适合按列坐标更新,但不能只凭格式名决定,要用实际算子基准测试。
常见 densify 陷阱有:对稀疏矩阵直接减列均值、调用不支持 sparse 的变换器、把全部类别做稠密 One-Hot、生成全量两两交互。流水线测试应断言矩阵类型、shape、nnz 和峰值内存。
若使用 feature hashing,无需维护无限增长的词典且映射稳定,但不同特征可能碰撞到同一坐标。应选足够空间、固定哈希种子/符号规则并监控碰撞影响;哈希后单个系数不再总能映射到唯一原始特征。
七、变量选择稳定性与解释边界
Lasso 在强相关变量间可能选择不同代表,这不是优化器“随机偷懒”,而是多个近等价解受轻微样本扰动影响。稳定性检查可做:
- 在各 CV 折或 Bootstrap 样本中统计入选频率和符号;
- 对相关变量按组汇报,不把单个代表解释成唯一机制;
- 比较 Lasso、Elastic Net 与 Ridge 的时间外性能和系数敏感性;
- 若目标是科学推断,使用专门的选择后推断或独立确认数据,而非直接套 OLS p 值;
- 检查新增/删除一个高频特征后,其他系数与预测是否剧烈变化。
稀疏模型给出的是在当前惩罚、编码和样本下的紧凑预测规则,不自动恢复真实因果支持集。
八、常见误区与追问
线上模型不仅是系数数组,还包括词典或哈希规则、列索引、缺失/未知类别规则、缩放参数、截距和阈值。索引错一位不会报错,却会让每个权重乘错特征,应使用带已知输入输出的契约测试和模型包校验和。
监控新类别率、非零覆盖、nnz/样本、截断比例、分数分布、模型大小和 P99 延迟。特征字典增长或哈希分布变化时应重新走训练验证,而不是给旧模型末尾随手补零。
- 误区:p>n 就必须用深度模型。 结构化稀疏线性模型常是文本和广告问题的强基线,模型选择取决于关系与数据量。
- 误区:L1 选出的变量就是唯一真变量。 强相关、弱信号和样本扰动都会改变入选集合。
- 误区:稀疏输入天然省内存。 只要某一步 densify,峰值内存仍可能爆炸。
- 追问:为什么稀疏矩阵常不中心化? 减均值会把原来的零变成非零;可用支持截距且无需显式中心化的求解器。
- 追问:类别从未见过怎么办? 预先定义 unknown 桶、忽略策略或稳定哈希,并确保训练服务一致。
- 追问:只看 AUC 足够吗? 不够,还要看校准/业务指标、模型大小、延迟和选择稳定性。
九、加强记忆
记住“结构假设—折内选择—稀疏计算—索引契约”:p>n 使无正则 OLS 系数通常不唯一,但不意味着必须上深度模型;L1 假设少数有效,L2 适合许多弱信号,Elastic Net 与 Group Lasso 编码相关组结构。所有过滤、缩放和调参都在训练折内完成,预测指标之外报告非零数与跨折稳定性;全链路保持 sparse,并把词典/哈希、列顺序、缩放和系数一起版本化,防止线上静默错位。