Создание визуализаций с использованием объектов отображения

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы научимся создавать визуализации с использованием объектов отображения с помощью scikit-learn. Объекты отображения - это классы, которые позволяют нам создавать визуализации непосредственно из соответствующих метрик. В этом практическом занятии мы будем использовать объекты отображения ConfusionMatrixDisplay, RocCurveDisplay и PrecisionRecallDisplay для создания визуализаций для задачи бинарной классификации.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

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

Загрузка данных и обучение модели

Для примера мы будем использовать набор данных центра по переливанию крови из OpenML. Целевой признак - это, донорствовал ли человек кровь или нет. Сначала данные разделяются на обучающую и тестовую выборки, а затем на обучающей выборке подбирается логистическая регрессионная модель.

from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X, y = fetch_openml(data_id=1464, return_X_y=True, parser="pandas")
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)

clf = make_pipeline(StandardScaler(), LogisticRegression(random_state=0))
clf.fit(X_train, y_train)

Создание ConfusionMatrixDisplay

С использованием обученной модели мы вычисляем предсказания модели на тестовой выборке. Эти предсказания используются для вычисления матрицы ошибок, которая отображается с использованием ConfusionMatrixDisplay.

from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay

y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred)

cm_display = ConfusionMatrixDisplay(cm).plot()

Создание RocCurveDisplay

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

from sklearn.metrics import roc_curve
from sklearn.metrics import RocCurveDisplay

y_score = clf.decision_function(X_test)

fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()

Создание PrecisionRecallDisplay

Аналогично, кривую точности - полноты можно построить с использованием y_score из предыдущего раздела.

from sklearn.metrics import precision_recall_curve
from sklearn.metrics import PrecisionRecallDisplay

prec, recall, _ = precision_recall_curve(y_test, y_score, pos_label=clf.classes_[1])
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall).plot()

Объединение объектов отображения в одну диаграмму

Объекты отображения хранят вычисленные значения, переданные в качестве аргументов. Это позволяет легко комбинировать визуализации с использованием API Matplotlib. В следующем примере мы размещаем отображения рядом друг с другом в одной строке.

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))

roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()

Резюме

В этом практическом занятии мы узнали, как создавать визуализации с использованием объектов отображения в scikit - learn. Мы использовали объекты отображения ConfusionMatrixDisplay, RocCurveDisplay и PrecisionRecallDisplay для создания визуализаций для задачи бинарной классификации. Сначала мы загрузили данные и обучили модель логистической регрессии. Затем мы создали матрицу ошибок, ROC - кривую и кривую точности - полноты с использованием объектов отображения. Наконец, мы объединили объекты отображения в одну диаграмму с использованием API Matplotlib.