Main Content

average

マルチクラス問題における平均受信者動作特性 (ROC) 曲線のパフォーマンス メトリクスの計算

R2022a 以降

    説明

    [FPR,TPR,Thresholds,AUC] = average(rocObj,type) は、type で指定された平均化方法を使用して、マルチクラス分類用の rocmetrics オブジェクト rocObj に格納されたパフォーマンス メトリクスの平均を計算します。関数は、Thresholds の各しきい値について、平均偽陽性率 (FPR) と平均真陽性率 (TPR) を返します。さらに、FPRTPR で構成される ROC 曲線の下の領域 AUC も返します。

    すべて折りたたむ

    rocmetrics オブジェクトを作成してマルチクラス分類問題のパフォーマンス メトリクスを計算し、関数 average を使用してメトリクスの平均値を計算します。average の出力を使用して平均 ROC 曲線をプロットします。

    fisheriris データ セットを読み込みます。行列 meas には、150 種類の花についての測定値が格納されています。ベクトル species には、それぞれの花の種類がリストされています。species には、3 種類の花の名前が格納されています。

    load fisheriris

    観測値を 3 つのラベルのいずれかに分類する分類木に学習させます。10 分割の交差検証をモデルに対して実行します。

    rng("default") % For reproducibility
    Mdl = fitctree(meas,species,Crossval="on");

    検証分割観測値の分類スコアを計算します。

    [~,Scores] = kfoldPredict(Mdl);
    size(Scores)
    ans = 1×2
    
       150     3
    
    

    出力 Scores は、1503 列のサイズの行列です。Scores の列の順序は Mdl.ClassNames に格納されている Mdl のクラスの順序に従います。

    species の真のラベルと Scores の分類スコアを使用して rocmetrics オブジェクトを作成します。Mdl.ClassNames を使用して Scores の列の順序を指定します。

    rocObj = rocmetrics(species,Scores,Mdl.ClassNames);

    rocmetrics により、さまざまなしきい値における FPR と TPR が計算され、各クラスの AUC の値が特定されます。

    マクロ平均法を使用して、さまざまなしきい値における FPR と TPR や AUC の値を含むパフォーマンス メトリクスの平均値を計算します。

    [FPR,TPR,Thresholds,AUC] = average(rocObj,"macro");

    平均 ROC 曲線をプロットし、AUC の平均値を表示します。曲線が原点 (0,0) から始まるように (0,0) を含めます。

    plot([0;FPR],[0;TPR])
    xlabel("False Positive Rate")
    ylabel("True Positive Rate")
    title("Average ROC Curve")
    hold on
    plot([0,1],[0,1],"k--")
    legend(join(["Macro-average (AUC =",AUC,")"]), ...
        Location="southeast")
    axis padded
    hold off

    Figure contains an axes object. The axes object with title Average ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 2 objects of type line. This object represents Macro-average (AUC = 0.97876 ).

    または、関数 plot を使用して平均 ROC 曲線を作成できます。AverageROCType="macro" を指定し、マクロ平均法を使用して平均 ROC 曲線のメトリクスを計算します。

    plot(rocObj,AverageROCType="macro",ClassNames=[])

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 2 objects of type roccurve, line. This object represents Macro-average (AUC = 0.9788).

    入力引数

    すべて折りたたむ

    分類性能を評価するオブジェクト。rocmetrics オブジェクトとして指定します。

    平均化方法。"micro""macro"、または "weighted" として指定します。

    • "micro" (マイクロ平均) — average は、1 対他のすべてのバイナリ分類問題を 1 つのバイナリ分類問題として扱うことで平均パフォーマンス メトリクスを求めます。関数は、結合されたバイナリ分類問題の混同行列の成分を計算し、混同行列の値を使用して平均の FPR と TPR を計算します。

    • "macro" (マクロ平均) — average は、1 対他のすべてのバイナリ分類問題の値を平均して FPR と TPR の平均値を計算します。

    • "weighted" (加重マクロ平均) — average は、マクロ平均法を使用し、事前クラス確率 (rocObjPrior プロパティ) を重みとして使用して、FPR と TPR の加重平均値を計算します。

    アルゴリズムのタイプに応じて、出力引数 (FPRTPR、および Thresholds) のベクトルの長さが決まります。詳細については、パフォーマンス メトリクスの平均を参照してください。

    データ型: char | string

    出力引数

    すべて折りたたむ

    平均偽陽性率。数値ベクトルとして返されます。

    平均真陽性率。数値ベクトルとして返されます。

    関数がパフォーマンス メトリクス (FPRTPR) の各値を求める分類スコアのしきい値。ベクトルとして返されます。

    FPRTPR で構成される平均 ROC 曲線の下の領域。数値スカラーとして返されます。

    詳細

    すべて折りたたむ

    受信者動作特性 (ROC) 曲線

    ROC 曲線は、分類スコアのさまざまなしきい値についての真陽性率と偽陽性率の関係を示します。

    真陽性率と偽陽性率は次のように定義されます。

    • 真陽性率 (TPR) (再現率または感度とも呼ばれる) — TP/(TP+FN)。ここで、TP は真陽性の数、FN は偽陰性の数です。

    • 偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる) — FP/(TN+FP)。ここで、FP は偽陽性の数、TN は真陰性の数です。

    ROC 曲線の各点は、特定のしきい値についての TPR と FPR の値のペアに対応します。しきい値を変化させてさまざまな TPR と FPR の値のペアを求め、それらのペアを使用して ROC 曲線を作成できます。rocmetrics は、各クラスについて、すべての異なる調整スコアの値をしきい値として使用して ROC 曲線を作成します。

    マルチクラス分類問題の場合、rocmetrics は、バイナリ問題がクラスごとに 1 つになるように一連の 1 対他のバイナリ分類問題を定式化し、対応するバイナリ問題を使用して各クラスの ROC 曲線を求めます。それぞれのバイナリ問題において、1 つのクラスが陽性で残りが陰性であると仮定されます。

    バイナリ分類問題で分類スコアを行列として指定した場合、rocmetrics は 1 対他のバイナリ分類問題を 2 つ定式化します。rocmetrics は、それらの問題のそれぞれで 1 つのクラスを陽性クラス、他のクラスを陰性クラスとして扱い、2 つの ROC 曲線を求めます。その曲線のいずれかを使用してバイナリ分類問題を評価します。

    詳細については、ROC 曲線とパフォーマンス メトリクスを参照してください。

    ROC 曲線の下の領域 (AUC)

    ROC 曲線の下の領域 (AUC) は、ROC 曲線の FPR = 0 から FPR = 1 までの FPR に対する積分 (TPR の値) に対応します。

    AUC は、可能なすべてのしきい値についての集約した性能測定を提供します。AUC の値は 0 から 1 までの範囲で表され、AUC の値が大きいほど分類器の性能が高いことを示します。

    1 対他 (OVA) 符号化設計

    1 対他 (OVA) 符号化設計は、マルチクラス分類問題を一連のバイナリ分類問題に縮小します。この符号化設計では、各バイナリ分類で 1 つのクラスを陽性として扱い、残りのクラスを陰性として扱います。rocmetrics は、マルチクラス分類に OVA 符号化設計を使用し、各クラスについての性能をそのクラスが陽性であるバイナリ分類を使用して評価します。

    たとえば、3 つのクラスに対する OVA 符号化設計では 3 つのバイナリ分類を定式化します。

    Binary 1Binary 2Binary 3Class 1111Class 2111Class 3111

    各行はクラスに対応し、各列はバイナリ分類問題に対応します。1 番目のバイナリ分類では、クラス 1 が陽性クラスで残りのクラスは陰性であると仮定しています。rocmetrics は、1 番目のクラスについての性能を 1 番目のバイナリ分類問題を使用して評価します。

    アルゴリズム

    すべて折りたたむ

    マルチクラス分類問題の調整スコア

    Scores を行列として指定した場合、rocmetrics は、各クラスの分類スコア (rocmetrics の入力引数 Scores) を残りのクラスのスコアとの関係で調整します。具体的には、観測値が与えられたクラスの調整スコアは、そのクラスのスコアと残りのクラスのスコアのうちの最大値との差になります。

    たとえば、3 つのクラスの分類問題で Scores の行が [s1,s2,s3] である場合、調整スコアの値は [s1-max(s2,s3),s2-max(s1,s3),s3-max(s1,s2)] になります。

    rocmetrics は、各クラスのパフォーマンス メトリクスを調整スコアの値を使用して計算します。

    バイナリ分類問題の場合、Scores を 2 列の行列または列ベクトルとして指定できます。分類オブジェクトの関数 predict は分類スコアを行列として返すため、2 列の行列を使用する方が、返される行列を rocmetrics に渡すことができて簡単です。スコアを 2 列の行列として渡すと、rocmetrics はマルチクラス分類のスコアの調整と同じ方法でスコアを調整し、両方のクラスのパフォーマンス メトリクスを計算します。2 つのクラスのうちの一方のメトリクスの値を使用してバイナリ分類問題を評価できます。2 列の行列を渡した場合に rocmetrics から返されるクラスのメトリクスの値は、クラスの分類スコアを列ベクトルとして指定した場合に rocmetrics から返されるメトリクスの値と等しくなります。

    代替機能

    • 関数 plot を使用して平均 ROC 曲線を作成できます。関数は、XDataYDataThresholds、および AUC のプロパティを含む ROCCurve オブジェクトを返します。これらのプロパティは、関数 average の出力引数 FPRTPRThresholds、および AUC にそれぞれ対応します。例については、マルチクラス分類器の平均 ROC 曲線のプロットを参照してください。

    参照

    [1] Sebastiani, Fabrizio. "Machine Learning in Automated Text Categorization." ACM Computing Surveys 34, no. 1 (March 2002): 1–47.

    バージョン履歴

    R2022a で導入