はじめに
Scikit-learn は、機械学習タスクに対して単純かつ効率的な API を提供する人気のある Python ライブラリです。scikit-learn の主な機能の 1 つは、機械学習モデルの可視化を簡単に生成できる組み込みの可視化 API です。この実験では、2 つの異なる分類器の ROC 曲線を比較するために scikit-learn 可視化 API をどのように使用するかを探ります。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
データの読み込みと SVC の学習
まず、ワインのデータセットを読み込み、2 値分類問題に変換します。その後、学習用データセットに対してサポートベクトル分類器を学習します。
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.metrics import RocCurveDisplay
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
X, y = load_wine(return_X_y=True)
y = y == 2
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
svc = SVC(random_state=42)
svc.fit(X_train, y_train)
ROC 曲線を描画する
次に、RocCurveDisplay.from_estimator関数を使って ROC 曲線を描画します。この関数は、学習済みの分類器、テスト用データセット、および真のラベルを入力として受け取り、ROC 曲線を描画するために使用できるオブジェクトを返します。その後、show()メソッドを呼び出してプロットを表示します。
svc_disp = RocCurveDisplay.from_estimator(svc, X_test, y_test)
svc_disp.show()
ランダムフォレストを学習して ROC 曲線を描画する
このステップでは、ランダムフォレスト分類器を学習し、その ROC 曲線を SVC の ROC 曲線と並べて描画します。これを行うには、新しいRandomForestClassifierオブジェクトを作成し、学習データに適合させ、その後この分類器を使用して新しいRocCurveDisplayオブジェクトを作成します。また、この関数にaxパラメータを渡して、同じ軸上に曲線を描画します。最後に、SVC の ROC 曲線を描画するためにsvc_dispオブジェクトのplot()メソッドを呼び出します。
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=10, random_state=42)
rfc.fit(X_train, y_train)
ax = plt.gca()
rfc_disp = RocCurveDisplay.from_estimator(rfc, X_test, y_test, ax=ax, alpha=0.8)
svc_disp.plot(ax=ax, alpha=0.8)
plt.show()
まとめ
この実験では、scikit-learn の可視化 API を使って 2 つの異なる分類器の ROC 曲線を描画する方法を探りました。まず、ワインのデータセットを読み込み、学習データに対してサポートベクトル分類器を学習しました。その後、RocCurveDisplay関数を使ってこの分類器の ROC 曲線を描画しました。最後に、ランダムフォレスト分類器を学習し、その ROC 曲線を SVC の ROC 曲線と並べて描画しました。scikit-learn の可視化 API を使えば、異なる分類器を比較し、それらの性能を視覚化することが簡単にできます。