はじめに
この実験では、scikit-learn を使って表示オブジェクトを使ってビジュアライゼーションを作成する方法を学びます。表示オブジェクトは、それぞれのメトリックから直接ビジュアライゼーションを作成できるクラスです。この実験では、2 値分類問題のビジュアライゼーションを作成するために、ConfusionMatrixDisplay、RocCurveDisplay、およびPrecisionRecallDisplay表示オブジェクトを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、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()
表示オブジェクトを単一のプロットに結合する
表示オブジェクトは、引数として渡された計算済みの値を格納します。これにより、Matplotlib の API を使用して視覚化を簡単に結合できます。次の例では、表示を 1 行に並べて配置します。
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 を使って表示オブジェクトを用いた視覚化の作成方法を学びました。2 値分類問題の視覚化を作成するために、ConfusionMatrixDisplay、RocCurveDisplay、およびPrecisionRecallDisplayの表示オブジェクトを使用しました。まず、データを読み込み、ロジスティック回帰モデルを学習させました。次に、表示オブジェクトを使用して混同行列、ROC 曲線、および適合率再現率曲線を作成しました。最後に、Matplotlib の API を使用して表示オブジェクトを単一のプロットに結合しました。