Форма ввода для LSTM, который имеет один горячий закодированные данные - PullRequest
0 голосов
/ 20 июня 2019

Образец набора данных содержит точку местоположения пользователя.

df.head()

   user           tslot         Location_point
0   0   2015-12-04 13:00:00     4356
1   0   2015-12-04 13:15:00     4356
2   0   2015-12-04 13:30:00     3659
3   0   2015-12-04 13:45:00     4356
4   0   2015-12-04 14:00:00     8563

df.shape 

(288,3)

Поскольку точки местоположения являются категориальными значениями, они имеют одно горячее кодирование.

encoded = to_categorical(df['Location_point'])

Закодированные значения как ниже

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]

Форма закодированных значений (288,8564).

Я пытался сформировать тренировочные данные

X_trai = []
y_trai = []
for i in range(96, 288):
    X_trai.append(encoded[i-96:i])
    y_trai.append(encoded[i])
X_trai, y_trai = np.array(X_trai), np.array(y_trai)

X_trai = np.reshape(X_trai, (X_trai.shape[0], X_trai.shape[1], 1))

А модель

regressor = Sequential()

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_trai.shape[1], 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_trai, y_trai, epochs = 100, batch_size = 32)

Это не правильная модель. Я новичок в углубленном изучении. Я пытался увидеть какой-то пример, но не смог понять ни одной горячей кодировки. Буду признателен, если кто-нибудь сможет объяснить форму ввода, форму вывода и правильную модель.

The input is the sequence of the location points and the output is to predict
 the next location point for that user.

1 Ответ

1 голос
/ 21 июня 2019

Форма ввода зависит от ваших данных. Если у вас есть одна выборка с 288 временными шагами и 8564 объектами, ваша форма ввода будет (batch_size = 1, timesteps = 288, n_features = 8564), если у вас есть 288 выборок один шаг, по которому он будет (batch_size = 288, временной шаг = 1, n_features = 8564).

В любом случае, здесь у вас есть учебник о том, как подготовить ваши данные для моделей LSTM. https://machinelearningmastery.com/reshape-input-data-long-short-term-memory-networks-keras/ https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

Форма ввода для LSTM следующая:

3D-тензор с формой (batch_size, timesteps, input_dim), (Необязательно) 2D-тензор с формой (batch_size, output_dim).

Временные шаги будут длиной ваших последовательностей временных рядов и input_dim количеством имеющихся у вас функций, в этом случае, поскольку они имеют горячее кодирование, они будут равны 8564.

Форма вывода будет зависеть от архитектуры вашей модели.

  • Первый слой дает вывод (batch_size, timesteps, unit)
  • Второй уровень: (batch_size, timesteps, unit)
  • Третий слой: (batch_size, unit)
  • Последний слой: (batch_size, 1)

Тем не менее, вы можете проверить формы ввода / вывода вашей модели с помощью:

regressor.input_shape & regressor.output_shape

Наконец, почему вы не рассматриваете свою Location_point как числовую переменную?

...