У меня есть доступ к кадру данных из 100 человек и тому, как они выполнили определенный тест на движение.Этот кадр содержит около 25 000 строк на человека, поскольку производительность этого человека отслеживается (приблизительно) каждую центсекунду (10 ^ -2).Мы хотим использовать эти данные для прогнозирования двоичной y-метки, то есть, если у кого-то есть проблемы с двигателем или нет.
Столбцы и некоторые значения набора данных следующие:
'Person_ID', 'time_in_game', 'python_time', 'permutation_game, 'round', 'level', 'times_level_played_before', 'speed', 'costheta', 'y_label', 'gender', 'age_precise', 'ax_f', 'ay_f', 'az_f', 'acc', 'jerk'
1, 0.25, 1.497942e+09, 2, 1, 'level_B', 1, 0.8, 0.4655, 1, [...]
Я уменьшил набор данных до 480 строк на человека, просто используя строки в каждой половине секунды.
Теперь я хочу использовать рекуррентную нейронную сеть для прогнозирования двоичного y_label.
Этот код извлекает функцию costheta, используемую для входных данных X, и метку y для вывода Y.
X = []
Y = []
for ID in person_list:
person_frame = df.loc[df['Person_ID'] == Person_ID]
# costheta is a measurement of performance
coslist = list(person_frame['costheta'])
# extract y-label
score = list(person_frame['y_label'].head(1))[0]
X.append(coslist)
Y.append(binary)
Я разделил данные на данные обучения и тестирования, используя тест 0,2Трещина.Затем я попытался создать RNN с Keras следующим образом:
from keras import Sequential
from keras.layers import Embedding, LSTM, Dense, Dropout
embedding_size=32
model=Sequential()
# different_input_values are the set of possible input values
model.add(Embedding(different_input_values, embedding_size, input_length=480))
model.add(LSTM(1000))
# output is binary
model.add(Dense(1, activation='sigmoid'))
print(model.summary())
Наконец-то я начал тренироваться с этим кодом:
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
batch_size = 64
num_epochs = 100
X_valid, y_valid = X_train[:batch_size], Y_train[:batch_size]
X_train2, y_train2 = X_train[batch_size:], Y_train[batch_size:]
model.fit(X_train2, y_train2, validation_data=(X_valid, y_valid), batch_size=batch_size, epochs=num_epochs).
Однако полученная точность действительно низкая.В зависимости от размера партии оно варьируется от 0,4 до 0,6.
12/12 [====================================] - 13 с 1 с / шаг -потеря: 0,6921 - в соответствии: 0,7500 - val_loss: 0,7069 - val_acc: 0,4219
В общем, у меня такой сложный вопрос: как эффективно обучить RNN?Стоит ли воздерживаться от сокращения данных до 480 строк на человека и держать их около 25 000 строк на человека?Могут ли многочисленные показатели, такие как acc
(ускорение в игре) и jerk
, вызвать значительный прирост точности?Какие значительные улучшения можно изменить и рассмотреть?