做特征选择的时候,我对“嵌入法”的第一印象是名字取得太欺负人。搜索栏里敲一个“Embedded”,出来的全是segger embedded studio、IAR Embedded Workbench这类嵌入式开发工具,乍一看跟机器学习完全不沾边。但嵌入法在特征选择里反而是一个特别实用、特别“省事”的方法:它把特征选择和模型训练揉在了一起,训练完模型,特征的重要性也就出来了,不需要像包裹法那样为了挑特征反复训练几十次模型,也比过滤法更贴近最终的预测效果。如果你正在处理一张几百上千列的表,不想在特征工程上投入太多算力,想快速定位一版可解释又不差的特征子集,这篇文章大概能帮你把嵌入法吃透。
1. 嵌入法到底在特征选择里扮演什么角色
1.1 过滤法、包裹法和嵌入法,本质区别在“模型”
为了讲清楚嵌入法,最好先把三种特征选择方法放在一张桌子上看。过滤法是最早接触的:方差过滤、相关系数过滤、互信息法,都是在建模之前,依据某个统计量给特征打分,然后按分数截断。它的优点是快,但缺点也很明显——打分过程和最终使用的模型没有任何关系。两个特征单独看起来和标签的相关性都接近零,可是放在一起组合后,对标签的判别能力非常强,过滤法一般发现不了这种情况。
包裹法则完全反过来,它把模型当作“评委”,用递归特征消除(RFE)或者贪心搜索的方式,一次次训练模型,根据模型性能决定去留。效果往往更好,因为每次评价都贴近真实需求,但代价是计算开销很大,特征一多就容易让人等到崩溃。
嵌入法正好在两者之间:它不额外开一个筛选循环,而是在模型训练的目标函数或训练规则里,直接加入“让不重要的特征权重变小甚至变零”的机制。模型训练收敛后,既得到了预测模型,也得到了一组特征权重或重要度分数。最典型的两个代表就是L1正则化模型和基于树模型的特征重要性。
1.2 为什么嵌入法的效率比包裹法高一个量级
嵌入法的“省事”不是感觉,而是来自训练过程本身。比如L1逻辑回归,它的目标函数里本来就带一个对所有特征权重的绝对值惩罚。优化器在训练过程中,会不断把一些特征的权重推向零。这意味着特征选择不是训练之后额外做的步骤,而是训练过程中自然发生的。你只需要花训练一个模型的时间,就完成了选择。
树模型更明显。随机森林、XGBoost、LightGBM训练时会计算每个特征的分裂次数、分裂增益和覆盖样本数,这些统计量本身就可以作为重要性分数。训练完,直接读feature_importances_属性就行,不需要额外的循环搜索。对一个1000维特征、几万样本的表格任务,这种开销比RFE小太多了。
所以,在很多实际项目里,我默认的第一道精筛工具就是嵌入法,尤其当特征是几十上百维的时候,性价比极高。
1.3 搜索“Embedded”容易跑偏,跟嵌入式开发是两码事
这是一个小提醒。因为嵌入法的英文是Embedded,和嵌入式系统是同一个词,很多人一搜索就跑到嵌入式开发工具链去了。这里说的Embedded是指“特征选择过程嵌入在模型训练内部”,不是“嵌入式硬件上的模型部署”。如果英文搜索想少走弯路,建议用“L1 regularization feature selection”、“feature importance based feature selection”这类关键词,能直接把有用的资料筛出来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 嵌入法能自动筛特征的底层逻辑
2.1 L1正则化的稀疏解是怎么来的
L1正则化做特征选择的原理,很多人知道“能让权重变成零”,但为什么会变成零,值得再说透一点。我们优化的目标函数一般是:
Loss(w) + λ * Σ|w_j|
这个Σ|w_j|就是L1惩罚项。如果把二维权重空间画出来,L1惩罚项的等值面是一个以原点为中心的菱形,菱形的四个角正好落在坐标轴上;而L2惩罚项的等值面是圆形,表面光滑没有角。
优化过程可以理解成在“训练集损失尽量小”和“权重不要太大”之间找平衡。当训练损失那一圈的等高线和L1菱形相交时,非常容易碰到菱形的角。菱形的角意味着某个维度的权重恰好是0,于是这个特征就被“开除”了。
从优化算法角度看也很直观。用坐标下降法求解L1问题时,每一步都会对单个权重做软阈值操作:如果当前权重减去学习率乘以梯度的结果,绝对值小
