Понимание леса.

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

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

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

Как создаются разные некоррелированные деревья?

Это происходит в два этапа:

  • Во-первых, из исходного набора данных создаются разные наборы данных (допускается замена строк). Давайте разберемся с этим на примере:

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

В дочернем наборе данных № 2 1-я строка была заменена 3-й строкой исходного набора данных. Аналогичным образом подготавливаются различные наборы данных. Количество случайных наборов данных будет равно количеству деревьев, которые мы хотим создать во время обучения. Каждое дерево называется оценщиком.

Весь процесс создания большого количества наборов данных из одного набора данных известен как Bagging или Bootstrap Aggregation.

  • Во-вторых, для создания дерева алгоритм случайного леса берет случайное подмножество объектов из пространства признаков при каждом разбиении узла.

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

Чем процесс ансамбля лучше, чем отдельное дерево?

Ожидание каждого дерева в методе упаковки такое же, как среднее ожидание случайного леса. Итак, Random Forest фокусируется на уменьшении дисперсии. Если деревья не полностью некоррелированы друг с другом и имеют коэффициент корреляции ρ «rho», то дисперсия определяется по формуле:

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

Для классификации значение по умолчанию для длины подмножества функций - √P, а минимальный размер узла - один.

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

Длина этого параметра подмножества признаков также может быть настроена как гиперпараметр.

Другие особенности Random Forest:

  • OOB: образцы из сумки. Это образцы, которые были удалены из дочернего набора данных и изначально присутствовали в наборе данных, допустим, такой образец - «A». Затем «A» используется для тестирования деревьев, созданных из наборов данных, в которых «A» отсутствует, то есть деревья затем будут пытаться предсказать метку для «A», а затем для всех прогнозов берется среднее значение. Не следует путать оценку OOB с оценкой валидации. Шансы на то, что образец будет внебрачным, составляет около 37%.

Где N - количество выборок в наборе данных

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

Реализация алгоритма случайного леса в Sklearn python:

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, roc_auc_score,classification_report
from sklearn.decomposition import PCA
import pandas as pd
from utils.utils_scores import scores

flag_pca = False

data, target = load_breast_cancer(return_X_y=True)
data = pd.DataFrame(data)
target = pd.DataFrame(target)

if flag_pca:
    pca = PCA()
    data = pca.fit_transform(data)

data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.1,random_state=0)

RandomForestClassifierObject = RandomForestClassifier()
RandomForestClassifierObject.fit(data_train, target_train)

target_test_predict = RandomForestClassifierObject.predict(data_test)
scores(target_test,target_test_predict)

Этот код также можно найти на github здесь.

Надеюсь, этот пост помог вам понять интуицию алгоритма случайного леса.

Источники: -

Это все.