代码之家  ›  专栏  ›  技术社区  ›  Marco

具有缺失值的多元LSTM

  •  5
  • Marco  · 技术社区  · 7 年前

    输入包含几个特性,因此我使用多元LSTM。 问题是缺少一些值,例如:

        Feature 1     Feature 2  ...  Feature n
     1    2               4             nan
     2    5               8             10
     3    8               8              5
     4    nan             7              7
     5    6              nan            12
    

    我用的是Tensorflow和Keras。

    1 回复  |  直到 7 年前
        1
  •  45
  •   today    6 年前

    his book ,处理缺失值的一种方法是将它们替换为零:

    一般来说,使用神经网络时,输入缺失值是安全的 0,条件是0还不是有意义的值。这个 缺少数据并将开始忽略该值。注意如果你 期望测试数据中缺少值,但网络经过了训练 在没有任何缺失值的数据上,网络不会学会 忽略缺少的值!在这种情况下,你应该 生成缺少条目的训练样本:复制一些训练 很可能在测试数据中丢失。

    所以你可以给 NaN 元素,考虑到数据中没有使用零(您可以将数据规格化为一个范围,例如[1,2],然后将零赋给 元素。)

    Masking 在Keras层。你给它一个mask值,比如说0,它会删除所有特征都等于mask值的任何timestep(即row)。但是,以下所有层都应该支持掩蔽,您还需要预处理数据,并将掩蔽值指定给包含一个或多个时间步长的所有特征 特征。Keras文件示例:

    考虑一个Numpy数据数组 x (samples, timesteps,features) , 输送至LSTM层。你想屏蔽时间步3 而#5是因为缺少这些时间步的数据。你可以:

    • 设置 x[:, 3, :] = 0. x[:, 5, :] = 0.

    • 插入遮罩层 mask_value=0. LSTM

    model = Sequential()
    model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
    model.add(LSTM(32))