Введение
В этом практическом занятии мы покажем, как измерить ошибку вне пакета (Out-Of-Bag, OOB) для модели Случайный лес с использованием библиотеки scikit-learn для Python. Ошибка вне пакета - это средняя ошибка для каждого наблюдения в наборе обучающих данных, вычисленная с использованием предсказаний деревьев, которые не содержат данное наблюдение в своем бутстрап-выборке. Это позволяет оценивать качество модели Случайный лес при обучении.
Советы по использованию ВМ
После запуска виртуальной машины (VM) перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к работе с Jupyter Notebook.
Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки
Начнем с импорта необходимых библиотек, включая scikit-learn, NumPy и Matplotlib. Также установим значение случайного состояния, чтобы обеспечить воспроизводимость результатов.
import matplotlib.pyplot as plt
from collections import OrderedDict
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
RANDOM_STATE = 123
Создаем бинарный датасет для классификации
Далее мы создадим бинарный датасет для классификации с использованием функции make_classification, предоставляемой библиотекой scikit-learn. Эта функция позволяет нам указать количество образцов, признаков, кластеров в каждой классе и информативных признаков. Мы будем использовать фиксированное значение случайного состояния, чтобы обеспечить воспроизводимость результатов.
X, y = make_classification(
n_samples=500,
n_features=25,
n_clusters_per_class=1,
n_informative=15,
random_state=RANDOM_STATE,
)
Определяем ансамбли классификаторов
Мы определим список из трех классификаторов Случайный лес, каждый с разным значением параметра max_features. Мы установим параметр конструкции warm_start в значение True, чтобы отслеживать ошибку вне пакета (Out-Of-Bag, OOB) во время обучения. Также установим параметр oob_score в значение True, чтобы включить вычисление ошибки вне пакета.
ensemble_clfs = [
(
"RandomForestClassifier, max_features='sqrt'",
RandomForestClassifier(
warm_start=True,
oob_score=True,
max_features="sqrt",
random_state=RANDOM_STATE,
),
),
(
"RandomForestClassifier, max_features='log2'",
RandomForestClassifier(
warm_start=True,
max_features="log2",
oob_score=True,
random_state=RANDOM_STATE,
),
),
(
"RandomForestClassifier, max_features=None",
RandomForestClassifier(
warm_start=True,
max_features=None,
oob_score=True,
random_state=RANDOM_STATE,
),
),
]
Вычисляем ошибку вне пакета (Out-Of-Bag, OOB)
Для каждого классификатора мы пройдем в цикле по диапазону значений n_estimators и подберем классификатор к набору данных. Мы запишем ошибку вне пакета для каждого значения n_estimators и сохраним ее в объекте OrderedDict.
error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)
min_estimators = 15
max_estimators = 150
for label, clf in ensemble_clfs:
for i in range(min_estimators, max_estimators + 1, 5):
clf.set_params(n_estimators=i)
clf.fit(X, y)
oob_error = 1 - clf.oob_score_
error_rate[label].append((i, oob_error))
Визуализируем ошибку вне пакета (Out-Of-Bag, OOB)
Наконец, мы построим график ошибки вне пакета для каждого классификатора в зависимости от количества оценщиков. Это позволит нам определить количество оценщиков, при котором ошибка стабилизируется. Мы будем использовать Matplotlib для создания графика.
for label, clf_err in error_rate.items():
xs, ys = zip(*clf_err)
plt.plot(xs, ys, label=label)
plt.xlim(min_estimators, max_estimators)
plt.xlabel("n_estimators")
plt.ylabel("OOB error rate")
plt.legend(loc="upper right")
plt.show()
Резюме
В этом практическом занятии мы показали, как измерять ошибку вне пакета (Out-Of-Bag, OOB) для модели Случайный лес с использованием scikit-learn. Мы создали бинарный датасет для классификации, определили список ансамблей классификаторов, вычислили ошибку вне пакета для каждого классификатора и визуализировали результаты. Эта техника позволяет нам оценивать ошибку модели Случайный лес без необходимости отдельного набора данных для проверки.