【问题标题】:How to reshape a numpy array to have time step for a RNN [closed]如何重塑 numpy 数组以具有 RNN 的时间步长 [关闭]
【发布时间】:2022-06-12 00:11:10
【问题描述】:

我目前有一个大小为 (85,6000) 的 NumPy 数组,其中 85 是样本数,6000 是每个样本的时间序列长度。我想为长度为 6000 的时间序列创建一个 60 的时间步长。根据我的理解,我应该只添加另一个第三维并将时间序列放入其中,但它滞后 60。我该怎么做?作为 RNN 输入是否正确?

就上下文而言,这项工作是为我的论文准备的。我有 85 名患者的数据,其中每位患者都有一个时间序列,可以描述为他们的键盘敲击模式。我想将此键盘打字模式输入到 LSTM 中,看看它是否可以进行二进制分类来预测他们是否患有帕金森症。

我知道对于 Keras 库,输入形状需要采用 (n_samples,n_time_steps,n_features) 的形式,但我不太确定 n_features 是什么。我最初的想法是将数组(时间序列)划分为段,这样第二维的段长度为 60,因此时间步长为 60。

所以我将数组重新整形如下:

X_train = np.reshape(X_train, (X_train.shape[0], int(X_train.shape[1]/100),100))

我不确定这是否正确,或者它是否为 LSTM 提供了有关时间序列中先前值的任何信息。我见过的所有教程都试图预测一个奇异的时间序列。但是,我正在尝试对每个患者的时间序列进行分类,因此我需要对 85 个时间序列进行分类,并且找不到任何具有类似问题的资源。

当我查看有关股票价格预测的文章和论文时,我看到它们从时间序列中创建了一种滑动窗口。我不确定这是否可以应用于我的分类问题。他们用于这些窗口的代码大多与这个相似。

X_train = []
y_train = []
for i in range(60, len(training_set_scaled)):
    X_train.append(training_set_scaled[i-60:i, 0])
    y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)

这会将表示股票价格随时间变化的一维数组转换为一个二维数组,其中每行有 60 个条目,并且与后面的行共有 59 个条目,从而创建了滑动窗口效果。我不确定这是否可以缩放到 3D,因为我的问题有 85 个时间序列,而不仅仅是一个股票价格的时间序列。我也阅读了很多关于情绪分析的文章,因为它与我的问题有很多共同点(为每个患者分类序列),但我没有看到人们在情绪分析中具有任意时间步长,相反,他们只是将整个数组作为时间步长。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python numpy machine-learning recurrent-neural-network


【解决方案1】:

num_features 是指使用多少个值来描述单个时间步。例如,假设我想做一些天气预报,我有一堆时间步长的温度、湿度和风速数据,每个时间步长都用一个数字表示。这意味着我有 3 个功能。我的数据将被塑造 (num_samples, num_time_steps, 3)。

现在从您的输入数组看来,您的每个时间步长都由一个值描述。在这种情况下,您可能只想向数组中添加另一个维度。

X_train = np.expand_dims(X_train, -1) 这会给你一个形状数组 (85,6000,1)。

鉴于您的问题描述,我假设您的序列的每个时间步长都是一个表示为某个数字的单个字符?在这种情况下,改用 one-hot-encoding 可能更有意义:https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

使用这样的编码,网络的输入将被塑造(85、6000、length_one_hot_encoding)

【讨论】:

  • 是的,我对每个患者的序列只是一个浮点数组,表示他们按下的键保持按下的时间。因此,如果他们键入 6000 个字符的序列,我有 6000 个浮点数来描述每个键被按下的时间。根据我的理解和输入维度的描述,如果我将第二个维度保留为 6000,这意味着 RNN 将回顾整个时间序列。我想通过我的 RNN 开始测试,只回顾之前的 60 个浮点数。
  • 我编辑了我的帖子,以传达我认为适用于某些问题的滑动窗口的概念。但是,对于如何将滑动窗口效果应用于我拥有的每个 85 时间序列以及如何相应地格式化输入,我感到非常困惑。至于 one-hot 编码,我不认为它对我有用,因为我错误地忘记提及这些浮点数以毫秒为单位表示时间,因此不会有彼此相等的值。
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2018-09-02
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多