Введение:

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

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

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

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

От деревьев к лесу:

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

Просто придумайте сценарий. Вы исследуете лес или лес, и что бы вы больше всего заметили в лесу? Много-много деревьев. Верно?

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

Обучение ансамблю:

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

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

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

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

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

Random Forest — это тип метода бэггинга; который строит отдельные деревья (модели) на случайно выбранной подвыборке из основных обучающих данных, а затем результат прогнозируется путем объединения выходных данных всех отдельных деревьев.

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

Как можно понять из приведенной выше блок-схемы:

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

II. На каждой из этих сумок строятся индивидуальные модели

III. Результат объединяется с использованием результатов каждой модели

Что такого случайного в случайном лесу?

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

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

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

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

1. n_estimators– этот параметр определяет количество деревьев, которые должен создать RF-алгоритм перед усреднением для окончательных прогнозов.

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

3. mini_sample_leaf– определяет минимальное количество листьев, необходимое для разделения внутреннего узла.

4. n_jobs– этот параметр сообщает модели RF, сколько процессоров она может использовать. Это сильно влияет на скорость обработки.

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

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

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

Используемый здесь набор данных взят из кампании прямого маркетинга португальского банковского учреждения. Маркетинговые кампании были основаны на телефонных звонках. Наша цель этой модели классификации Random Forest состоит в том, чтобы предсказать, подписался ли данный клиент на срочный депозит или нет, используя такие переменные, как семейное положение, возраст, работа, образование и т. д. (Подход, основанный на данных, к Predict the Success of Bank Telemarketing (Системы поддержки принятия решений, 2014 г.)

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

# Load libraries and read data
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier # Import RF Classifier
from sklearn.model_selection import train_test_split # Import train_test_split function
from sklearn import metrics #Import scikit-learn metrics module for accuracy calculation
df_bank=pd.read_csv('bank-additional-full.csv')

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

df_bank_final=pd.get_dummies(df_bank,columns=['day_of_week','job','marital','education','default','housing','loan','contact'
,'month','poutcome'],drop_first=True)

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

#split dataset in features and target variable
df2=df_bank_final.drop("y",axis=1)
X = df2
y = df_bank_final['y']
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

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

from sklearn.ensemble import RandomForestClassifier
# Create RF classifier object
classifier_rf = RandomForestClassifier(random_state=42, n_jobs=-1, max_depth=5,n_estimators=1000)
# Train the RF Classifier
classifier_rf = classifier_rf.fit(X_train,y_train)
#Predict the response for test dataset
y_pred_train = classifier_rf.predict(X_train)
y_pred_test = classifier_rf.predict(X_test)
df_confu=pd.crosstab(y_test, y_pred_test)
# Model Accuracy, how often is the classifier correct?
print("Accuracy in training set:",metrics.accuracy_score(y_train, y_pred_train))
print("Accuracy in testing set:",metrics.accuracy_score(y_test, y_pred_test))
print(df_confu)

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

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

classifier_rf.feature_importances_
imp_df = pd.DataFrame({
"Varname": X_train.columns,
"Imp": classifier_rf.feature_importances_
})
imp_df.sort_values(by="Imp", ascending=False)

Фрейм данных imp_df после сортировки по важности функции выглядит следующим образом:

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

Резюме и заключительные примечания:

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

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

Я надеюсь, что эта статья была полезна для создания необходимого контекста и знакомства читателей с реальной проблемой Python. Приятного чтения и удачного кодирования!!

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