"Я очень доволен работой моей базовой модели!"

... сказал, что ни один специалист по данным никогда не ...

Если вам не удается снизить уровень точности 50%, и вы часто обнаруживаете, что настраиваете свои модели машинного обучения до 3:00 утра, просто чтобы вы могли выжать этот дополнительный 1% от улучшенной производительности, или если вы просто Любопытно узнать, что нужно для победы в крупных соревнованиях Kaggle, тогда эта статья для вас.

Что такое укладка моделей?

Укладка моделей - это метод ансамбля науки о данных, который основан на предпосылке «мудрости толпы» о том, что разнообразный набор комбинированных «более слабых» учащихся, работающих вместе, часто будет превосходить одну «сильную» модель. Победители большинства крупных соревнований Kaggle за последние 4–5 лет использовали некоторую конфигурацию набора моделей в своих окончательных моделях-победителях.

Укладка моделей аналогична реальным примерам, таким как построение успешных человеческих команд в бизнесе, науке, спорте и т. Д. Если бы все члены команды действительно хорошо справлялись с одной и той же задачей, то команда решила бы любую задачу, которая требует этого. конкретный навык, но он потерпит неудачу, когда дело доходит до решения сложных реальных проблем, требующих множества разнообразных навыков, установок и подходов. Я мало что знаю об американском футболе, но даже с моими ограниченными знаниями для меня довольно очевидно, что вы не можете выиграть футбольный матч с командой, состоящей только из квотербеков, даже если эти квотербэки являются лучшими в лиге. Вот почему оптимальные спортивные команды и успешные бизнес-единицы состоят из разнообразной группы людей с более широким спектром сильных и слабых сторон.

Классная история, братан… но как это работает на практике?

Ниже вы можете увидеть пример самой успешной модели недавнего крупного соревнования Kaggle:

Примечание. Очень важно иметь достаточный объем данных для выполнения надежного стекирования моделей. Чтобы избежать чрезмерной подгонки, вам необходимо выполнять перекрестную проверку на каждом этапе стекирования / обучения и хранить некоторые данные в качестве «задержки», установленной для этапа тестирования, и убедиться, что нет огромных расхождений между производительностью модели на тренировочные и тестовые данные.

  1. Начальный этап - вы запускаете множество различных автономных моделей и тратите некоторое время на анализ их индивидуальных показателей производительности и размышления о том, где одни модели могли бы работать лучше, чем другие.
  2. Ансамбль этапа 1 - вы выбираете небольшую «команду» из этих моделей, убедившись, что существует низкая корреляция между их коэффициентами прогноза, чтобы ваша составная модель учитывала много перекрестного обучения между более слабыми ссылки. Вы берете среднее значение их прогнозов и строите новую таблицу, которая будет передана новой небольшой группе моделей на этапе 2.
  3. Ансамбль этапа 2 - вы запускаете новый набор моделей, который будет использовать усредненные показатели прогноза из этапа 1 в качестве функций для получения новой информации о взаимосвязях между исходными переменными.
  4. Ансамбль этапа 3 - вы повторяете тот же процесс, вводя средние прогнозы моделей из этапа 2 в окончательную модель «метаобучаемого», которая должна быть хорошо отобрана, чтобы соответствовать типу проблемы, которую вы пытаемся решить. В приведенном выше примере участники использовали линейную регрессию для своей окончательной модели, потому что это, вероятно, была одна из моделей, которые лучше всего работали на начальном этапе в качестве отдельной модели.

Стоит ли попробовать это дома?

Абсолютно! Для моего первого эксперимента с Model Stacking я решил расширить свой последний проект Data Science, который представлял собой модель обработки естественного языка, которая нацелена на предсказание жанра песни по ее текстам. Для этого проекта мы предварительно обработали список из 16 000 текстов песен восьми разных жанров: Хип-хоп, Кантри, Поп, Рок, Метал, Электроника, Джаз и R&B. Мы постарались включить 2000 песен. на каждый жанр в нашем наборе данных, чтобы избежать проблемы дисбаланса классов. Первым шагом было запустить разнообразный набор базовых моделей с низкой корреляцией между их методами прогнозирования, чтобы иметь возможность соответствующим образом построить наши группы по набору моделей. См. Результаты ниже:

Затем мы решили взять три лучшие модели и провести некоторую оптимизацию гиперпараметров с помощью обширного GridSearch, чтобы получить представление о наивысшей точности, которую может достичь наша лучшая автономная модель. Результаты ниже:

Как видно из графика ниже, наш лучший исполнитель достиг точности тестирования 50%, что на первый взгляд кажется не очень высоким, но, учитывая, что наша модель пытается предсказать, какой жанр песня принадлежит к из 8 возможных жанров, эта точность ровно в четыре раза лучше, чем случайное предположение (вероятность случайного предположения = 1/8 или 12,5%). Это означает, что примерно в половине случаев наша модель точно предсказывает, к какому жанру принадлежит песня, только на основе текста этой песни, и что точность тестирования 50% была достигнута на тестовом наборе из более чем 3000 песен… Совсем неплохо!

Хорошо, Морфеус, давай посмотрим, насколько глубока кроличья нора ...

Во-первых, я решил объединить и усреднить прогнозы трех моих самых слабых учеников - классификаторов Random Forest, AdaBoost и KNN и построить новый фрейм данных с функциями, которые я могу передать своим сильным ученикам. Код ниже:

Каждый столбец в приведенной выше таблице представляет собой средний коэффициент прогнозирования для каждого из восьми жанров, а каждая строка представляет собой текст песни с соответствующим истинным жанром, сохраненный в отдельной переменной y в виде списка меток классов. .

Затем я разделил данные на обучающий и тестовый набор и запустил этап 2 стекирования моделей, где мои сильные ученики - GradientBoost и Naive Bayes - использовали комбинированные прогнозы от слабых учеников для создания нового набора прогнозов. Затем я объединил предсказанные результаты этапа 2 в один окончательный фрейм данных, который я хотел передать моему последнему метаобучающему - NN.

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

Последние мысли

Я чувствовал себя точно так же, как тот парень, когда я увидел результаты этого эксперимента по набору моделей в моем первоначальном проекте НЛП. Точность 80% была получена на «удерживающем» наборе тестовых данных, который состоял из 3600 текстов песен, которые модель NN никогда раньше не видела. Точность обучения 86% с перекрестной проверкой также была очень впечатляющей, и что меня особенно порадовало, так это то, что не было существенной разницы между производительностью обучающей выборки и тестовой выборки, поэтому похоже, что переоснащения не было особого.

Я проверял свой код и свои математические данные несколько раз, чтобы убедиться, что мои перекрестные проверки и разделение на обучение / тест действительны на каждом этапе, поскольку 30% -ное повышение производительности казалось «слишком хорошим, чтобы быть правдой», но я не мог ничего найти. ошибки в моем коде. Таким образом, я очень доволен своей первой попыткой использования стекирования моделей, но все же рекомендую отнестись ко всему в этой статье с недоверием, поскольку где-то в процессе я мог допустить ошибку новичка. При этом я рекомендую вам попробовать наложение моделей и посмотреть, дает ли это аналогичный прирост производительности для некоторых из ваших проектов.

Чего ты ждешь? ... Ты встал!

Я постарался сделать это руководство как можно более простым, поскольку я никоим образом не являюсь экспертом в области стекирования моделей, и я просто хотел предоставить базовый пример моей первой попытки использования этого причудливого подхода к науке о данных. Если вы заинтересованы в более глубоком погружении в эту тему, я рекомендую начать с двух сайтов, представленных ниже, и если они вызывают у вас интерес, вы можете попробовать прочитать столько материалов Мариоса Михайлидиса, сколько сможете найти, включая просмотр его видео на YouTube. :