机器学习模型的不同输入

问题描述

我有数据集,数据集包括:日期,ID(事件的ID),number_of_activities,running_sum(running_sum是按id进行的活动的总和)。 这是我数据的一部分:
    date       |   id (id of the event)   |   number_of_activities  |    running_sum  |

   2017-01-06  |   156                    |                   1     |             1   |

   2017-04-26  |   156                    |                   1     |             2   |

   2017-07-04  |   156                    |                   2     |              4  | 

   2017-01-19  |   175                    |                   1     |             1   |

   2017-03-17  |   175                    |                   3     |             4   |

   2017-04-27  |   221                    |                   3     |             3   |

   2017-05-05  |   221                    |                   7     |             10  |

   2017-05-09  |   221                    |                   10    |             20  |

   2017-05-19  |   221                    |                   1     |             21  |

   2017-09-03  |   221                    |                   2     |             23  |

我的目标是预测给定事件中将来的活动数量,我的问题是:我可以在所有数据集(所有事件)中训练我的模型以预测下一个事件吗,如果可以的话?因为输入数量不相等(每个事件的行数不同),所以也有可能利用日期数据。

解决方法

可以。但是,您需要了解更多信息,这是您最好的。 我想我们在这里谈论时间序列是因为您要预测未来。 您可能想看看递归神经网络和LSTM:

循环层将时间序列作为输入并输出向量,该向量包含有关整个时间序列的压缩信息。因此,让我们看一下事件156,它包含3个步骤: 该事件是您的功能,具有3个时间步长。每个时间步都有不同数量的活动(或功能)。要解决此问题,只需使用出现的最大数量的特征并添加一个填充值(通常只是零),以便它们都具有相同的长度。然后,您将拥有一个适合于递归神经网络的形状(目前LSTMS是不错的选择)

更新

您在评论中说,使用填充不是您的选择,让我尝试说服您。 LSTM非常适合序列长度不同的情况。但是,要使此方法起作用,您还需要具有更长的序列,该模型可以从中学习其模式。我想说的是,当您的某些序列只有几个时间步长(如3),而其他序列却有50个或更多的时间步长时,该模型可能难以预测这些正确值,因为您必须指定要指定的时间步长使用。因此,要么为一个明确的问题准备不同的数据,要么使用 SequenceToSequence 学习更深入地研究该主题,它非常适合计算具有不同长度的序列。为此,您将需要建立一个 Encoder-Decoder 网络。

无论长度如何,编码器都将整个序列压缩为一个向量。这个向量被压缩了一种方式,它只在一个向量中包含序列的信息。

然后,解码器学习使用此向量来预测序列的下一个输出。这是机器翻译的已知技术,但适用于任何类型的sequence2sequence任务。因此,我建议您创建这样的Encoder-Decoder网络,这肯定会改善您的结果。看看这个tutorial,它可能会帮助您进一步