Main Content

perfcurve による性能曲線

関数 perfcurve は、受信者動作特性 (ROC) 曲線やその他の性能曲線を計算します。分類器に学習させた後、この関数を使用して、テスト データで分類器の性能を評価できます。

あるいは、rocmetrics オブジェクトを作成して、ROC 曲線やその他の性能曲線のパフォーマンス メトリクスを計算できます。rocmetrics はバイナリ分類問題とマルチクラス分類問題の両方をサポートし、ROC 曲線のプロット (plot)、マルチクラス問題の平均 ROC 曲線の計算 (average)、およびオブジェクト作成後の追加メトリクスの計算 (addMetrics) を行うためのオブジェクト関数が用意されています。詳細については、ROC 曲線とパフォーマンス メトリクスを参照してください。

perfcurve の入力スコアとラベル

perfcurve を任意の分類器、もしくは、入力データのインスタンス用に数値スコアを返す任意の関数と併用することができます。以下のような原則が適用されます。

  • 任意のインスタンスに対して分類器が高いスコアを返す場合は、そのインスタンスが陽性クラスである可能性を示します。

  • 低いスコアは、インスタンスが陰性クラスである可能性を示します。

分類器によっては、スコアがポイント X で陽性クラスのインスタンスの観測の事後確率であると解釈できる場合があります。そのようなスコアの例は、決定木のリーフにおける陽性の観測の比率です。この例では、スコアは 0 ~ 1 の範囲に収まり、陽性と陰性のクラスのスコアは合計で 1 になります。他のメソッドはスコアを返すことができます。その範囲は、スコアから事後クラス確率までの明白なマッピングのないマイナスとプラスの無限の間です。

perfcurve は入力スコア範囲にどのような制約も与えません。正規化がないため、どのような分類、回帰または近似方法から返されたスコアでも perfcurve を使用して処理できます。perfcurve では、入力スコアの性質や複数のクラスにおけるスコアの関係について何も仮定しません。例として、ABC の 3 つのクラスの問題を考慮してみましょう。そして、2 つのインスタンスの分類器によって返されたスコアが以下であると仮定します。

 ABC
インスタンス 10.40.50.1
インスタンス 20.40.10.5

C を無視して、クラス AB の分離の性能曲線を計算する場合は、B よりも A を選択して曖昧さに対処する必要があります。スコアの比 s(A)/s(B) またはスコアの差 s(A)-s(B) を使用できます。この選択は、スコアとその正規化の性質により異なります。perfcurve は常にインスタンスごとに 1 つのスコアを取ります。クラス A のみについてスコアを指定した場合、perfcurve では観測 1 と 2 が区別されません。この場合の性能曲線は最適でない可能性があります。

perfcurve はスコアを返す分類器との使用を意図しており、予測されたクラスのみを返す分類器のためのものではありません。逆の例として、2 クラスとデータのために硬分類ラベルの 0 または 1 を返す決定木を考えてみましょう。この場合は、性能曲線は単一の点に減ります。分類されたインスタンスを 1 つの方法だけで陽性と陰性のカテゴリに分割できるからです。

入力の場合は、perfcurve は、分類器がこれらのデータに割り当てたいくつかのデータとスコア用に真のクラス ラベルを取ります。既定の設定では、このユーティリティは受信者動作特性 (ROC) 曲線を計算し、X のために 1 - 特異度 (偽陽性率) の値を返し、Y のために感度 (真陽性率) の値を返します。いくつか提供されたものと以外の基準を選択するか、無名関数を通して任意の基準を指定することにより、XY のための他の基準を選択することができます。plot(X,Y) を使用して、計算された性能曲線を表示することができます。

パフォーマンス メトリクスの計算

perfcurve はさまざまな基準のための値を計算し、x 軸または y 軸のいずれかでプロットできます。そのような基準はすべて、2 行 2 列の混同行列、2 行 2 列のコスト行列、クラス カウントに適用されたスケールの 2 行 1 列のベクトルにより説明されます。

混同行列

confusionchart 行列 C は次のように定義されます。

(TPFNFPTN)

ここで

  • P は「陽性」を意味します。

  • N は「陰性」を意味します。

  • T は「真」を意味します。

  • F は「偽」を意味します。

たとえば、混同行列の 1 列目は、分類器が陽性クラスのインスタンスを識別する方法を定義します。C(1,1) は正しく識別された陽性のインスタンスの計算であり、C(1,2) は陰性と誤判別された陽性のインスタンスの計算です。

誤分類コスト行列

コスト行列はカテゴリごとに誤分類のコストを定義します。

(Cost(P|P)Cost(N|P)Cost(P|N)Cost(N|N))

ここで、Cost(I|J) はクラス J のインスタンスをクラス I に割り当てるコストです。通常は I=J に対して Cost(I|J)=0 です。柔軟性の場合は、perfcurve を使用して、正しい分類に対して非ゼロのコストを指定することもできます。

スケール ベクトル

2 つのスケールにはクラス確率に関する事前の情報が含まれます。perfcurve は、scale(P)=prior(P)*Nscale(N)=prior(N)*P を取り、合計 scale(P)+scale(N) を 1 に正規化することにより、これらのスケールを計算します。P=TP+FNN=TN+FP はそれぞれ陽性と陰性のクラスにおけるインスタンス総数です。それから、関数はスケールを乗法係数として対応クラスから総数に適用します。perfcurve は、scale(P) によって陽性クラスから計算を増加させて、scale(N) によって陰性のクラスからカウントします。たとえば、陽性の予測値 PPV = TP/(TP+FP) があるとします。カウント TP は陽性クラス、カウント FP は陰性クラスに由来しています。したがって、TPscale(P)FPscale(N) によってスケーリングする必要があります。事前確率を考慮して修正した PPV の式は、次のようになります。

PPV=scale(P)*TPscale(P)*TP+scale(N)*FP

データのスコアがすべて特定のしきい値を超えている場合、perfcurve ではすべてのインスタンスが 'positive' として分類されます。これは、TP が陽性クラス内のインスタンス総数であり、FP が陰性クラス内のインスタンス総数であることを意味しています。この場合、PPV は単純に事前確率によって与えられます。

PPV=prior(P)prior(P)+prior(N)

関数 perfcurve は、性能の尺度を表す 2 つのベクトル X および Y を返します。各測定は、confusioncostscale の値の関数です。名前で特定の測定を要求するか、関数ハンドルを供給してカスタムの測定を計算することができます。提供する関数は、confusioncostscale をその 3 つの入力として取り、出力値のベクトルを返さなければなりません。

しきい値

X に対する基準は陽性分類計算の単調な関数か、それに等しい供給されたスコアのためのしきい値でなければなりません。perfcurveX 基準の値とスコアのしきい値の間で 1 対 1 のマッピングを実行することができない場合は、エラー メッセージが表示され、終了します。

既定の設定では、perfcurve は、すべての可能なスコアのしきい値に対して XY 基準の値を計算します。その代わりに、入力引数として供給された制限した数の特定の X の値を計算することができます。いずれにせよ、M が要求した値に対して、perfcurveXY のための M+1 値を計算します。この M+1 値の最初の値は特別です。perfcurve は、TP インスタンス数をゼロに設定し、TN を陰性クラス内の総数に設定することにより、それを計算します。この値は、'reject all' しきい値に対応します。標準の ROC 曲線上で、これは (0,0) に置かれる特殊な点に変換されます。

NaN スコア値

入力スコア内に NaN 値がある場合は、perfcurveは以下の 2 つの方法のいずれかでそれを処理することができます。

  • NaN スコアの行を破棄。

  • それぞれのクラス内の偽の分類数に追加。

つまり、どのようなしきい値でも、陽性クラスからの NaN スコアをもつインスタンスは偽の陰性 (FN) としてカウントされ、陰性クラスからの NaN スコアをもつインスタンスは偽陽性 (FP) としてカウントされます。この例では、X または Y の最初の値は、TP をゼロに設定し、TN を総数から陰性クラス内の NaN 数を引いた値に設定することにより計算されます。これを理解するために、陽性クラス内の 2 行と陰性クラス内の 2 行をもつ例を考えてみましょう (各ペアは NaN スコアをもちます)。

クラススコア
陰性0.2
陰性NaN
陽性0.7
陽性NaN

NaN スコアをもつ行を破棄すると、perfcurve は、スコアのカットオフが多様であるものとして性能測定を次の表のように計算します。たとえば、0.5 のカットオフは中間行に対応します。ここでは、行 1 と 3 が正しく分類され、行 2 と 4 が省略されています。

TPFNFPTN
0101
1001
1010

NaN スコアをもつ行をそれぞれのクラスの偽のカテゴリに追加すると、perfcurve は、性能測定を次の表のように計算します。たとえば、0.5 のカットオフは中間行に対応します。ここでは、行 2 と 4 が正しく分類されたものとしてカウントされます。FN 列と FP 列のみがこの 2 つの表で異なることに注意してください。

TPFNFPTN
0211
1111
1120

マルチクラス分類問題

3 クラス以上をもつデータの場合は、perfcurve は入力に 1 つの陽性クラスと陰性クラスのリストを取ります。関数は、XY 値を計算し、陽性クラスを使用して TPFN を推定し、陰性クラスのカウントを使用して TNFP を推定します。オプションで、perfcurveY 値を陰性クラスごとに別々に計算できます。そして、Y に加えて、MC 列のサイズの行列を返すことができます。ここで、MX または Y の要素数であり、C は陰性クラスの数です。この機能を使用して、陰性クラス寄与の成分を監視することができます。たとえば、X 軸上に TP カウントをプロットし、Y 軸上に FP カウントをプロットすることができます。この例では、返された行列は、FP 成分がどのように陰性クラス全体に分割されているかを示します。

信頼区間

perfcurve を使用して、信頼限界を計算することもできます。perfcurve は、交差検証またはブートストラップを使用して信頼限界を計算します。labelsscores に cell 配列を供給すると、perfcurve は交差検証を使用し、cell 配列内の要素を交差検証集合として扱います。入力パラメーター NBoot を正の整数に設定すると、perfcurvenboot ブートストラップ複製を生成して、点単位の信頼限界を計算します。

perfcurve は、2 つの方法のいずれかで信頼限界を計算します。

  • 縦方向平均 (VA) — X の固定値で YT に対して信頼限界を計算します。信頼限界の計算にこの方法を使用するには、XVals 入力パラメーターを使用します。

  • しきい値平均 (TA) — 陽性クラスのスコアの固定しきい値で XY に信頼限界を計算します。信頼限界の計算にこの方法を使用するには、TVals 入力パラメーターを使用します。

観測値の重み

観測数ではなく重み付き観測値を使用するには、perfcurve への呼び出しで 'Weights' パラメーターを使用します。このパラメーターを使用する場合、perfcurve は、XY、および T の計算や交差検証による信頼限界の計算に、観測数ではなく入力された重み付き観測値を使用します。ブートストラップによる信頼限界の計算では、perfcurve は、重み付けを多項分布抽出確率として使用して N から N を復元抽出します。

参照

[1] Fawcett, T. “ROC Graphs: Notes and Practical Considerations for Researchers”, Machine Learning 31, no. 1 (2004): 1–38.

[2] Zweig, M., and G. Campbell. “Receiver-Operating Characteristic (ROC) Plots: A Fundamental Evaluation Tool in Clinical Medicine.” Clinical Chemistry 39, no. 4 (1993): 561–577.

参考

| | | | |

関連するトピック