Почему Random Forest лучший!

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

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

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

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

Рассматривая его пошагово, вот что делает модель случайного леса:

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

Обучение случайного леса на Python

Давайте обучим классификатор случайного леса с 500 деревьями (каждое ограничено максимум 16 узлами):

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as pd
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris["data"], iris["target"], test_size=0.3, random_state=1)
rnd_clf= RandomForestClassifier(n_estimators = 500, max_leaf_nodes= 16, n_jobs = -1, random_state=1)
rnd_clf.fit(X_train,y_train)
y_pred_rf = rnd_clf.predict(X_test)

RandomForestClassifier имеет все гиперпараметры DecisionTreeClassifier для управления ростом дерева, за некоторыми исключениями, плюс все гиперпараметры BaggingClassifier для управления ансамблем. Более того, случайный лес привносит дополнительную случайность при выращивании деревьев, поскольку вместо поиска лучшей функции при разделении узла он ищет лучшую функцию среди случайного подмножества функций. С его помощью можно добиться большего разнообразия деревьев, избежать переобучения и допустить более высокую систематическую ошибку и более низкую дисперсию, в результате чего получится лучшая модель.

Важность функции

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

for name, score in zip(iris[“feature_names”], rnd_clf.feature_importances_):
 print(name,score)

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

Настройка гиперпараметров

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

  • Повышение предсказательной силы

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

max_features: соответствует максимальным возможностям Random Forest, которые разрешено пробовать в отдельном дереве при поиске наилучшего разделения;

min_sample_leaf: минимально необходимое количество листьев для разделения на внутреннем узле.

  • Увеличение скорости обработки

n_jobs: указывает системе, сколько процессоров ей разрешено использовать. Значение «-1» означает, что ограничения нет;

random_state: позволяет воспроизводить выходные данные модели. Он всегда будет давать одни и те же результаты, если вы зададите ему фиксированное значение, а также те же параметры и данные обучения.

oob_score: Метод перекрестной проверки случайного леса. Это так называемые «образцы вне сумки». Он очень похож на метод перекрестной проверки с исключением по одному, но без каких-либо вычислительных затрат.

Заключение

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

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

Если вам понравилось, подписывайтесь на меня, чтобы увидеть больше публикаций и не забывайте, пожалуйста, аплодируйте!

Ресурсы: