Алгоритм случайного леса - один из самых полезных алгоритмов машинного обучения, которые используются сегодня. Этот алгоритм считается рабочей лошадкой в ​​мире машинного обучения. Цель этого блога - описать, как алгоритм случайного леса работает с набором данных. Я опишу строительные блоки алгоритма случайного леса, включая деревья решений, загрузку, упаковку и объединение всего этого для фактического построения алгоритма случайного леса. Кроме того, я покажу вам пример, которому я следовал, который наглядно покажет вам, как работает алгоритм.

Примечание. Видео «Случайный лес» Джереми Ховарда на fast.ai чрезвычайно полезны и служат основой для примеров, которым я следую в этом видео.

Алгоритм случайного леса: как это работает

Деревья решений:

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

Начальная загрузка:

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

Бэггинг (агрегирование бутстрапа):

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

Случайные леса:

Случайный лес основывается на вышеупомянутых концепциях, вводя случайность в параметры, которые разделяют каждый узел в двоичном дереве решений. Деревья решений являются жадными, что означает, что они используют жадный алгоритм для определения оптимального значения параметра для разделения, чтобы минимизировать ошибку. Чтобы наш случайный лес работал, все деревья должны быть как можно более некоррелированными. Таким образом, случайный лес вносит изменения в модель CART и разбивает ее на множество случайных значений в различных подвыборках данных. Прелесть случайных лесов в том, что когда мы запускаем нашу модель со случайным разбиением на подвыборки данных, ошибка, которую мы получаем для каждого из наших прогнозов, является случайной. Эти ошибки можно моделировать случайным распределением. Среднее значение случайного распределения равно 0. Поэтому, когда мы запускаем наш случайный лес и берем среднее значение всех наших прогнозов, мы получаем модель, которая в идеальных условиях минимизирует нашу ошибку.

Примечание о шуме:

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

Управляемый пример:

Я слежу за руководствами на fast.ai и буду представлять пример, подробно описывающий работу алгоритма случайного леса, который я сделал, следуя руководству.

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

EDA (исследовательский анализ данных):

Сначала мы читаем CSV-файл и выполняем EDA. EDA - важный компонент процесса машинного обучения. Во время EDA вы просматриваете все функции и пытаетесь выбрать те функции, которые наиболее важны для прогнозирования вашей цели. В нашем случае целью является цена продажи.



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

После определения наиболее подходящих функций следующим шагом будет очистка и предварительная обработка данных. Библиотека Fastai поставляется с некоторыми полезными функциями для работы с функциями, которые содержат значения NA, и для преобразования категориальных переменных в числовые переменные. Функция train_cats превращает категориальные переменные в числовые. Например, значения «High», «Low» и «Medium» в функции UsageBand в числовом выражении станут 3, 1 и 2. Кроме того, функция proc_df заменяет значения NA в любой из функций на медианное значение для этой функции.

После завершения EDA и очистки фрейма данных мы готовы выполнить нашу первоначальную регрессию случайного леса.

Но когда вы запускаете RandomForestRegressor, что происходит на самом деле?

Копаем немного глубже:

Давайте упростим регрессор и нарисуем одно дерево

Как видите, модель представляет собой двоичное дерево решений, которое разбивается на различные функции. В sklearn RandomForestRegressor фактически автоматически выполняет итерацию по всем комбинациям функций, которые доступны в подвыборке, и выбирает значения для разделения, чтобы уменьшить MSE. Первый узел представляет, что произошло бы, если бы мы просто спрогнозировали 10,189 как среднее значение журнала продажной цены. MSE для первого узла составляет 0,495, что было бы нашим MSE, если бы мы просто использовали этот единственный узел и предсказали, что журнал цены будет 10,189. По мере того, как дерево углубляется, наша MSE сводится к минимуму, поскольку она объединяет различные решения вместе и становится более точной.

Теперь представьте, что вы запускаете этот процесс на многих сотнях подвыборок данных и возвращаете эти прогнозы. По мере увеличения количества используемых вами деревьев производительность вашей модели возрастает до тех пор, пока не достигнет плато. Объединяя все эти деревья вместе, вы строите свой случайный лес и возвращаете наиболее точный возможный прогноз.

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы или комментарии относительно случайных лесов.