PythonでROC曲線をプロットする方法をわかりやすく解説
ROC曲線とは?
ROC(Receiver Operating Characteristic:受信者動作特性)曲線は、分類モデルの性能を視覚的に評価するためのグラフです。横軸に偽陽性率(FPR)、縦軸に真陽性率(TPR)を取り、モデルの識別能力を直感的に確認できます。
scikit-learnでは metrics.plot_roc_curve(clf, X_test, y_test) メソッドを使うことで、学習済みモデルから簡単にROC曲線を描画できます。
ROC曲線をプロットする手順
- 分類用データセットの生成
make_classification()メソッドを使用して、ランダムなnクラス分類問題のデータを作成します。このメソッドは、正規分布(標準偏差=1)に従う点群を、一辺が2*class_sepのn_informative次元超立方体の頂点周辺にクラスタとして生成し、各クラスに同数のクラスタを割り当てます。また、特徴量間の相互依存性を導入し、さまざまな種類のノイズをデータに加えます。 - データの分割
train_test_split()メソッドを使用して、配列や行列を訓練データとテストデータにランダムに分割します。 - SVMモデルの学習
fit()メソッドを使用して、与えられた訓練データに基づきSVMモデルを学習させます。 - ROC曲線の描画
plot_roc_curve()メソッドを使用して、受信者動作特性(ROC)曲線をプロットします。 - グラフの表示
plt.show()メソッドを使用して、図を画面に表示します。
サンプルコード
import matplotlib.pyplot as plt
from sklearn import datasets, metrics, model_selection, svm
# 分類用データセットを生成
X, y = datasets.make_classification(random_state=0)
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = model_selection.train_test_split(
X, y, random_state=0
)
# SVMモデルの作成と学習
clf = svm.SVC(random_state=0)
clf.fit(X_train, y_train)
# ROC曲線をプロットして表示
metrics.plot_roc_curve(clf, X_test, y_test)
plt.show()実行結果
上記のコードを実行すると、テストデータに対するROC曲線とAUC(Area Under the Curve)スコアが表示されます。AUCが1に近いほど、モデルの分類精度が高いことを示します。
注意:新しいバージョンでの推奨方法
scikit-learn 1.0以降では plot_roc_curve() は非推奨となり、代わりに RocCurveDisplay.from_estimator() の使用が推奨されています。最新の環境では以下のように書き換えることができます。
from sklearn.metrics import RocCurveDisplay RocCurveDisplay.from_estimator(clf, X_test, y_test) plt.show()
-
Pythonで時系列データをプロットする方法をわかりやすく解説
Pythonのmatplotlibを使えば、時系列データ(日時を軸にしたデータ)を簡単にグラフ化できます。ここでは、datetimeオブジェクトを含むデータを折れ線グラフとして描画する基本的な手順を紹介します。 時系列プロットの基本手順 numpyを使用して、x軸(日時データ)とy軸(数値データ)を作成します。 plot()メソッドを使って、作成したx・yのデータをプロットします。 show()メソッドを実行して、図を画面に表示します。 コード例 以下のサンプルコードでは、2021年1月1日の0時から23時までの24個の日時データを生成し、それに対応するランダムな数値をy軸としてプロットし
-
【Python・Matplotlib】散布図に線を重ねて描画(オーバープロット)する方法
PythonのMatplotlibでは、scatter()メソッドでデータポイントの散布図を作成した後、plot()メソッドを使うことで、その散布図の上に自由に線を重ねて描画(オーバープロット)できます。回帰直線や基準線を可視化したい場合などに非常に便利なテクニックです。 実装の手順 figure()メソッドを使って、サイズ(4, 3)の新しい図を作成するか、既存の図をアクティブにします。 plt.axes()で現在の図に軸を追加し、それをカレントのAxesとして取得します。 scatter()メソッドで散布図のポイントを描画します。 ax.plot()メソッドで線を描画し、散布図の上に重ね