Ситуация:
Мне интересно, как оптимально использовать TensorFlow, когда мои данные обучения несбалансированы в распределении меток между двумя ярлыками. Например, предположим, что учебник MNIST упрощен, чтобы различать только 1 и 0, где все доступные нам изображения - это 1 или 0. Это просто, чтобы тренироваться с помощью предоставленных TensorFlow учебников, когда у нас есть примерно 50% каждого типа изображения для обучения и тестирования. Но как насчет случая, когда 90% изображений, доступных в наших данных, равны 0, и только 10% составляют 1? Я наблюдаю, что в этом случае TensorFlow регулярно прогнозирует, что весь мой тестовый набор равен 0, достигая точности бессмысленных 90%.
Одна из стратегий, которую я использовал для успеха, - это выбор случайных партий для обучения, которые имеют равномерное распределение 0 и 1. Такой подход гарантирует, что я все еще могу использовать все свои данные обучения и получать достойные результаты с точностью менее 90%, но гораздо более полезный классификатор. Поскольку точность в этом случае мне бесполезна, моя метрика выбора обычно является областью под кривой ROC (AUROC), и это дает результат, значительно превышающий 0,50.
Вопросы:
(1) Является ли стратегия, о которой я описал, приемлемый или оптимальный способ обучения по несбалансированным данным, или есть тот, который может работать лучше?
(2) Поскольку метрика точности не так полезна в случае несбалансированных данных, существует ли еще одна метрика, которая может быть максимизирована путем изменения функции затрат? Я могу, конечно, рассчитать AUROC после обучения, но могу ли я тренироваться таким образом, чтобы максимизировать AUROC?
(3) Есть ли какие-то другие изменения, которые я могу внести в свою функцию стоимости, чтобы улучшить мои результаты для несбалансированных данных? В настоящее время я использую предложение по умолчанию, данное в учебниках TensorFlow:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
Я слышал, что это может быть возможно за счет увеличения стоимости неправильной классификации меньшего класса ярлыков, но я не уверен, как это сделать.