Точность 1,0, в то время как потери в обучении и валидации все еще снижаются - PullRequest
0 голосов
/ 30 мая 2020

Я создал LSTM RNN, чтобы предсказать, едет кто-то или нет, на основе координат GPS. Вот образец данных (примечание: x, y, z - это трехмерные координаты, преобразованные из lat, lon):

                        x           y           z       trip_id,mode_cat,weekday,period_of_day
datetime            id                          
2011-08-27 06:13:01 20  0.650429    0.043524    0.758319    1   1   1   0
2011-08-27 06:13:02 20  0.650418    0.043487    0.758330    1   1   1   0
2011-08-27 06:13:03 20  0.650421    0.043490    0.758328    1   1   1   0
2011-08-27 06:13:04 20  0.650427    0.043506    0.758322    1   1   1   0
2011-08-27 06:13:05 20  0.650438    0.043516    0.758312    1   1   1   0

Когда я обучаю свою сеть, мои training_loss и validation_loss уменьшаются, но точность достигает 1.0 в первую эпоху. Я убедился, что мои данные о тренировках и тестах не совпадают. Вот как я разделяю данные обучения и тестирования:

t_num_test = df["trip_id"].iloc[-1]*4//5
train_test_df = df.loc[df["trip_id"]<=t_num_test].copy(deep=True)
test_test_df = df.loc[df["trip_id"]>t_num_test].copy(deep=True)

features_train = train_test_df[["x","y","z","datetime","id","trip_id","mode_cat","weekday","period_of_day"]]
features_train.set_index(["datetime","id"],inplace=True)
dataset_train_x = features_train[["x","y","z","trip_id","weekday","period_of_day"]].values
dataset_train_y = features_train[["mode_cat"]].values

features_test = test_test_df[["x","y","z","datetime","id","trip_id","mode_cat","weekday","period_of_day"]]
features_test.set_index(["datetime","id"],inplace=True)
dataset_test_x = features_test[["x","y","z","trip_id","weekday","period_of_day"]].values
dataset_test_y = features_test[["mode_cat"]].values

И вот как я построил свою сеть:

single_step_model = tf.keras.models.Sequential()
single_step_model.add(tf.keras.layers.LSTM(1,
                                           input_shape=x_train_single.shape[-2:]))
single_step_model.add(tf.keras.layers.Dropout(0.2))
single_step_model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

single_step_model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='binary_crossentropy',
                          metrics=['accuracy'])
.
.
.
single_step_history = single_step_model.fit(train_data_single, epochs=epochs,
                                            steps_per_epoch=evaluation_interval,
                                            validation_data=test_data_single,
                                            validation_steps=60)

А вот график, показывающий training_loss, validation_loss и точность

Что могло вызвать такой результат? Если это важно, я использую примерно 500000 точек данных с примерно 8000 уникальным trip_id.

Пожалуйста, сообщите

EDIT: # of Driving / Not Driving (Mode_cat: 1/0)

1 Ответ

0 голосов
/ 30 мая 2020

Надеюсь, это поможет!

Несколько случаев, которые я мог придумать

  1. Ваш набор данных смещен. Могло ли такое, что большая часть входных данных перекошена? Проверьте в нем% значений mode_cat. (Все только 1, или большинство из них только 1?)

  2. Значения X могут иметь функцию / столбец, который является функцией y является функцией значений x (например, y_val = m * x_col2 + x_col3?)

  3. Точность хорошо изучать, но попробуйте использовать что-то вроде f1 score / confusion_matrix.

Ссылка:

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html#sklearn .metrics.f1_score

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html#sklearn .metrics.confusion_matrix

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