시각화 객체를 활용한 시각화 생성

Beginner

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

소개

이 실습에서는 scikit-learn 을 사용하여 표시 객체를 활용한 시각화를 만드는 방법을 배웁니다. 표시 객체는 해당 메트릭에서 직접 시각화를 생성할 수 있도록 하는 클래스입니다. 이 실습에서는 이진 분류 문제에 대한 시각화를 생성하기 위해 ConfusionMatrixDisplay, RocCurveDisplay, PrecisionRecallDisplay 표시 객체를 사용합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 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()

ROC 곡선 생성

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()

Precision-Recall 곡선 생성

마찬가지로, 이전 섹션의 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()

여러 개의 시각화 객체를 하나의 그림에 결합

시각화 객체는 인수로 전달된 계산된 값을 저장합니다. 이를 통해 Matplotlib API 를 사용하여 시각화를 쉽게 결합할 수 있습니다. 다음 예제에서는 그림에 두 개의 시각화를 가로로 나란히 배치합니다.

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 곡선 및 정밀도 - 재현율 곡선을 생성했습니다. 마지막으로 Matplotlib API 를 사용하여 여러 시각화 객체를 하나의 그림에 결합했습니다.