← 返回题目列表

高维稀疏场景如何使用线性模型?

高频 困难 第 16 / 25 题 更新于 2026/09/25
机器学习线性模型高维稀疏Lasso
学习 AI 实战项目

简化版

高维稀疏场景通常指特征维数 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,并把词典/哈希、列顺序、缩放和系数一起版本化,防止线上静默错位。