ROC曲線とAUC
メニューを表示するにはスワイプしてください
バイナリ分類器がすべての可能な閾値にわたって2つのクラスをどれだけうまく区別できるかを評価するために、受信者動作特性(ROC)曲線を使用します。ROC曲線は、分類閾値を変化させたときの真陽性率(TPR、感度またはリコールとも呼ばれる)と偽陽性率(FPR)のトレードオフを可視化します。
- **真陽性率(TPR)**は、実際の陽性のうち分類器が正しく識別した割合です。計算式は次の通りです:
- **偽陽性率(FPR)**は、実際の陰性のうち誤って陽性と分類された割合です。計算式は次の通りです:
すべての閾値についてTPRとFPRをプロットすることで、ROC曲線はモデルの性能を単一の判断点に依存せず包括的に示します。**曲線下面積(AUC)**はこの性能を要約した指標であり、AUCが高いほど、モデルが陽性クラスと陰性クラスをすべての閾値でより良く区別できることを意味します。
12345678910111213141516171819202122232425262728293031323334353637383940import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_curve, roc_auc_score import matplotlib.pyplot as plt # Generate synthetic binary classification data X, y = make_classification( n_samples=1000, n_features=20, n_informative=2, n_redundant=10, n_classes=2, random_state=42 ) # Split data into training and test sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42 ) # Fit a logistic regression classifier clf = LogisticRegression() clf.fit(X_train, y_train) # Get predicted probabilities for the positive class y_scores = clf.predict_proba(X_test)[:, 1] # Compute ROC curve fpr, tpr, thresholds = roc_curve(y_test, y_scores) # Compute AUC auc_score = roc_auc_score(y_test, y_scores) # Plot ROC curve plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, label=f"ROC curve (AUC = {auc_score:.2f})") plt.plot([0, 1], [0, 1], "k--", label="Random Classifier") plt.xlabel("False Positive Rate") plt.ylabel("True Positive Rate (Recall)") plt.title("ROC Curve") plt.legend(loc="lower right") plt.show()
ROC曲線を解釈する際、左上隅に向かって大きく湾曲している曲線は、真陽性率が高く偽陽性率が低い、強力な分類器を示します。AUCはこれを数値化したもので、AUCが0.5の場合はランダムな推測と同等、AUCが1.0の場合はクラス間を完全に識別できることを意味します。一般的に、AUCが0.8を超えると良好、1.0に近いほど優れた性能とされます。ただし、問題の文脈やクラス分布によってROCやAUCの解釈は異なるため、常にそれらを考慮する必要があります。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 8
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 8