Вот как деревья решений объединяются для создания случайного леса

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

Мотивация случайных лесов

Сначала мы обсудим некоторые недостатки алгоритма дерева решений. Это будет мотивировать вас использовать случайные леса.

  • Небольшие изменения в обучающих данных могут привести к существенно иной древовидной структуре.
  • Может возникнуть проблема переобучения (модель очень хорошо подходит для обучающих данных, но не может быть обобщена для новых входных данных), если вы не настроите гиперпараметр модели max_depth.

Таким образом, вместо обучения одного дерева решений лучше обучить группу деревьев решений, которые вместе образуют случайный лес.

Как случайные леса работают за кулисами

Основные две концепции случайных лесов:

  • Мудрость толпы - большая группа людей в совокупности умнее отдельных экспертов.
  • Диверсификация - набор некоррелированных прядей

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

Когда вы обучаете случайный лес для задачи классификации, вы фактически обучаете группу деревьев решений. Затем вы получаете прогнозы для всех отдельных деревьев и прогнозируете класс, который получит наибольшее количество голосов. Хотя некоторые отдельные деревья дают неверные прогнозы, многие могут давать точные прогнозы. Как группа, они могут двигаться к точным предсказаниям. Это называется мудростью толпы. На следующей диаграмме показано, что на самом деле происходит за кулисами.

Чтобы поддерживать низкую корреляцию (высокую диверсификацию) между отдельными деревьями, алгоритм автоматически учитывает следующие моменты.

  • Случайность характеристик
  • Бэггинг (начальная агрегация)

Случайность характеристик

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

Бэггинг (начальная агрегация)

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

Представьте, что у нас есть обучающий набор из 10 наблюдений, пронумерованных от 1 до 10. Из этих наблюдений мы выполняем выборку, используя метод начальной загрузки. Мы хотим рассмотреть:

  • Размер выборки. В машинном обучении обычно используется размер выборки, совпадающий с размером обучающей выборки. В этом примере размер выборки равен 10.
  • Количество выборок - равно количеству деревьев решений в случайном лесу.

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

Sample_1 = [5, 4, 6, 6, 5, 1, 3, 2, 10, 9]

Затем мы обучаем дерево решений с помощью этого образца. Из-за замены некоторые наблюдения могут появляться в выборке несколько раз. Также обратите внимание, что некоторые наблюдения не появляются в выборке хотя бы 1 раз. Эти наблюдения называются нестандартными (oob) наблюдениями. Наблюдения oob для первого образца:

oob_1 = [7, 8]

Дерево решений, соответствующее образцу 1, никогда не видит эти oob наблюдения в процессе обучения. Таким образом, этот набор наблюдений oob можно использовать в качестве набора проверки для этого дерева решений. Мы можем оценить весь ансамбль путем усреднения оценок oob каждого дерева решений. Это называется оценкой вне пакета, которая является альтернативой перекрестной проверке.

Создадим еще один образец.

Sample_2 = [5, 4, 4, 5, 5, 1, 3, 2, 10, 9]

oob_2 = [6, 7, 8]

Точно так же мы создаем количество выборок, равное количеству деревьев решений в случайном лесу.

Важность функции в случайном лесу

Еще одно большое преимущество случайного леса состоит в том, что он позволяет вам получить представление об относительной важности каждой функции на основе оценки, вычисленной на этапе обучения. Для этого он Scikit-learn RandomForestClassifier предоставляет атрибут под названием feature_importances_. Это возвращает массив значений, сумма которых равна 1. Чем выше оценка, тем важнее функция. Оценка рассчитывается на основе примеси Джини, которая измеряет качество разделения (чем ниже коэффициент Джини, тем лучше разделение). Характеристики с расщеплениями, которые имеют большее среднее снижение примеси Джини, считаются более важными.

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

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

Хватит теории! Давайте запачкаем руки, написав код Python для обучения случайного леса для нашего набора данных Iris.

О наборе данных Iris

Набор данных Iris (скачать здесь) содержит 150 наблюдений и 4 числовых атрибута. Целевой столбец (виды) состоит из классов для каждого наблюдения. Всего 3 сорта (0 - сетоса, 1 - разноцветный, 2 - вирджиника).

В наборе данных нет пропущенных значений, и все функции являются числовыми. Это означает, что набор данных готов к использованию без предварительной обработки!

Обучите случайный классификатор лесов для набора данных Iris

После выполнения следующего кода вы получите оценку точности модели 0,97.

В нашем случайном лесу 100 деревьев. Это потому, что мы установили n_estimators = 100. Таким образом, количество загрузочных сэмплов также равно 100.

Оценка вне сумки (oob)

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

Это значение близко к оценке точности модели, которая составляет 0,97.

Визуализация важности функции

Посмотрев на важность функции, мы можем решить отказаться от функции ширины чашелистника (см), потому что она не вносит достаточного вклада для создания модели.

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

Древовидные модели, такие как DecisionTreeClassifier и RandomForestClassifier, в основном используются алгоритмами машинного обучения для задач классификации. Если вы хотите интерпретировать модель как «почему модель предсказывает такой класс», лучше использовать обычный алгоритм дерева решений вместо случайного леса. Это потому, что единое дерево решений легко интерпретировать. Но имейте в виду, что, как мы обсуждали ранее, у алгоритма дерева решений есть некоторые недостатки.

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

  1. Во-первых, предварительно обработайте данные, обработав пропущенные значения и преобразовав категориальные значения в числовые.
  2. Затем разделите набор данных на обучающие и тестовые тесты - никогда не используйте одни и те же данные для обучения и тестирования. Это позволит модели запоминать данные, а не изучать какой-либо шаблон.
  3. Установите гиперпараметры модели в RandomForestClassifier, как описано ниже. Всегда учитывайте баланс между производительностью алгоритма и скоростью обучения. Например, если вы добавите больше деревьев в лес, производительность будет высокой, а скорость медленной.
  4. Затем обучите свою модель и визуализируйте важность функций.
  5. Удалите менее важные элементы (если они есть) и повторно обучите модель, используя выбранные элементы.
  6. Проверьте свою модель с помощью набора тестов и получите оценку точности.

Выбор гиперпараметров модели

  • n_estimators: количество деревьев в лесу. По умолчанию - 100. Вы можете использовать число, равное количеству наблюдений в вашем обучающем наборе.
  • max_depth: максимальная глубина дерева. По умолчанию нет. Вы можете сначала обучить DecisionTreeClassifier и выполнить настройку гиперпараметров для max_depth. После получения наилучшего значения с помощью перекрестной проверки и поиска по сетке (я сделал это и получил значение 3), вы можете использовать это значение для max_depth в RandomForestClassifier.
  • bootstrap: по умолчанию - True. Используйте это значение по умолчанию, чтобы выполнить выборку начальной загрузки для получения некоррелированных деревьев.
  • oob_score: по умолчанию - False. Установите для этого параметра значение True, если вы хотите выполнить оценку Out-of-Bag (oob), которая является альтернативой перекрестной проверке.

Чтобы получить доступ к официальной документации Scikit-learn для RandomForestClassifier, просто выполните help (RandomForestClassifier) ​​ после того, как вы импортируете класс как из sklearn.ensemble import RandomForestClassifier .

Спасибо за чтение!

Это руководство было разработано и создано Рукшаном Прамодитха, автором блога Data Science 365.

Технологии, использованные в этом руководстве

  • Python (язык программирования высокого уровня)
  • pandas (библиотека анализа и обработки данных Python)
  • matplotlib (библиотека визуализации данных Python)
  • seaborn (расширенная библиотека визуализации данных Python)
  • Scikit-learn (библиотека машинного обучения Python)
  • Jupyter Notebook (интегрированная среда разработки)

Машинное обучение, используемое в этом руководстве

  • Классификатор случайных лесов

2020–10–29