Дополнительные деревья, пожалуйста

Вступление в сферу машинного обучения деревьев решений и случайных лесов

Поиск по сетке. Трубопроводы. Деревья решений. Машины опорных векторов. Настройка гиперпараметров. Матрицы путаницы. Кривые ROC. Если бы вы упомянули мне какие-либо из этих терминов три месяца назад, я бы совершенно не понял, о чем вы говорите. Мы вообще говорим на одном языке? И все же я здесь, только что завершив проект с использованием всех этих техник, методов и инструментов. В этом чудо ускоренного темпа обучения в учебном лагере; мой мозг принял тот факт, что он будет ежедневно наводнен новыми концепциями и, как ожидается, почти сразу же заставит их использовать.

Наша третья основная программа для программы Data Science школы Flatiron - это контролируемый проект машинного обучения, специально ориентированный на классификацию. В отличие от других наших проектов до этого, нам было поручено построить модели, которые предсказывали категориальную целевую переменную, в отличие от непрерывной или числовой. В отличие от прогнозирования кассовых сборов фильмов или цен на распродажах на дому, нам предоставили выбор из нескольких наборов данных по категориям или разрешили выбрать один из наших. После нескольких дней рыскания по репозиториям и коллекциям данных я наконец остановился на том, что соответствовало моим интересам и представляло реальную проблему, которую нужно было решить.

Мы встретились на Zoom как группа, чтобы обсудить выбранные темы. Слушая, как мои сверстники обсуждают свои темы, я понял, что упустил редкую возможность выбрать что-то оптимистичное и интересное для исследования в этом проекте. Я слышал, как студенты говорили о различных прогнозах, связанных со спортом, которые они с радостью делали, и о планах других использовать алгоритмы для прогнозирования типов музыки или рейтингов в видеоиграх. Столько забавных идей! Когда подошла моя очередь представить свою тему, я тяжело вздохнула и неловко объяснила, что выбрала набор данных, касающихся показателей здоровья плода и показателей смертности. Ага. Каким-то образом веселая, беспечная я выбрала самую серьезную и удручающую тему из всех.

Однако сам мой проект и то, к чему стремятся данные, на самом деле весьма обнадеживают и оптимистичны. Предпосылкой всего этого является постоянная проблема общественного здравоохранения - внутриутробная смертность в Соединенных Штатах. И это тема, которая меня глубоко волнует, и которая побудила меня часами искать именно те данные, которые можно было бы использовать для этой цели. Я обнаружил этот набор данных, содержащий более 2000 строк записей кардиотокограмм (КТГ) пациентов с такими характеристиками, как частота сердечных сокращений плода, сокращения матки, движения плода и многое другое. Затем каждая запись была классифицирована опытным акушером как имеющая нормальный, подозрительный или патологический исход для здоровья плода. Я скорректировал это как задачу бинарной классификации, объединив подозрительные и патологические исходы в категорию I, обозначенную как В зоне риска. Я намеревался доказать, что исход здоровья плода можно спрогнозировать исключительно на основе показателей КТГ, что означало бы, что это прогнозирование можно автоматизировать, и медицинские работники могут принять более активные меры по спасению жизни, просто исходя из показаний этого легкодоступного технология.

Приступая к работе над этим проектом, я первым делом понял, что конвейеры - это, по сути, волшебные творения, упрощающие процесс подгонки классификатора к данным. Конвейеры выполняют все шаги по масштабированию, предварительной обработке и настройке классификатора и объединяют их в один объект, который аккуратно завершает процесс и устраняет некоторые человеческие ошибки. Поскольку было много разных алгоритмов, которые я хотел изучить, я начал с написания функции, которая принимает выбранный вами классификатор и возвращает объект конвейера, готовый для установки на X и y. (Обратите внимание, что для моего параметра class_weight установлено значение «сбалансированный», чтобы учесть мою несбалансированную целевую переменную; в моих данных было намного больше детей с нормальным здоровьем, чем детей из группы риска.)

Теперь, возможно, даже более удивительной, чем конвейеры, является возможность поиска по сетке. GridSearchCV позволяет вам проверять множество различных гиперпараметров для модели и оптимизировать вашу модель, выбирая лучшие параметры для выбранной метрики. В данном случае я отдавал приоритет метрике отзыва. Оптимизируя отзыв, я сводил к минимуму количество ложноотрицательных результатов или ошибок типа II в прогнозах моей модели. Хотя меня устраивало, что модель иногда ошибочно предсказывает, что ребенок находится в группе риска, меня меньше устраивало то, что модель иногда ошибочно предсказывала, что ребенок здоров. Поскольку мы говорим здесь о человеческих жизнях, показатель отзыва был самым важным показателем для этого проекта, намного превосходящим точность, точность или любые другие меры оценки. С этой целью я написал функцию, которая принимает объект конвейера (например, из функции выше) и набор настраиваемых гиперпараметров и возвращает объект поиска по сетке. Если вы оптимизируете что-то другое, кроме отзыва, например точность, вам просто нужно изменить параметр оценки, чтобы отразить это.

Наконец, я написал функцию, которая принимает объект поиска по сетке (например, тот, который создан из приведенной выше функции) и возвращает соответствующую информацию, которая будет использоваться для оценки. Вот где происходит настоящее волшебство. Эта последняя функция принимает этот объект поиска по сетке сверху и приступает к работе по оптимизации вашей модели. Сидишь и ждешь. Ваш компьютер издает пугающие звуки. Вы медленно отступаете. Ваш муж с опаской спрашивает, должен ли он слышать ваш компьютер в трех комнатах от вас. Вы улыбаетесь и говорите, что все в порядке, в то время как сильно потеете и в уме подсчитываете стоимость нового MacBook. Иногда вы заглядываете в комнату и видите, что зловещие песочные часы все еще на экране, темно-серый кружок все еще в верхнем правом углу блокнота Jupyter, жужжание и рычание только усиливаются. Но потом, по прошествии некоторого времени, снова все светло и тихо. На экране в выходной ячейке вас ждут:

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

Затем, когда у вас есть это, вы можете делать все это снова! Снова и снова, столько раз, сколько необходимо, пока вы не получите наилучшую возможную модель. (И нет, беспокойство, которое возникает, когда компьютер издает эти звуки, не проходит; вы просто постепенно приходите к пониманию того факта, что ваш компьютер может взорваться в любой момент. Это делает жизнь захватывающей.) Лично я попробовал пару деревьев решений, некоторой логистической регрессии, случайного леса, машины опорных векторов и даже некоторого AutoML с классификатором TPOT (что пошло не так, как я надеялся). Это изображение выше от лучшей модели, которую мне удалось создать с использованием классификатора Extra Trees. Его показатель запоминания составляет 97%, что, хотя и не идеально, но намного лучше, чем показатель запоминания моей базовой модели, равный 77%.

Подождите, а что именно представляет собой классификатор Extra Trees?

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

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

После головной боли, связанной с линейной регрессией и решением таких вопросов, как мультиколинейность и гетероскедастичность, эти классификационные модели действительно являются глотком свежего воздуха. Было поучительно видеть, на что способны эти модели; как они могут работать с несовершенными данными и при этом добиваться замечательных результатов. Мне особенно понравилась возможность визуально видеть, как модель дерева решений принимает решения! Интересно узнать о том, как действуют все эти различные модели, о математике и естественных науках, лежащих в их основе, а также об интуиции и интерпретируемости, которые они представляют. Мне не терпится перейти к следующему этапу, который познакомит нас с такими понятиями, как глубокое обучение и нейронные сети.

Итак, каков был конечный результат моего проекта? Мне удалось отвергнуть свою нулевую гипотезу об отсутствии связи между данными КТГ и показателями здоровья плода, и сделать вывод, что исходы для здоровья плода, подверженные риску, можно предсказать с помощью модели в 97% случаев. Но есть гораздо больше, чем это; Если вам интересно узнать о методах, которые я использовал, подробных результатах и ​​визуализациях, а также о моем заключении с рекомендациями, пожалуйста, ознакомьтесь с моим репозиторием на GitHub для этого проекта: https://github.com/dtunnicliffe/fetal-health-classification.