Введение в случайный лес

Какой образ в первую очередь приходит вам в голову, когда вы думаете о «Случайном лесу»? Он вызывает в воображении образы деревьев и мистической и волшебной страны. И это то, что делает алгоритм случайного леса!

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

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

В Random Forest есть одна оговорка - многочисленные гиперпараметры могут ослабить у более свежих данных ученых. Но не волнуйтесь! В этой статье мы рассмотрим различные гиперпараметры случайного леса и поймем, как их настраивать и оптимизировать.

Я предполагаю, что у вас есть базовое понимание алгоритма случайного леса (и деревьев решений). Если нет, я рекомендую вам сначала просмотреть следующие ресурсы:

Гиперпараметры случайного леса, которые мы рассмотрим:

  • Максимальная глубина
  • min_sample_split
  • max_leaf_nodes
  • min_samples_leaf
  • n_estimators
  • max_sample (пример начальной загрузки)
  • max_features

Гиперпараметр случайного леса №1: max_depth

Давайте сначала обсудим критический гиперпараметр max_depth. max_depth дерева в случайном лесу определяется как самый длинный путь между корневым узлом и конечным узлом:

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

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

Вы можете придумать причину этого? Дерево начинает соответствовать обучающему набору и, следовательно, не может делать обобщения по невидимым точкам в тестовом наборе.

Среди параметров дерева решений max_depth работает на макроуровне, значительно сокращая рост дерева решений.

Гиперпараметр случайного леса №2: min_sample_split

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

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

Значение по умолчанию, равное 2, создает проблему, состоящую в том, что дерево часто продолжает расщепляться, пока узлы не станут полностью чистыми. В результате дерево увеличивается в размерах и, следовательно, выходит за рамки данных.

Увеличивая значение min_sample_split, мы можем уменьшить количество разбиений, которые происходят в дереве решений, и, следовательно, предотвратить переоснащение модели. В приведенном выше примере, если мы увеличьте значение min_sample_split с 2 до 6, тогда дерево слева будет выглядеть как дерево справа.

Теперь давайте посмотрим, как min_samples_split влияет на производительность модели. График ниже построен с учетом того, что все остальные параметры остаются такими же, и изменяется только значение min_samples_split:

Увеличивая значение гиперпараметра min_sample_split, мы можем ясно видеть, что для небольшого значения параметров существует значительная разница между оценкой обучения и оценкой теста. Но по мере увеличения значения параметра разница между оценкой поезда и оценкой теста уменьшается.

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

Вы можете прочитать больше о концепции переобучения и недообучения здесь:

Гиперпараметр случайного леса # 3: max_terminal_nodes

Затем перейдем к другому гиперпараметру случайного леса под названием max_leaf_nodes. Этот гиперпараметр устанавливает условие на разделение узлов в дереве и, следовательно, ограничивает рост дерева. Если после разделения у нас будет больше конечных узлов, чем указанное количество конечных узлов, это остановит разбиение, и дерево не будет расти дальше.

Допустим, в этом случае мы установили максимальное количество конечных узлов равным 2. Поскольку существует только один узел, это позволит дереву расти дальше:

Теперь, после первого разделения, вы можете видеть, что здесь 2 узла, и мы установили максимальное количество конечных узлов равным 2. Следовательно, дерево здесь завершится и не будет расти дальше. Вот как установка максимального количества оконечных узлов или max_leaf_nodes может помочь нам предотвратить переоснащение.

Обратите внимание, что если значение max_leaf_nodes очень мало, случайный лес, скорее всего, не подходит. Давайте посмотрим, как этот параметр влияет на производительность модели случайного леса:

Мы можем видеть, что, когда значение параметра очень мало, дерево не соответствует требованиям, а по мере увеличения значения параметра производительность дерева как в тесте, так и в обучении увеличивается. Согласно этому графику, дерево начинает перестраиваться, когда значение параметра выходит за пределы 25.

Гиперпараметр случайного леса №4: min_samples_leaf

Пора сместить фокус на min_sample_leaf. Этот гиперпараметр случайного леса указывает минимальное количество выборок, которые должны присутствовать в листовом узле после разделения узла.

Давайте разберемся с min_sample_leaf на примере. Допустим, мы установили минимальное количество выборок для конечного узла равным 5:

Дерево слева представляет собой неограниченное дерево. Здесь узлы, отмеченные зеленым цветом, удовлетворяют условию, поскольку они имеют как минимум 5 выборок. Следовательно, они будут рассматриваться как конечные или конечные узлы.

Однако красный узел имеет только 3 образца и, следовательно, он не будет считаться листовым узлом. Его родительский узел станет листовым узлом. Вот почему дерево справа представляет результаты, когда мы устанавливаем минимальное количество выборок для конечного узла равным 5.

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

Если мы построим график производительности / значения параметра, как и раньше:

Мы можем ясно видеть, что модель случайного леса переоснащается, когда значение параметра очень низкое (когда значение параметра

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

Гиперпараметр случайного леса # 5: n_estimators

Мы знаем, что алгоритм случайного леса - это не что иное, как группировка деревьев. Но сколько деревьев мы должны рассмотреть? Это частый вопрос, который задают специалисты по свежим данным. И это действительно так!

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

На этом графике хорошо видно, что производительность модели резко увеличивается, а затем стагнирует на определенном уровне:

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

Гиперпараметр случайного леса # 6: max_samples

Гиперпараметр max_samples определяет, какая часть исходного набора данных передается любому отдельному дереву. Вы можете подумать, что чем больше данных, тем лучше. Давайте попробуем понять, имеет ли это смысл.

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

Нет необходимости давать каждому дереву решений случайного леса полные данные. Если вы заметили, производительность модели достигает максимума, когда предоставленные данные составляют менее 0,2 доли исходного набора данных. Это просто потрясающе!

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

Гиперпараметр случайного леса # 7: max_features

Наконец, мы увидим эффект гиперпараметра max_features. Это похоже на количество максимальных функций, предоставляемых каждому дереву в случайном лесу.

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

Мы видим, что производительность модели изначально увеличивается с увеличением числа max_feature. Но после определенного момента train_score продолжает расти. Но test_score насыщается и даже начинает уменьшаться к концу, что явно означает, что модель начинает переобучаться.

В идеале общая производительность модели должна быть максимальной, близкой к 6 максимальным характеристикам. Хорошим соглашением является рассмотрение значения этого параметра по умолчанию, равного квадратному корню из числа объектов, присутствующих в наборе данных. Идеальное количество max_features обычно близко к этому значению.

Конечные заметки

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

Затем вы должны пройти комплексный и популярный Курс прикладного машинного обучения как логический шаг в вашем путешествии по машинному обучению! Вы также можете прочитать эту статью о приложении Google Analytics Vidhya для Android.

Первоначально опубликовано на https://www.analyticsvidhya.com 12 марта 2020 г.