Модели классификации случайных лесов
Алгоритм случайных лесов - это метод машинного обучения, который можно использовать для задач обучения с учителем, таких как классификация и регрессия. Алгоритм работает путем построения набора деревьев решений, обученных на случайных подмножествах признаков. В случае классификации выходом случайной модели леса является режим предсказанных классов по деревьям решений. В этом посте мы обсудим, как создавать случайные модели леса для задач классификации в 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. Спасибо за чтение!