Модель LSTM - изменение формы ввода переменных последовательностей - PullRequest
0 голосов
/ 01 декабря 2018

Я работаю с набором данных kaggle: https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results/version/2, тренирую нашу модель, используя LSTM, чтобы предсказать подсчет медалей на основе результатов игры страны в различных видах спорта за последние несколько лет.

У меня естьпреобразовал входной фрейм данных в список списка, используя функцию группировки.

[
[  [ [country_A], [year_1], [attr_],...[attr_x]  ], [  [country_A], [year_2], [attr_],...[attr_x]  ], ... [ [country_A], [year_t], [attr_],...[attr_x] ]  ],
[  [ [country_B], [year_1], [attr_],...[attr_x]  ], [  [country_B, [year_2], [attr_],...[attr_x]  ], ... [ [country_B], [year_t], [attr_],...[attr_x] ]  ],
.
.
.
[  [ [country_Z], [year_1], [attr_],...[attr_x]  ], [  [country_Z], [year_2], [attr_],...[attr_x]  ], ... [ [country_Z], [year_t], [attr_],...[attr_x] ]  ]
]

shape [country_A]: (14, 7)

shape [country_B]: (25, 7)

shape [country_C]: (100, 7)

Однако проблема в том, что у нас разное количество строк, соответствующих каждой стране.Количество атрибутов (год, спорт, возраст, рост ...) одинаковы для всех записей.

Пример: «Афганистан»: [14 строк], «Индия»: [25 строк], «США»: [100 строк] и т. Д.

Я изучил вариант заполнения., который, кажется, работает только для отсутствующих атрибутов.Как я могу решить проблему переменных строк?

Реализация до сих пор (python: keras.layers.LSTM) -

def lstm_classifier(final_data):
    # reshape
    final_X = final_data.groupby("NOC", as_index=True)['Year', 'Sex', 'Age', 'Height', 'Weight', 'Host_Country', 'Sport'].apply(lambda x: x.values.tolist())
    final_Y = final_data.groupby("NOC", as_index=True)['Medal'].apply(lambda x: x.values.tolist())

    # define model - 10 hidden nodes
    model = Sequential()
    model.add(LSTM(10, stateful = True, input_shape = (1, final_X), return_sequences = True))
    model.add(Dense(4, activation = 'sigmoid'))
    model.summary()
    model.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics = ['accuracy'])

    # fit network
    history = model.fit(final_X, final_Y, epochs = 10, batch_size = 50)

    loss, accuracy = model.evaluate(final_X, final_Y)

Не уверен, правильно ли я строю параметр 'input_shape',Любые указатели на то, как мне следует двигаться вперед, были бы полезны.

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