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

Итак, что такое случайный лес? Вот что придумала мудрая и могучая Википедия:

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

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

Не вижу леса за деревьями (решений)

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

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

Таким образом, часть Forest случайного леса кажется довольно интуитивно понятной; это просто куча этих Decision Trees, верно? Верно, но давайте немного углубимся в нюансы и назовем это ансамблем, который относится к определенному методу в статистике и машинном обучении.

ансамблевое обучение

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

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

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

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

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

Но как случайный лес может гарантировать, что он действительно случайный?

Бэгинг

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

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

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

AKA, «золотое пятно» для машинного обучения.

Особенности

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

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

Учебное пособие по случайному лесу с использованием Scikit Learn

Как, спросите вы, возделывают такой лес? (Очень) беглый пример ниже — это пример того, как настроить классификатор случайного леса с помощью пакета Scikit-Learn для python.

Импортировать необходимые библиотеки

from sklearn import datasets, metrics 
from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestClassifier

Загрузка данных

Мы будем использовать данные непосредственно из пакета sklearn — это очень удобный прием для разработки и тестирования структуры модели без загрузки массивного набора данных.

wine = datasets.load_wine() print(f'This dataset has {len(wine.target_names)} classes') print(f'These are the features in this dataset:\n {wine.feature_names}')
This dataset has 3 classes These are the features in this dataset: ['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']

Определите наши X и Y

X = wine.data y = wine.target

Разделите данные на обучающие и тестовые наборы для перекрестной проверки.

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=12)

Создайте модель случайного леса

Я создаю экземпляр RandomForestClassifier(), используя только 2 дерева для генерации прогнозов. Я полагаю, это скорее небольшая лесная роща, чем лес. Модель соответствует тренировочному набору с использованием fit().

random_forest = RandomForestClassifier(n_estimators=2) random_forest.fit(X_train, y_train)
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=2, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False)

Прогнозирование набора тестов для точности

Используйте набор данных X_test для создания прогнозов; затем получите точность этих прогнозов, сравнив их с набором y_test.

y_predict = random_forest.predict(X_test) print(f'Our Random Forest Classifier is {metrics.accuracy_score(y_test, y_predict)} accurate')
Our Random Forest Classifier is 0.8888888888888888 accurate

Добавление деревьев в лес

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

random_forest = RandomForestClassifier(n_estimators=42) random_forest.fit(X_train, y_train) y_predict = random_forest.predict(X_test) print(f'Our Random Forest Classifier is {metrics.accuracy_score(y_test, y_predict)} accurate')
Our Random Forest Classifier is 0.9555555555555556 accurate

Разумеется, точность модели увеличивалась с увеличением количества деревьев в случайном лесу.

Первоначально опубликовано на http://timcrammond.com 23 мая 2020 г.