预处理时序

数据挖掘 时间序列 rnn 预处理
2022-02-25 22:31:03

我有一长串事件(400 个独特事件,序列约 10M 长)。我想训练一个 RNN 来预测下一个事件。

我采取的预处理步骤是:(1)使用熊猫转向OneHotEncoding:

vector = pd.get_dummies(sr)

这部分大约需要 15 秒。

(2)使用10的滑动窗口,我创建样本和标签如下;我从 (1) 迭代向量,我将 Xt 作为标签,Xt:t-10 作为数据。

代码:

X = np.zeros((len(samples), window_size, voc_len), dtype=np.bool)
y = np.zeros((len(samples), voc_len), dtype=np.bool)

if IN_COLAB:
  loading_bar = tqdm.tqdm_notebook(enumerate(samples),desc='Build dataset',total=len(samples))
else:
  loading_bar = tqdm.tqdm(enumerate(samples),desc='Build dataset',total=len(samples))

for numpy_index, pandas_idx in loading_bar:
  x_idx = (pandas_idx, pandas_idx + window_size)
  y_idx = pandas_idx + window_size
  Xt = vector.iloc[x_idx[0]:x_idx[1]]
  yt = vector.iloc[y_idx]
  X[numpy_index] = Xt
  y[numpy_index] = yt

display(yt)

问题是秒部分非常慢(25 分钟)。有一个更好的方法吗?某种内置功能?

谢谢

1个回答

有几种设计模式会导致代码变慢:

  1. Pandas 不是为大规模、快速的数据处理而设计的。

  2. 您的代码正在使用可能很慢的 for 循环。

  3. 您在程序需要它之前显示滑动窗口。最好在数据上创建一个视图,然后仅在训练需要时在内存中显示数据。

使用 NumPy 会更好numpy.lib.stride_tricks.sliding_window_view