Я работаю с набором данных 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',Любые указатели на то, как мне следует двигаться вперед, были бы полезны.