Введение

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

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

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

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

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

Как работает алгоритм случайного леса

Ниже приведены основные шаги, чтобы понять, как это работает:

  1. Выберите N случайных записей из заданных наборов данных.

2. Создайте дерево решений на основе заданного набора обучающих данных (правил).

3. Предположим, вы хотите создать 5 разных деревьев решений для своего алгоритма для этого проекта, затем повторите шаги 1 и 2, чтобы создать всего 5 деревьев решений.

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

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

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

Теперь разберемся с примером, как показано ниже на картинке.

Здесь DT-1, DT-2 и DT-3 представляют собой три разных дерева решений, точно так же, как три разных моих друга, и их решения - это место 2, место 3 и место 2 соответственно. Большинство решений приходится на 2 место. Так что окончательное решение идти на 2 место за мной, так как большинство моих друзей проголосовало за это место.

Как работает дерево решений внутри

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

Теперь решил создать 3 разных дерева решений для определения фруктов, и все они имеют разную логику для достижения результата.

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

Преимущества использования случайного леса

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

Недостатки

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

Реализация

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

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn import metrics

Загрузить данные

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

Вы можете загрузить данные и сохранить их в своей локальной папке. После этого мы можем использовать метод read_csv Pandas для загрузки данных в фрейм данных Pandas (данные), как показано ниже:

# To Load Data
data = pd.read_csv('Random_Forest_Class_Data.csv')

Обратите внимание, что во фрейме данных есть три столбца: возраст, bp (артериальное давление) и диабет. Здесь возраст и АД являются признаками, а диабет - меткой. Мы собираемся предсказать, страдает ли человек диабетом, используя его возраст и значение артериального давления.

Предварительная обработка данных

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

Здесь мы создадим переменные x_train и y_train, взяв их из набора данных и используя функцию scikit-learn train_test_split для разделения данных на наборы для обучения и тестирования.

Обратите внимание, что размер теста 0,28 означает, что мы использовали 28% данных для тестирования. random_state обеспечивает воспроизводимость. На выходе train_test_split мы получаем значения x_train, x_test, y_train и y_test.

x=data.drop('Diabetes',axis=1)
y=data.Diabetes
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size =0.28)

Обучение модели

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

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

#Create a Gaussian Classifier
clf=RandomForestClassifier(n_estimators=100)
#Train the model using the training sets y_pred=clf.predict(X_test)
clf.fit(x_train,y_train)

Предсказание

Как только модель обучена, она готова делать прогнозы. Мы можем использовать метод predict в модели и передать x_test в качестве параметра, чтобы получить вывод как y_pred. Обратите внимание, что выходные данные прогноза представляют собой массив действительных чисел, соответствующий входному массиву.

y_pred=clf.predict(x_train)

Оценка

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

print("Accuracy:",metrics.accuracy_score(y_train, y_pred))
output -> Accuracy: 0.9352112676056338

Скачать код с Github