ホームページ  >  記事  >  バックエンド開発  >  Python の ROC 曲線テクニック

Python の ROC 曲線テクニック

WBOY
WBOYオリジナル
2023-06-11 12:12:272005ブラウズ

近年、データ サイエンスと機械学習の発展により、Python プログラミング言語はデータ サイエンティストや機械学習エンジニアのお気に入り言語の 1 つになりました。 Python は、NumPy、Pandas、Scikit-learn などの多数のライブラリとフレームワークを提供しており、高品質の機械学習モデルを簡単に構築できます。

ROC 曲線 (受信者動作特性曲線) は、機械学習における重要なツールであり、分類アルゴリズムのパフォーマンスを評価し、アルゴリズムの分類能力と堅牢性を理解するために使用されます。 Python では、分類アルゴリズムの評価に役立つさまざまな方法で ROC 曲線をプロットできます。この記事では、Python での ROC 曲線描画テクニックを紹介し、Scikit-learn ライブラリと Matplotlib ライブラリを使用して美しい ROC 曲線を作成する方法を示します。

ROC 曲線はどのように機能しますか?

ROC 曲線は、バイナリ分類器のパフォーマンス評価で最も一般的に使用されるツールの 1 つです。この曲線は、偽陽性率と真陽性率の関係をプロットすることにより、分類器のパフォーマンスを示しています。偽陽性率はすべての陰性クラスに対する偽陽性クラスの割合であり、真陽性率はすべての陽性クラスに対する真のクラスの割合です。 ROC 曲線の X 軸は偽陽性率、Y 軸は真陽性率です。

通常、分類問題には、正の例を「1」、負の例を「0」と呼ぶ二分判断問題が含まれ、分類器は特定のしきい値に従ってインスタンスを正の例として分類できます。あるいは否定的な例。分類子のしきい値が高すぎる場合、多数のインスタンスが誤って負の例として分類されてしまいます。これにより、偽陰性率が増加し、分類子がインスタンスを見逃す可能性があります。逆に、分類器の閾値が低すぎると、多数の事例が陽性例として分類され、誤検知率が増加し、誤判定につながる可能性があります。最適な分類器を実装するには、これら 2 つのエラー タイプを比較検討する必要があります。

理想的な ROC 曲線は、真陽性率が 1 に等しく、偽陽性率が 0 に等しい点から始まります。この時点で、しきい値は最大値に設定されます。しきい値を増やすと、真陽性率は変わりませんが、偽陽性率は増加します。したがって、ROC 曲線上のどの点でも、真陽性率が高く偽陽性率が低い方が、偽陽性率が高い場合よりもパフォーマンスが良いと考えられます。

ROC 曲線のテクニック

Python で ROC 曲線を描画するにはいくつかのテクニックがあります。以下に一般的なヒントをいくつか示します。

  1. Scikit-learn ライブラリの使用

Scikit-learn は、さまざまなしきい値設定の下で真陽性と偽陽性の出力を計算する便利な関数と、戻り値を提供します。偽陽性率と真陽性率の結果。これらの出力を取得したら、ROC 曲線として視覚化できます。 Scikit-learn ライブラリを使用して ROC 曲線を計算およびプロットする例を次に示します。

from sklearn.metrics import roc_curve
from sklearn.metrics import auc

fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
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 (ROC) Curve')
plt.legend(loc="lower right")
plt.show()

この例では、バイナリ分類器を近似し、テスト セットを使用して確率を計算したと仮定します。 y_test はテスト データの分類ラベル、y_pred_prob は分類器によって予測される確率です。この例では fpr と tpr を計算し、Scikit-learn の auc 関数を使用して ROC 曲線の下の面積を計算します。Matplotlib を使用して ROC 曲線を描画できます。グラフは、Y 軸に真陽性率、X 軸に偽陽性率をプロットします。

  1. Matplotlib ライブラリを使用したカスタム プロット

ROC 曲線の外観をさらにカスタマイズしたい場合は、Matplotlib を使用して独自のグラフを作成できます。 Matplotlib を使用して ROC 曲線をプロットする方法を示す例を次に示します。

import numpy as np
import matplotlib.pyplot as plt

# Generate some data
N      = 50
x_true = np.random.randn(N)
x_false= np.random.randn(N)

# Add some noise
x_true = x_true + np.random.randn(N) * 0.3
x_false= x_false + np.random.randn(N) * 0.3

# Create labels and predictions
y_true = np.ones(N)
y_false= np.zeros(N)
y_pred = np.concatenate([x_true, x_false])
y_true = np.concatenate([y_true, y_false])

# Determine threshold for each point
thresholds = np.sort(y_pred)
tpr_all    = []
fpr_all    = []
for threshold in thresholds:
    y_pred_bin = (y_pred >= threshold).astype(int)
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred_bin).ravel()
    tpr = tp / (tp + fn)
    fpr = fp / (fp + tn)
    tpr_all.append(tpr)
    fpr_all.append(fpr)    

plt.figure()
plt.plot(fpr_all, tpr_all)
plt.plot([0, 1], [0, 1], '--', color='grey')
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("ROC Curve")
plt.show()

この例では、最初にシミュレートされたデータを生成し、次にノイズを追加してより現実的なものにしました。次に、結合されたデータに対してラベルと予測を作成し、各ポイントの真陽性率と偽陽性率としきい値を計算しました。最後に Matplotlib を使用して ROC 曲線を描画します。この例では、Python プログラミングを使用して ROC 曲線を描画する方法と、カスタム チャートを描画する方法を示します。

結論

ROC 曲線は、分類器のパフォーマンスを評価するための重要なツールです。 Python では、Scikit-learn ライブラリと Matplotlib ライブラリの両方を使用して ROC 曲線を描画できます。 Scikit-learn は ROC 曲線を計算するための便利な関数を提供し、Matplotlib は高度にカスタマイズ可能な描画ツールを提供します。概要を示した例では、ROC 曲線をプロットするための 2 つの手法を示しています。ライブラリ関数を使用するかカスタム プロットを使用するかに関係なく、これらの手法は実際のデータに対する分類器のパフォーマンスを評価するのに役立ちます。

以上がPython の ROC 曲線テクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。