Мы работаем с набором данных kaggle: https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results/version/2. Он содержит данные 120 лет олимпийских игр.Наша цель состоит в том, чтобы обучить нашу модель на данных предыдущих олимпийских игр и предсказать вероятную медаль страны в следующих олимпийских играх на основе обученной модели.Мы принимаем атрибуты: возраст, пол, рост, вес, NOC (страна), спорт, событие, чтобы предсказать наш выходной класс (золото, серебро, бронза no_medal).Мы хотим использовать LSTM для прогнозирования на основе данных нескольких предыдущих лет, а не всего набора данных за 120 лет.
Но основная проблема в использовании LSTM, с которой мы сталкиваемся, заключается в том, как сформировать исходные данные для LSTM.Каким должен быть временной шаг и размер выборки для LSTM?Как следует группировать данные для подачи их в LSTM.Для каждой страны у нас есть переменное количество строк, соответствующих каждому году олимпийских игр и всех видов спорта.
Мы застряли на этом шаге на пару дней.
Было бы здорово, если быКто-то может дать представление о том, как должны выглядеть входные данные для подачи в LSTM.
Мы написали такой код:
def lstm_classifier (final_data):
country_count = len(final_data['NOC'].unique())
year_count = len(final_data['Year'].unique())
values = final_data.values
final_X = values[:, :-1]
final_Y = values[:, -1]
print(country_count, ' ', year_count)
# reshape - # countries, time series, # attributes
#final_X = final_X.reshape(country_count, year_count, final_X.shape[1])
final_X = final_X.groupby("Country", as_index=True)['Year', 'Sex', 'Age', 'Height', 'Weight', 'NOC', 'Host_Country', 'Sport'].apply(lambda x: x.values.tolist())
final_Y = final_Y.groupby("Country", as_index=True)['Medal' ].apply(lambda x: x.values.tolist())
# define model - 10 hidden nodes
model = Sequential()
model.add(LSTM(10, input_shape = (country_count, final_X.shape[1])))
model.add(Dense(4, activation = 'sigmoid'))
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)
print(accuracy)