Это был мой второй конкурс kaggle, в котором я принимал участие. Честно говоря, в этом конкурсе я многому научился. Обсуждения множества разных гроссмейстеров и экспертов были просто умопомрачительными. Обсуждение разных жанров конкурса было потрясающим, например. разработка функций, дополнение данных, различное моделирование, переносное обучение и финальное наложение / смешивание. Итак, я собираюсь рассказать о разных вещах (мой опыт), которые я изучил и применил в этом конкурсе, который помог нам (Кристиан и Хасан) выиграть бронзовую медаль (лучшие 8%) - моя первая: D
Итак, соревнования начались в сентябре, и в них приняли участие около 4373 команд. Теперь я сразу перейду к работе.
Исследовательский анализ данных
Что касается описания данных, вы можете щелкнуть здесь и прочитать, что избавит меня от объяснения, что на самом деле означает здесь механизм действия. Хорошо, давайте перейдем непосредственно к деталям. Мы изучили количество точек данных, доступных в каждой категории cp_time, cp_type, cp_dose. Из приведенного ниже графика легко заметить, что ctrl_vehicle - это наименьшее количество. Также из описания набора данных очевидно, что мы можем удалить все связанные с записями ctrl_vehicle. Теперь вам может быть интересно, почему этот парень внезапно сбрасывает запись с ctrl_vehicle. Если вы пропустили это предложение (с управляющим возмущением (ctrl_vehicle
); управляющие возмущения не имеют MoAs) при чтении описания, то нет проблем, я вас прикрыл.
Поскольку это проблема с множественной классификацией, всегда необходимо проверять одну информацию - насколько искажен наш набор данных? Чтобы проверить эту информацию, мы построили график того же самого, и вы можете видеть, что классы действительно несбалансированы.
Другая информация, которая у нас уже есть, данные гена и клетки полностью независимы друг от друга. Следовательно, мы можем разделить эти две информации и затем попытаться построить график распределения каждой из них. Мы легко можем заметить, что данные искажены и имеют выбросы.
Функциональная инженерия
Итак, теперь мы видим, что с нашими данными много проблем, поэтому нам нужно привести их в действительно хорошее состояние, чтобы мы могли скормить данные нашим модным моделям. Итак, давайте отметим, какой тип проблемы у нас есть, а также одновременно воспользуемся определенной техникой для решения этой проблемы.
- «Ctrl_vehicle» не имеет механизма действия.
Действие - Удалите все записи, связанные с ctrl_vehicle, поскольку они будут иметь механизм действия всех типов наркотиков как 0.
2. Классы сильно разбалансированы.
Действие - Нам нужен способ предотвратить это переоснащение. Мы выбрали 7-кратное мульти-стратифицированное разбиение, а также различные начальные числа для рандомизации.
3. Данные не стандартизированы, например не распространяется нормально.
Действие - мы преобразовали данные с помощью QuantileTransformer, который заставляет наши данные вести себя нормально (щелкните заголовок, чтобы прочитать об этом)
4. Добавление дополнительной информации о PCA - всегда хорошая идея. Мы искали возможное количество компонентов, способных уловить минимум 95% дисперсии (как гена, так и клетки по отдельности). Мы рассмотрели 600 и 50 компонентов от гена и клетки соответственно.
5. Другой метод выбора функции, который мы использовали, - это VarianceThreshold. Идея, лежащая в основе этого, - отказаться от всех функций низкой дисперсии (поскольку она содержит меньше информации).
Моделирование
Теперь пришло время подготовить этот конвейер модели, который включает загрузчик данных, обучение и логический вывод. Ниже вы можете найти нашу первую модель, которую мы опробовали и которая могла достичь более высоких результатов на доске лидеров. Мы также включили в нашу реализацию LabelSmoothing. Чтобы узнать больше о LabelSmoothing, вы можете просто посетить этот блог
- Модель Pytorch - CV-потеря - 0,01562
У нас была модель pytorch с 3 плотными слоями и тремя слоями нормализации партии, которые помогают нашим партиям оставаться в центре. Затем мы выполнили нормализацию веса, чтобы предотвратить наш градиент исчезновения / взрыва и утечки relu в качестве нашей функции активации. Отсев помог предотвратить переобучение.
2. Модель Кераса - CV-потеря - 0,01569
Здесь мы попробовали несколько моделей (resnet и dnn) с похожим типом архитектуры (но с другой перестановкой и комбинацией слоев) - где мы увеличили / уменьшили плотный слой, слой BN, значения выпадения. Мы обучили все эти модели и усреднили все потери и прогнозы.
3. Табнет - CV Loss - 0,01579
Трансферное обучение было одной из техник, которые все опробовали на этом соревновании. Оказалось, что преобразование этих функций в формат изображений и применение эффективных сетей было одним из лучших методов обучения передачи. Это сделало одну команду победительницей этого соревнования.
После этого мы сложили все эти модели воедино и получили рейтинг общественного руководства 560+.
После завершения конкурса мы получили частную оценку LB, равную 324 (что было 8% лучших), что помогло нам выиграть бронзу в этом конкурсе.
Я понимаю, что этот блог не будет полным без кода и фрагментов. Я бы посоветовал попробовать связаться с нами, написав в комментариях. Тогда я смогу поделиться своим блокнотом с EDA и частью моделирования.
Если понравилось, то хлопайте в ладоши, делитесь и комментируйте.