Pythonで受信者動作特性曲線(ROC曲線)をプロットする方法


Pythonを使用して受信者動作特性曲線(ROC曲線)をプロットする方法について説明します。以下に、いくつかの方法とコード例を示します。

方法1: scikit-learnを使用する方法 scikit-learnは、機械学習のための強力なPythonライブラリです。次のコードは、scikit-learnを使用してROC曲線をプロットする方法を示しています。

from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# 真のラベル
y_true = [0, 0, 1, 1, 1, 1]
# 予測の確率
y_scores = [0.2, 0.3, 0.6, 0.8, 0.9, 0.95]
# ROC曲線の計算
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
# AUCスコアの計算
auc = roc_auc_score(y_true, y_scores)
# ROC曲線のプロット
plt.plot(fpr, tpr, label='ROC curve (AUC = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

方法2: NumPyとMatplotlibを使用する方法 以下のコードは、NumPyとMatplotlibを使用してROC曲線をプロットする方法を示しています。

import numpy as np
import matplotlib.pyplot as plt
# 真のラベル
y_true = np.array([0, 0, 1, 1, 1, 1])
# 予測の確率
y_scores = np.array([0.2, 0.3, 0.6, 0.8, 0.9, 0.95])
# 予測の確率の閾値を計算
thresholds = np.sort(y_scores)
# ROC曲線の計算
tpr = []
fpr = []
for threshold in thresholds:
    predicted_labels = (y_scores >= threshold).astype(int)
    tp = np.sum((predicted_labels == 1) & (y_true == 1))
    fp = np.sum((predicted_labels == 1) & (y_true == 0))
    tn = np.sum((predicted_labels == 0) & (y_true == 0))
    fn = np.sum((predicted_labels == 0) & (y_true == 1))
    tpr.append(tp / (tp + fn))
    fpr.append(fp / (fp + tn))
# AUCスコアの計算
auc = np.trapz(tpr, fpr)
# ROC曲線のプロット
plt.plot(fpr, tpr, label='ROC curve (AUC = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

これらの方法を使用すると、Pythonで受信者動作特性曲線(ROC曲線)をプロットすることができます。ぜひお試しください!