Измените 2D-фрейм данных, чтобы включить предыдущие точки данных (для LSTM в Керасе) - PullRequest
0 голосов
/ 25 октября 2018

У меня есть датафрейм с 100000 семплами и 10 функциями.Я хочу преобразовать это в трехмерный массив, где [X] [0] - текущая точка данных, [X] [1] - предыдущая точка данных (X-1) и т. Д. Так что, если я хочу «просмотр» из пятиединиц, форма данных будет выглядеть (100000, 5, 10).Причина в том, что я хочу, чтобы мой LSTM учитывал предыдущие точки данных при обучении модели.

Есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 25 октября 2018

Если ваш фрейм данных имеет форму (100000, 10), вы не можете изменить его на (100000, 5, 10) просто потому, что в нем нет значений 100000x5x10.Итак, первым шагом является создание отстающих функций:

> df = pd.DataFrame({'a':[i for i in range(5)], 'b':[i for i in range(5, 10)]})
> df
>       a   b
    0   0   5
    1   1   6
    2   2   7
    3   3   8
    4   4   9
> columns = [df.shift(i) for i in range()]
> df = pd.concat(columns, axis=1)
> df
>       a   b   a   b   a   b
    0   0   5   NaN NaN NaN NaN
    1   1   6   0.0 5.0 NaN NaN
    2   2   7   1.0 6.0 0.0 5.0
    3   3   8   2.0 7.0 1.0 6.0
    4   4   9   3.0 8.0 2.0 7.0

После этого вы можете изменить форму вашего фрейма данных в соответствии с вашими потребностями:

> # 5 samples, 3 timesteps, 2 features
> df.values.reshape(5,3,2)
> array([[[ 0.,  5.],
    [nan, nan],
    [nan, nan]],

   [[ 1.,  6.],
    [ 0.,  5.],
    [nan, nan]],
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...