一个热编码维度——模型复杂性

One Hot Encoding dimension - Model Compexity

我会解释我的问题:

我想使用单热编码来表示每个样本。如果我们考虑对那些代码较少的样本进行填充操作,表示应该是一个 800x600 矩阵。

将这个新表示作为网络的输入,意味着将每个矩阵展平为大小为 800x600(460.000 个值)的向量。

最后,数据集应包含 50.000 个大小为 460.000 的向量。

现在,我有两个考虑:

为什么不使用NLP中使用的常规模型?

这些事件可以通过嵌入矩阵按你说的翻译。 然后您可以使用 LSTM(或 GRU 或 RNN o Bilateral LSTM)表示事件链,使用 LSTM 而不是传统网络的区别在于您使用相同的模块重复 N 次。 所以你的输入实际上不是 460,000,但在内部事件 A 间接帮助你了解事件 B。那是因为 LSTM 有一个模块,可以为链中的每个事件重复自身。

这里有一个例子: https://www.kaggle.com/ngyptr/lstm-sentiment-analysis-keras

从广义上讲,我会做以下事情(在 Keras 伪代码中):

  • 检测总事件数。我生成一个唯一列表。
    unique_events = list (set ([event_0, ..., event_n]))
    You can perform the translation of a sequence with:
    seq_events_idx = map (unique_events.index, seq_events)
    
  • 为每个序列添加必要的填充:
    sequences_pad = pad_sequences (sequences, max_seq)
    
  • 然后你可以直接使用一个embedding将事件转移到你考虑的维度的关联向量上。
    input_ = Input (shape = (max_seq,), dtype = 'int32')
    embedding = Embedding (len(unique_events),
                        dimensions,
                        input_length = max_seq,
                        trainable = True) (input_)
    
  • 然后定义 LSTM 的架构(例如):
    lstm = LSTM (128, input_shape = (max_seq, dimensions), dropout = 0.2, recurrent_dropout = 0.2, return_sequences = True) (embedding)
    
  • 添加密集度和您想要的结果:
    out = Dense (10, activation = 'softmax') (lstm)
    

我认为这种类型的模型可以帮助您并提供更好的结果。