Модели классификации случайных лесов

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

Давайте начнем!

КЛАССИФИКАЦИЯ ПО СЛУЧАЙНОМУ ЛЕСУ

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

Для начала давайте импортируем библиотеку pandas и прочитаем наши данные во фрейм данных:

import pandas as pd 
df = pd.read_csv("mushrooms.csv")

Напечатаем форму нашего фрейма данных:

print("Shape: ", df.shape)

Затем давайте напечатаем столбцы в нашем фрейме данных:

print(df.columns)

Теперь давайте также посмотрим на первые пять строк данных с помощью метода «.head ()»:

print(df.head())

Информация об атрибутах выглядит следующим образом

Мы будем прогнозировать класс для грибов, где возможные значения класса - «e» для съедобных и «p» для ядовитых. Следующее, что мы сделаем, - это конвертируем каждый столбец в машиночитаемые категориальные переменные:

df_cat = pd.DataFrame()
for i in list(df.columns):
    df_cat['{}_cat'.format(i)] = df[i].astype('category').copy()
    df_cat['{}_cat'.format(i)] = df_cat['{}_cat'.format(i)].cat.codes

Напечатаем первые пять строк итогового фрейма данных:

print(df_cat.head())

Затем давайте определимся с нашими функциями и нашими целями:

X = df_cat.drop('class_cat', axis = 1)
y = df_cat['class_cat']

Теперь давайте импортируем классификатор случайных лесов из «sklearn»:

from sklearn.ensemble import RandomForestClassifier

Затем давайте импортируем «KFold» из модуля выбора модели в «sklearn». Мы будем использовать «KFold» для проверки нашей модели. Кроме того, мы будем использовать показатель f1 в качестве показателя точности, который представляет собой гармоническое среднее значение точности и отзыва. Давайте также инициализируем объект «KFold» двумя разделениями. Наконец, мы инициализируем список, который будем использовать для добавления наших f1-score:

from sklearn.model_selection import KFold
kf = KFold(n_splits=2, random_state = 42)
results = []

Затем давайте переберем индексы в наших данных и разделим данные для обучения и тестирования:

for train_index, test_index in kf.split(X):
     X_train, X_test = X[train_index], X[test_index]
     y_train, y_test = y[train_index], y[test_index]

В цикле for мы определим случайные объекты модели леса, соответствующие различным группам обучающих данных, сделаем прогноз по соответствующим группам тестовых данных, оценим показатель f1 при каждом прогоне теста и добавим показатели f1 к нашим результатам. ' список. Наша модель будет использовать 100 оценок, что соответствует 100 деревьям решений:

for train_index, test_index in kf.split(X):
     ...
     model = RandomForestClassifier(n_estimators = 100, random_state = 24)
     model.fit(X_train, y_train)
     y_pred = model.predict(X_test)
     results.append(f1_score(y_test, y_pred))

Наконец, распечатаем среднюю производительность нашей модели:

print("Accuracy: ", np.mean(results))

Если мы увеличим количество разбиений до 5, мы получим:

kf = KFold(n_splits=3)
...
print("Accuracy: ", np.mean(results))

На этом я остановлюсь, но я призываю вас поэкспериментировать с данными и кодом самостоятельно.

ВЫВОДЫ

Подводя итог, в этом посте мы обсудили, как обучить модель случайной классификации лесов на Python. Мы показали, как преобразовать значения категориальных признаков в машиночитаемые категориальные значения. Кроме того, мы показали, как разделить наши данные для обучения и тестирования, инициализировать объект случайной модели леса, подогнать под наши обучающие данные и измерить производительность нашей модели. Я надеюсь, вы нашли этот пост полезным / интересным. Код в этом посте доступен на GitHub. Спасибо за чтение!