Введение
В этом практическом занятии мы научимся создавать визуализации с использованием объектов отображения с помощью 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.