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

Keras持续预测默认填充值,如何降低其对模型效果的影响

解决方法

替换填充值并做特征缩放

  • 先把所有-999999填充值替换为对应特征列的有效值均值、中位数,或者直接替换为0。你现在用的极端值和正常有效值的数值差距过大,模型很容易把它当成强信号学习,替换成和有效值分布接近的数值可以直接削弱这个问题。
  • 对每个输入特征列做标准化或者min-max归一化,把所有值压缩到统一的小区间内,避免填充值的数值权重远高于正常有效值。

新增缺失值掩码列

不需要改动原有任何行列的内容,只需要给每个存在缺失的参数列新增1个对应的掩码列即可:

  • 掩码列仅取0和1两个值:原列是有效值的位置掩码填0,原列是填充值的位置掩码填1,相当于明确告诉模型哪些位置的数值是真实的、哪些是填充的,模型会自动降低填充位置的权重。
  • 输出侧的-999999问题可以用掩码损失解决:自定义损失函数,计算损失的时候直接忽略输出为-999999的位置,不让这部分的误差参与反向传播,模型就不会刻意拟合填充值。Keras下的实现参考:
import tensorflow as tf
def masked_categorical_loss(y_true, y_pred):
    # 识别非填充值的位置
    mask = tf.cast(tf.not_equal(y_true, -999999), tf.float32)
    # 仅计算有效位置的分类损失
    loss = tf.keras.losses.sparse_categorical_crossentropy(y_true * mask, y_pred)
    loss = loss * mask
    # 返回平均损失,避免除以0
    return tf.reduce_sum(loss) / tf.maximum(tf.reduce_sum(mask), 1e-8)

如果是回归任务,把交叉熵损失替换为MSE、MAE等对应回归损失即可。

调整训练权重

可以给不同样本设置训练权重:某行填充值占比越高,给的训练权重越低,降低大量缺省的样本对模型参数的影响。也可以结合掩码逻辑给单条样本内的不同位置设置权重,进一步削弱填充值的干扰。

优化模型结构

在输入层后加入适量的Dropout层,随机失活部分神经元,降低模型对高频填充特征的依赖;也可以增加轻量的注意力模块,让模型自动学习有效特征的权重,自动忽略填充值的影响。

所有方案都不需要修改原有数据集的行列结构,原有列的有效值可以完全保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:39:02