Это был мой первый конкурс 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