You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Keras深度学习框架内进行特征选择?如何实现?有何弊端?

深度神经网络训练过程中实现特征选择的可行性、方法与弊端

当然可以在深度神经网络(DNN)的训练过程中完成特征选择,这类方法属于嵌入式特征选择,和RFE这类提前执行的过滤/包装式方法不同,它能让模型在学习任务目标的同时,自动判断特征的实际价值。

实现方法

  • L1正则化驱动的特征稀疏化
    给输入层的权重添加L1正则化,L1的特性会迫使模型将对任务贡献极小的特征对应的权重压缩至接近0。训练完成后,设定一个阈值,把权重绝对值低于阈值的特征直接剔除。比如在Keras里的实现示例:
from tensorflow.keras import regularizers, Sequential, layers

model = Sequential([
    layers.Dense(64, activation='relu', 
                 kernel_regularizer=regularizers.l1(0.01),
                 input_shape=(num_features,)),
    layers.Dense(32, activation='relu'),
    layers.Dense(1, activation='linear')  # 以回归任务为例
])

训练结束后,提取输入层的权重model.layers[0].get_weights()[0],筛选掉权重绝对值小于设定阈值(比如1e-4)的特征即可。

  • 可训练的特征门控层
    给每个特征分配一个可训练的门控参数,通过sigmoid激活把参数限制在0-1之间,让模型自主学习每个特征的开启程度。门控值越接近0,说明该特征对模型的贡献越小。比如自定义一个门控层:
from tensorflow.keras.layers import Layer
import tensorflow as tf

class FeatureGating(Layer):
    def __init__(self, num_features):
        super().__init__()
        self.gates = self.add_weight(shape=(num_features,), 
                                     initializer="ones", 
                                     trainable=True)
    
    def call(self, inputs):
        return inputs * tf.sigmoid(self.gates)

然后把这个层接入模型:

input_layer = tf.keras.Input(shape=(num_features,))
gated_input = FeatureGating(num_features)(input_layer)
dense1 = layers.Dense(64, activation='relu')(gated_input)
# 后续网络结构...
model = tf.keras.Model(inputs=input_layer, outputs=final_output)

训练完成后,取出gates参数,剔除门控值低于阈值的特征。

  • 注意力机制引导的特征选择
    给每个特征计算注意力分数,模型会自动关注对任务更重要的特征。比如用简单的注意力层,通过全连接层生成每个特征的权重,再和输入特征相乘:
class FeatureAttention(Layer):
    def __init__(self):
        super().__init__()
    
    def build(self, input_shape):
        self.attention = layers.Dense(input_shape[-1], activation='softmax')
        super().build(input_shape)
    
    def call(self, inputs):
        attn_weights = self.attention(inputs)
        return inputs * attn_weights

训练后,注意力权重较低的特征即可被筛选掉。

存在的弊端

  • 训练成本上升:不管是正则化、门控还是注意力机制,都会增加模型的计算量或参数数量,训练时间会显著变长,尤其是特征维度很高的时候。
  • 过拟合风险提高:额外的可训练参数(比如门控值、注意力权重)可能让模型过度拟合训练数据中的噪声,需要搭配更强的正则化(比如Dropout、L2)或者更多的训练数据来缓解。
  • 特征选择结果不稳定:DNN的初始化、训练数据的微小波动都可能影响最终的特征权重或门控值,多次训练得到的特征选择结果可能差异很大,不像RFE这类传统方法的结果更稳定。
  • 解释性变差:原本DNN就有“黑盒”属性,加上嵌入式特征选择的机制,很难直观解释某特征被选中/剔除的具体原因,不如RFE这类方法的特征选择逻辑清晰。

内容的提问来源于stack exchange,提问作者Caterina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:55:17