Это был мой первый конкурс Data Science, я уже видел много ядер через Kaggle на многих соревнованиях, и мне всегда интересно, как они могут найти точный гиперпараметр и функции. Я прошу их узнать то же самое, и иногда я получаю несколько положительных и обнадеживающих советов, но иногда они не удосуживаются ответить.

А теперь приступим к моему первому в истории конкурсу «Задача по машинному обучению HackerEarth: насколько эффективно лекарство от ЗППП?». Это была задача науки о данных, основанная на НЛП, с некоторыми числовыми и некоторыми текстовыми функциями, и мы должны разработать модель для прогнозирования базовой оценки препарата на основе этих характеристик, типичную задачу контролируемого прогнозирования или регрессии.

Рейтинги и мотивация

Изначально, когда я подал свои первые 4 заявки, я получил 0 баллов, но оставался последовательным и, наконец, вошел в сотню лучших на более поздних отправках. Все соревнования направлены на то, чтобы оставаться последовательными и продолжать совершенствоваться. Когда я попал в Top 40, я был мотивирован и готов потратить целый день на доводку модели.

Я продвигался вверх по прошествии нескольких дней, и на 12-й день соревнований я был в первой десятке, так что теперь задача заключалась в том, чтобы продолжать подниматься в таблице, удерживая хотя бы эту позицию. По мере того, как счет продолжал расти, я, наконец, добрался до пятерки лучших, и до завершения соревнования оставалось еще 15 дней. Буквально через пару дней я оказался под номером 2.

Теперь начинается настоящая проблема, поскольку человек, занявший первое место, продолжал улучшать счет, и я тоже, и это происходило в течение целых 10 дней, но оставалось несколько дней для окончательной подачи, а я все еще был на втором месте, не справился к номеру 1. Я был немного нетерпелив в этот момент, я бы сказал, поскольку разница всегда была очень незначительной, около 0,03–0,19.

День Д. До конца соревнований оставалось всего 8 часов и небольшой тверк, и я, наконец, смог обыграть соперника номер один и занять первое место с результатом 95,63. Остальные участники тоже претерпевают значительные изменения, и таблица лидеров меняется очень часто, но, в конце концов, мне удалось удержать лидирующую позицию в соревновании.

Функциональная инженерия

Для любого алгоритма машинного обучения очень важно изначально найти лучшие функции, с помощью которых мы можем оптимизировать производительность нашей модели. Извлечение признаков очень важно, и это тоже в задаче НЛП, поскольку вам нужно найти значимое понимание текстовых данных. Как мы знаем, модель может работать хорошо только тогда, когда мы предоставляем ей хорошее топливо (функции).

Итак, для столбца обзора я использовал библиотеку NLTK, чтобы извлечь тональность обзора и присвоить числовое значение текстовой функции. Это оказалось очень полезным, так как дает очень подробное представление о назначенном лекарстве. Отдых Я использовал две другие функции, а именно оценку эффективности и количество раз, когда это было прописано врачами.

Выбор модели и настройка гиперпараметров

Итак, после создания достаточно достойных функций для наших алгоритмов машинного обучения пришло время найти наиболее подходящий для нашей проблемы. Я хотел бы подчеркнуть одну вещь, чтобы начать с самых простых алгоритмов, поскольку иногда они исключительно хорошо работают с определенными параметрами. Итак, для решения своей проблемы я начал с линейных моделей. Различные варианты линейных моделей, такие как линейная регрессия, ElasticNet, Lasso, Larslasso, затем переходят к другим продвинутым и более сложным моделям.

Вы можете ожидать мусора, только если вы отправляете мусор в Модель.

Лично я являюсь поклонником SVM (Support Vector Machines) из-за их универсальной производительности как для решения задач регрессии, так и для классификации, но здесь он не работал так хорошо даже с разными ядрами.

Теперь после этого я переключился на деревья решений и случайный лес. Это очень мощные и легко оптимизируемые алгоритмы, поскольку они предоставляют множество функций для настройки вашей модели. Со случайным лесом я получаю около 85 очков, но все еще входил в число 40 лучших. Тогда я решил переключиться на алгоритмы повышения.

В конечном итоге я использовал усиление градиента и усиление XG, и с этим я смог взломать топ-15, а с некоторой дополнительной тонкой настройкой я взломал топ-10. Наконец, я закончил соревнование, используя регрессор голосования с 2 регрессорами градиентного усиления и 2 XGBoost регрессоры.

Лучшие результаты по разным алгоритмам

  • Линейная регрессия - 74
  • ElasticNet - 78
  • Ларсласо - 79
  • SVM (Линейное ядро) - 79
  • SVM (ядро RBF) - 76
  • Случайный лес - 85
  • Повышение градиента - 91
  • XGBoost - 93 балла
  • Регрессор голосования (2 XGBoost Reg + 2 Gradient Boost Reg) - 95,63