Каков наилучший способ тренировки вашей модели и способствующий отзыву / точности? - PullRequest
0 голосов
/ 03 июля 2018

У меня проблема двоичной классификации, и мой набор данных состоит из 5% положительных меток. Я тренирую свою модель, используя тензор потока. Вот мои результаты во время обучения:

Step 3819999: loss = 0.22 (0.004 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3820999: loss = 0.21 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3821999: loss = 0.15 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

Step 3822999: loss = 0.15 (0.003 sec)
Accuracy = 0.955; Recall = 0.011; Precision = 0.496

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

На мой взгляд, должен быть способ отдать предпочтение «истинным положительным», а не «ложным отрицательным», но, похоже, я не могу их найти.

1 Ответ

0 голосов
/ 03 июля 2018

Вы должны использовать " взвешенную перекрестную энтропию " вместо классического CE. Из документации Tensorflow:

Это похоже на sigmoid_cross_entropy_with_logits (), за исключением того, что pos_weight позволяет компенсировать отзыв и точность путем увеличения или уменьшения стоимости положительной ошибки по сравнению с отрицательной ошибкой. Обычная стоимость кросс-энтропии определяется как:

targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))

Значение pos_weights> 1 уменьшает количество ложных отрицательных значений, следовательно, увеличивает отзыв. И наоборот, установка pos_weights <1 уменьшает количество ложных срабатываний и увеличивает точность. Это видно из того факта, что pos_weight вводится как мультипликативный коэффициент для положительного целевого члена в выражении потерь: </p>

targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))
...