Учебники

Алгоритмы классификации — случайный лес

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

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

Мы можем понять работу алгоритма Random Forest с помощью следующих шагов:

  • Шаг 1 — Сначала начните с выбора случайных выборок из заданного набора данных.

  • Шаг 2 — Далее этот алгоритм построит дерево решений для каждой выборки. Затем он получит результат прогнозирования из каждого дерева решений.

  • Шаг 3 — На этом этапе голосование будет проводиться для каждого прогнозируемого результата.

  • Шаг 4 — Наконец, выберите результат прогноза с наибольшим количеством голосов в качестве окончательного результата прогноза.

Шаг 1 — Сначала начните с выбора случайных выборок из заданного набора данных.

Шаг 2 — Далее этот алгоритм построит дерево решений для каждой выборки. Затем он получит результат прогнозирования из каждого дерева решений.

Шаг 3 — На этом этапе голосование будет проводиться для каждого прогнозируемого результата.

Шаг 4 — Наконец, выберите результат прогноза с наибольшим количеством голосов в качестве окончательного результата прогноза.

Следующая диаграмма проиллюстрирует его работу —

Алгоритм случайного леса

Реализация в Python

Во-первых, начните с импорта необходимых пакетов Python —

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Затем загрузите набор данных iris с веб-ссылки следующим образом:

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

Далее нам нужно назначить имена столбцов для набора данных следующим образом:

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Теперь нам нужно прочитать набор данных в pandas dataframe следующим образом:

dataset = pd.read_csv(path, names = headernames)
dataset.head()

чашелистник длины чашелистник ширины Лепесток длина Лепесток ширины Учебный класс
0 5,1 3,5 1.4 0.2 Iris-setosa
1 4,9 3.0 1.4 0.2 Iris-setosa
2 4,7 3,2 1,3 0.2 Iris-setosa
3 4,6 3,1 1,5 0.2 Iris-setosa
4 5.0 3,6 1.4 0.2 Iris-setosa

Предварительная обработка данных будет выполняться с помощью следующих строк сценария.

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

Далее, мы разделим данные на разделение на поезда и тесты. Следующий код разделит набор данных на 70% данных обучения и 30% данных тестирования.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30)

Затем обучаем модель с помощью класса sklearn класса RandomForestClassifier следующим образом —

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 50)
classifier.fit(X_train, y_train)

Наконец, нам нужно сделать прогноз. Это можно сделать с помощью следующего скрипта —

y_pred = classifier.predict(X_test)

Затем распечатайте результаты следующим образом —

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Выход

Confusion Matrix:
[[14 0 0]
   [ 0 18 1]
   [ 0 0 12]]
Classification Report:
              precision   recall   f1-score   support
    Iris-setosa    1.00     1.00       1.00        14
Iris-versicolor    1.00     0.95       0.97        19
 Iris-virginica    0.92     1.00       0.96        12

      micro avg    0.98     0.98        0.98       45
      macro avg    0.97     0.98        0.98       45
   weighted avg    0.98     0.98        0.98       45

Accuracy: 0.9777777777777777

Плюсы и минусы случайного леса

Pros

Ниже приведены преимущества алгоритма Random Forest —

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

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

  • Случайный лес имеет меньшую дисперсию, чем одно дерево решений.

  • Случайные леса очень гибки и обладают очень высокой точностью.

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

  • Алгоритмы Random Forest поддерживают хорошую точность даже при отсутствии значительной части данных.

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

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

Случайный лес имеет меньшую дисперсию, чем одно дерево решений.

Случайные леса очень гибки и обладают очень высокой точностью.

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

Алгоритмы Random Forest поддерживают хорошую точность даже при отсутствии значительной части данных.

Cons

Ниже приведены недостатки алгоритма Random Forest —

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

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

Для реализации алгоритма Random Forest требуется больше вычислительных ресурсов.

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

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