У вас есть дисбаланс в данных и его общее.Ваше решение по сути с избыточной выборкой и является известной стратегией.Я бы использовал формальное решение, такое как np.random.choice
или np.random.rand
, и реализовал бы загрузчик.В качестве альтернативы itertools.combinations
- это еще один подход
Справочная информация Существует 3 способа решения этой проблемы: один - недостаточная выборка, избыточная выборка, а третий - изменение метрики производительности.
Еслиу вас, скажем, 30:30:40 дисбаланс по болезням X, Y и Z. Отбор проб - это удаление избытка путем повторной выборки удаления Z для достижения баланса.
Если у вас есть 15:15:70 для X, Y, Z, вы можете рассмотреть вопрос о передискретизации путем пересчета X и Y для достижения баланса.Лично я не фанат, но просто мое мнение.
В качестве альтернативы вы можете просто использовать точность и отзыв в качестве метрик производительности, а не точности.Таким образом, используйте кривые точного вызова, очень похожие на ROC.
Лучшее решение из всех - просто собрать больше данных, но обычно это не практично.
По моему мнению, недостаточная выборка является очень хорошим решением, но создает проблемы, когда вы в конечном итогеудаляя очень большие объемы данных.Однако вы, конечно, можете решить эту проблему с помощью повторов или, в частности, большого количества повторений и использовать данную метрику, пока не убедитесь, что достигли стабильности.