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

Обзор классификации случайных лесов

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

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

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

Анализ проблемы

В этой реализации модели классификации случайного леса мы будем использовать набор данных рекламы в социальных сетях, который я уже использовал при создании классификатора SVM. Он состоит из трех столбцов. Первые два столбца - это независимые переменные, а именно «Возраст» и «Расчетная зарплата», а последний столбец - это зависимая переменная 'Purchased', которая в двоичном формате указывает, купил ли человек продукт (1) или нет (0).

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

Шаг 1. Импорт библиотек

Как всегда, первый шаг всегда будет включать в себя импорт библиотек NumPy, Pandas и Matplotlib.

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

Шаг 2: Импорт набора данных

На этом этапе мы получим набор данных из моего репозитория github, который хранится как SocialNetworkAds.csv , и сохраним его в переменной dataset. Затем мы назначим соответствующие переменные X и Y. Наконец, мы увидим первые 5 строк нашего набора данных .

dataset = pd.read_csv('https://raw.githubusercontent.com/mk-gurucharan/Classification/master/SocialNetworkAds.csv')
X = dataset.iloc[:, [0, 1]].values
y = dataset.iloc[:, 2].values
dataset.head(5)
>>
Age   EstimatedSalary   Purchased
19    19000             0
35    20000             0
26    43000             0
27    57000             0
19    76000             0

Шаг 3. Разделение набора данных на обучающий набор и тестовый набор.

Мы разделим данные на обучающий и тестовый набор. В этом мы сохранили test_size=0.20. Это означает, что 20% данных будет сохранено как Тестовый набор, а оставшиеся 80% будет использоваться для обучения как обучающий набор. Поскольку имеется 400 строк, около 80 точек данных будут назначены набору тестов, а оставшиеся 320 точек данных будут использоваться в целях обучения.

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

Шаг 4: масштабирование функций

Это дополнительный шаг, который увеличит скорость работы программы, поскольку мы уменьшаем значения X до меньшего диапазона. При этом мы уменьшаем как X_train, так и X_test до небольшого диапазона от -2 до +2. Например, зарплата 75000 уменьшена до 0,16418997.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Шаг 5: Обучение модели классификации случайных лесов на обучающем наборе

Когда обучающий тест готов, мы можем импортировать RandomForestClassifier Class и подогнать обучающий набор к нашей модели. Класс SVC назначается классификатору переменных. Используемый здесь критерий - «энтропия». Другой критерий, который также можно использовать, - это «gini». Затем функция classifier.fit() используется для обучения модели.

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy')
classifier.fit(X_train, y_train)

Шаг 6: Прогнозирование результатов набора тестов

На этом этапе функция classifier.predict() используется для прогнозирования значений для тестового набора, и значения сохраняются в переменной y_pred..

y_pred = classifier.predict(X_test) 
y_pred

Шаг 7: матрица неточностей и точность

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

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

Истинные значения - это количество сделанных правильных прогнозов.

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
from sklearn.metrics import accuracy_score 
print ("Accuracy : ", accuracy_score(y_test, y_pred))
cm
>>Accuracy :  0.9625

>>array([[55,  3],
       [ 0, 22]])

Из приведенной выше матрицы путаницы мы делаем вывод, что из 80 данных набора тестов 77 были правильно классифицированы и только 3 были классифицированы неправильно, в результате чего точность составила 96,25%.

Шаг 8: Сравнение реальных значений с прогнозируемыми значениями

На этом этапе создается Pandas DataFrame для сравнения классифицированных значений как исходного набора тестов (y_test), так и прогнозируемых результатов (y_pred ).

df = pd.DataFrame({'Real Values':y_test, 'Predicted Values':y_pred})
df
>> 
Real Values   Predicted Values
1             1
1             1
0             0
0             0
0             0
... ...  ... ...
1             1
0             1
0             0
0             0
1             1

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

Шаг 9: Визуализация результатов

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

from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM Classification')
plt.xlabel('Age')
plt.ylabel('EstimatedSalary')
plt.legend()
plt.show()

На этом сюжете есть два региона. Область Красный обозначает 0, который состоит из людей, которые не купили продукт, и Зеленый обозначает 1, который состоит из людей, купивших продукт.

Если вы внимательно обратите внимание, мы можем увидеть красный цвет - 3 ошибочно классифицированных точки данных в тестовом наборе с разницей в цвете в конкретной области.

Вывод -

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

Я также прикрепляю ссылку на свой репозиторий github, где вы можете загрузить этот блокнот Google Colab и файлы данных для справки.



Вы также можете найти объяснение программы для других моделей классификации ниже:

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