はじめに
ROC (受信者動作特性) 曲線と AUC は、バイナリ分類器の品質を評価するためによく使用されます。この記事では、まず ROC と AUC について簡単に紹介し、次に例を使用して Python で ROC 曲線を作成し、AUC を計算する方法を示します。
AUC の概要
AUC (Area Under Curve) は、機械学習二項分類モデルで非常に一般的に使用される評価指標であり、F1 スコアと比較してプロジェクトの不均衡に対する許容度が高く、現在一般的です。通常、機械学習ライブラリ (scikit-learn など) にはこの指標の計算が統合されていますが、モデルが別個であるか、独自に作成されている場合があります。この場合、トレーニング モデルの品質を評価したい場合は、 AUC 計算を自分で行うモジュールですが、この記事で情報を検索したときに libsvm-tools に非常にわかりやすい auc 計算があることがわかったので、今後の使用のために選択しました。
AUCの計算
AUCの計算は以下の3つのステップに分かれています:
1. 計算データの準備 モデルのトレーニング中にトレーニングセットのみがある場合、一般的にクロスバリデーションを使用して計算されます。評価セット (評価) は通常、予測スコアとそのターゲット カテゴリを必要とします (予測カテゴリではなくターゲット カテゴリであることに注意してください)
2.閾値に従って、水平 (X: 偽陽性率) と垂直 (Y: 真陽性率) の点
3. 座標点を曲線に接続した後、曲線の下の面積、つまり AUC の値を計算します。
Pythonコードを直接入力します
#! -*- coding=utf-8 -*- import pylab as pl from math import log,exp,sqrt evaluate_result="you file path" db = [] #[score,nonclk,clk] pos, neg = 0, 0 with open(evaluate_result,'r') as fs: for line in fs: nonclk,clk,score = line.strip().split('\t') nonclk = int(nonclk) clk = int(clk) score = float(score) db.append([score,nonclk,clk]) pos += clk neg += nonclk db = sorted(db, key=lambda x:x[0], reverse=True) #计算ROC坐标点 xy_arr = [] tp, fp = 0., 0. for i in range(len(db)): tp += db[i][2] fp += db[i][1] xy_arr.append([fp/neg,tp/pos]) #计算曲线下面积 auc = 0. prev_x = 0 for x,y in xy_arr: if x != prev_x: auc += (x - prev_x) * y prev_x = x print "the auc is %s."%auc x = [_v[0] for _v in xy_arr] y = [_v[1] for _v in xy_arr] pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc)) pl.xlabel("False Positive Rate") pl.ylabel("True Positive Rate") pl.plot(x, y)# use pylab to plot x and y pl.show()# show the plot on the screen
入力データセットはSVM予測結果を参照できます
形式は次のとおりです:
nonclk \t clk \t score
その中には:
1. nonclick: クリックされていないデータ。ネガティブサンプルの数とみなすことができます
2. clk: クリック数、ポジティブサンプルの数とみなすことができます
3. スコア: 予測スコア、このスコアをグループとして使用して、陽性サンプルと陰性サンプルの事前統計を実行すると、実行中の AUC 計算の量を削減できます
結果は次のようになります:
pylab がマシンにインストールされていない場合は、直接注釈を付けることができます依存関係と描画部分
注
上記のコード:
1. 計算できるのは 2 つのカテゴリの結果のみです ( 2 つのカテゴリのラベルについては、気軽に扱うことができます) )
2. 上記のコードの各スコアにはしきい値があります。実際、この効率は非常に低く、サンプルをサンプリングするか、水平軸座標を計算するときに同等の計算を実行できます
Python 描画 ROC に関連するその他の記事はこちらです。曲線と AUC 値の計算については、PHP 中国語 Web サイトに注意してください。