Main Content

plot

受信者動作特性 (ROC) 曲線やその他の性能曲線のプロット

R2022a 以降

    説明

    plot(rocObj) は、rocmetrics オブジェクト rocObjClassNames プロパティの各クラスについて、真陽性率 (TPR) と偽陽性率 (FPR) の関係を示す受信者動作特性 (ROC) 曲線を作成します。関数は各曲線のモデル操作点をマークし、ROC 曲線の下の領域 (AUC) の値と曲線のクラス名を凡例に表示します。

    plot(ax,rocObj) は、現在の座標軸ではなく ax によって指定された座標軸にプロットを作成します。

    plot(___,Name=Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。たとえば、AverageROCType="macro",ClassNames=[] は、マクロ平均法を使用して平均パフォーマンス メトリクスを計算し、平均 ROC 曲線のみをプロットします。

    curveObj = plot(___) は、各性能曲線の ROCCurve オブジェクトを返します。

    [curveObj,graphicsObjs] = plot(___) は、モデル操作点と対角線のグラフィックス オブジェクトも返します。

    すべて折りたたむ

    マルチクラス分類問題の rocmetrics オブジェクトを作成し、各クラスの 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 のクラスの順序に従います。Mdl.ClassNames に格納されているクラスの順序を表示します。

    Mdl.ClassNames
    ans = 3x1 cell
        {'setosa'    }
        {'versicolor'}
        {'virginica' }
    
    

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

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

    各クラスの ROC 曲線をプロットします。

    plot(rocObj)

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 7 objects of type roccurve, scatter, line. These objects represent setosa (AUC = 1), setosa Model Operating Point, versicolor (AUC = 0.9636), versicolor Model Operating Point, virginica (AUC = 0.9636), virginica Model Operating Point.

    関数 plot は、各クラスの ROC 曲線をプロットし、モデル操作点に塗りつぶされた円のマーカーを表示します。凡例に各曲線のクラスの名前と AUC の値が表示されます。

    関数 plot を使用して平均 ROC 曲線をプロットします。関数 plot の出力の ROCCurve オブジェクトを使用してメトリクスの平均値を取得します。

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

    load fisheriris

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

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

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

    [~,Scores] = kfoldPredict(Mdl);

    rocmetrics オブジェクトを作成します。

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

    各クラスの ROC 曲線をプロットします。AverageROCType="macro" を指定し、マクロ平均法を使用して平均 ROC 曲線のメトリクスを計算します。

    curveObj = plot(rocObj,AverageROCType="macro")

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 8 objects of type roccurve, scatter, line. These objects represent setosa (AUC = 1), setosa Model Operating Point, versicolor (AUC = 0.9636), versicolor Model Operating Point, virginica (AUC = 0.9636), virginica Model Operating Point, Macro-average (AUC = 0.9788).

    curveObj = 
      4x1 ROCCurve array:
    
      ROCCurve    (setosa (AUC = 1))
      ROCCurve    (versicolor (AUC = 0.9636))
      ROCCurve    (virginica (AUC = 0.9636))
      ROCCurve    (Macro-average (AUC = 0.9788))
    
    

    関数 plot は、各性能曲線の ROCCurve オブジェクトを返します。このオブジェクトを使用して、プロットの作成後にそのプロパティのクエリと設定を行うことができます。

    curveObj の 4 番目の要素に格納されている平均 ROC 曲線のデータ点を表示します。

    tbl_average = table(curveObj(4).Thresholds,curveObj(4).XData,curveObj(4).YData, ...
        VariableNames=["Threshold",curveObj(4).XAxisMetric,curveObj(4).YAxisMetric])
    tbl_average=32×3 table
        Threshold    FalsePositiveRate    TruePositiveRate
        _________    _________________    ________________
    
               1                 0                  0     
               1         0.0066667            0.60667     
         0.95455              0.01               0.64     
         0.95349              0.01               0.68     
         0.95238          0.013333            0.72667     
         0.95122          0.013333            0.82667     
         0.91304          0.016667               0.86     
         0.91111          0.023333            0.88667     
         0.86957          0.026667            0.91333     
             0.6          0.026667            0.92667     
         0.33333          0.026667               0.94     
             0.2          0.026667            0.94667     
            -0.2              0.03            0.94667     
        -0.33333          0.036667            0.94667     
            -0.6          0.046667            0.94667     
        -0.66667          0.053333            0.94667     
          ⋮
    
    

    rocmetrics オブジェクトを作成し、関数 plot を使用して性能曲線をプロットします。関数 plot の名前と値の引数 XAxisMetricYAxisMetric を指定して、ROC 曲線とは異なるタイプの性能曲線をプロットします。関数 plot を呼び出すときに新しいメトリクスを指定すると、その新しいメトリクスが関数で計算され、それらを使用して曲線がプロットされます。

    ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子 (X) と、不良 ('b') または良好 ('g') という 351 個の二項反応 (Y) が含まれています。

    load ionosphere

    データを学習セットとテスト セットに分割します。観測値の約 80% をサポート ベクター マシン (SVM) モデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能の検定に使用します。データの分割には cvpartition を使用します。

    rng("default") % For reproducibility of the partition
    c = cvpartition(Y,Holdout=0.20);
    trainingIndices = training(c); % Indices for the training set
    testIndices = test(c); % Indices for the test set
    XTrain = X(trainingIndices,:);
    YTrain = Y(trainingIndices);
    XTest = X(testIndices,:);
    YTest = Y(testIndices);

    SVM 分類モデルに学習させます。

    Mdl = fitcsvm(XTrain,YTrain);

    テスト セットの分類スコアを計算します。

    [~,Scores] = predict(Mdl,XTest);

    rocmetrics オブジェクトを作成します。関数 rocmetrics により、さまざまなしきい値における FPR と TPR が計算されます。

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

    1 番目のクラスの適合率-再現率曲線をプロットします。"y" 軸のメトリクスを適合率 (つまり陽性の予測値)、"x" 軸のメトリクスを再現率 (つまり真陽性率) として指定します。関数 plot により、新しいメトリクスが計算されて曲線がプロットされます。モデル操作点に塗りつぶされた円を表示します。また、関数 trapz の台形法を使用して適合率-再現率曲線の下の領域を計算し、その値を凡例に表示します。

    curveObj = plot(rocObj,ClassNames=Mdl.ClassNames(1), ...
        YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate");
    hold on
    idx = find(curveObj.Thresholds>=0,1,'last');
    scatter(curveObj.XData(idx),curveObj.YData(idx),[],curveObj.Color,"filled")
    xyData = rmmissing([curveObj.XData curveObj.YData]);
    auc = trapz(xyData(:,1),xyData(:,2));
    legend(join([string(Mdl.ClassNames(1)) " (AUC = " string(auc) ")"],""), ...
        join([string(Mdl.ClassNames(1)) "Model Operating Point"]), ...
        Location="southwest")
    xlabel("Recall")
    ylabel("Precision")
    title("Precision-Recall Curve")
    hold off

    1 番目のクラスの検出誤差トレードオフ (DET) グラフをプロットします。"y" 軸のメトリクスを偽陰性率、"x" 軸のメトリクスを偽陽性率として指定します。"x" 軸と "y" 軸に対数スケールを使用します。

    f = figure;
    plot(rocObj,ClassNames=Mdl.ClassNames(1), ...
        YAxisMetric="FalseNegativeRate",XAxisMetric="FalsePositiveRate")
    f.CurrentAxes.XScale = "log";
    f.CurrentAxes.YScale = "log";
    title("DET Graph")

    ブートストラップ標本を使用して FPR と TPR の固定のしきい値に対する信頼区間を計算し、ROC 曲線に TPR の信頼区間をプロットします。

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

    load fisheriris

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

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

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

    [~,Scores] = kfoldPredict(Mdl);

    rocmetrics オブジェクトを作成します。NumBootstraps を 100 と指定し、100 個のブートストラップ標本を使用して信頼区間を計算します。

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

    TPR の ROC 曲線と信頼区間をプロットします。信頼区間を表示するために ShowConfidenceIntervals=true を指定します。

    plot(rocObj,ShowConfidenceIntervals=true)

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 7 objects of type roccurve, scatter, line. These objects represent setosa (AUC = 1), setosa Model Operating Point, versicolor (AUC = 0.9896), versicolor Model Operating Point, virginica (AUC = 0.9896), virginica Model Operating Point.

    各曲線の周囲に影付きの領域で信頼区間が示されます。setosa の信頼区間は非ゼロの偽陽性率の幅が 0 であるため、プロットに setosa に対する影付きの領域はありません。

    rocmetrics は、交差検証済みスコアから ROC 曲線を計算します。そのため、各 ROC 曲線は、データ セット全体 (measspecies) で学習させたモデルの未観測のテスト データでの ROC 曲線の推定を表します。信頼区間は、曲線の不確かさの推定を表しています。この不確かさは、データ セット全体で学習させたモデルの未観測のテスト データでの分散によるものです。

    rocmetrics オブジェクトを作成してバイナリ分類問題のパフォーマンス メトリクス (FPR と TPR) を計算し、関数 plot を使用して ROC 曲線をプロットします。関数 plot により、モデル操作点に塗りつぶされた円が表示されます。モデル操作点にデータ ヒントを表示します。

    ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子 (X) と、不良 ('b') または良好 ('g') という 351 個の二項反応 (Y) が含まれています。

    load ionosphere

    データを学習セットとテスト セットに分割します。観測値の約 80% をサポート ベクター マシン (SVM) モデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能の検定に使用します。データの分割には cvpartition を使用します。

    rng("default") % For reproducibility of the partition
    c = cvpartition(Y,Holdout=0.20);
    trainingIndices = training(c); % Indices for the training set
    testIndices = test(c); % Indices for the test set
    XTrain = X(trainingIndices,:);
    YTrain = Y(trainingIndices);
    XTest = X(testIndices,:);
    YTest = Y(testIndices);

    SVM 分類モデルに学習させます。

    Mdl = fitcsvm(XTrain,YTrain);

    テスト セットの分類スコアを計算します。

    [~,Scores] = predict(Mdl,XTest);

    rocmetrics オブジェクトを作成します。

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

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

    ROC 曲線をプロットします。ClassNames を指定して 1 番目のクラスの曲線をプロットします。

    curveObj = plot(rocObj,ClassNames=Mdl.ClassNames(1));

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 3 objects of type roccurve, scatter, line. These objects represent b (AUC = 0.8587), b Model Operating Point.

    関数 plot は、各性能曲線の ROCCurve オブジェクトを返します。このオブジェクトを使用して、プロットの作成後にそのプロパティのクエリと設定を行うことができます。

    塗りつぶされた円のマーカーは、しきい値が 0 であるモデル操作点を示します。0 以下の最も大きいしきい値をもつ点が関数で選択されます。凡例に曲線のクラスの名前と AUC の値が表示されます。

    曲線上のデータ点をクリックしてデータ ヒントを作成できます。あるいは、関数 datatip を使用してデータ ヒントを作成できます。

    rocObjMetrics プロパティでクラス b のモデル操作点を特定します。関数 predict は、スコアが高い方のクラスに観測値を分類します。これは、調整スコアが非負になるクラスに対応します。つまり、関数 predict で使用される標準のしきい値は 0 です。rocObjMetrics プロパティのクラス b に対する行から、最も小さい非負のしきい値をもつ点を見つけます。曲線上の点は、しきい値 0 の性能と同じ性能を示します。

    idx_b = strcmp(rocObj.Metrics.ClassName,"b");
    t = rocObj.Metrics(idx_b,:);
    X = rocObj.Metrics(idx_b,:).FalsePositiveRate;
    Y = rocObj.Metrics(idx_b,:).TruePositiveRate;
    T = rocObj.Metrics(idx_b,:).Threshold;
    idx_model = find(T>=0,1,"last");
    modelpt = [T(idx_model) X(idx_model) Y(idx_model)]
    modelpt = 1×3
    
        0.1044    0.0222    0.6800
    
    

    モデル操作点にデータ ヒントを表示します。ターゲットのグラフ オブジェクトを関数 plot の出力オブジェクトとして指定します。

    datatip(curveObj,DataIndex=idx_model,Location="southeast");

    Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 3 objects of type roccurve, scatter, line. These objects represent b (AUC = 0.8587), b Model Operating Point.

    入力引数

    すべて折りたたむ

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

    ターゲットの座標軸。Axes オブジェクトを指定します。

    現在の座標軸が直交である場合に座標軸が指定されなかった場合、plot は現在の座標軸 (gca) を使用します。Axes オブジェクトを作成する方法の詳細については、axesgca を参照してください。

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate" は、適合率 (陽性の予測値) と再現率 (真陽性率) の関係を表す適合率-再現率曲線をプロットします。

    ROC 曲線の平均化方法。"none""micro""macro""weighted"、方法の名前の string 配列、または方法の名前の cell 配列として指定します。

    • "none" (既定) を指定した場合、関数 plot で平均 ROC 曲線が作成されません。plot で ROC 曲線以外の性能曲線を作成する場合、AverageROCType の値は "none" にする必要があります。

    • string 配列または文字ベクトルの cell 配列として複数の方法を指定した場合、関数 plot で指定した方法を使用して複数の平均 ROC 曲線がプロットされます。

    • 1 つ以上の平均化方法を指定し、ClassNames=[] を指定した場合、関数 plot で平均 ROC 曲線のみがプロットされます。

    plot は、マルチクラス分類問題のパフォーマンス メトリクスの平均を計算し、次の方法を使用して平均 ROC 曲線をプロットします。

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

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

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

    平均 ROC 曲線用に plot から返される ROCCurve オブジェクトの XDataYData、および Thresholds プロパティに含まれているベクトルの長さは、アルゴリズムのタイプに応じて決まります。詳細については、パフォーマンス メトリクスの平均を参照してください。

    例: AverageROCType="macro"

    例: AverageROCType=["micro","macro"]

    データ型: char | string

    プロットするクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames の値とデータ型は、rocObjClassNames プロパティのクラス名のものと一致しなければなりません。(文字配列または string 配列は文字ベクトルの cell 配列として扱われます。)

    • 複数のクラス ラベルを指定した場合、関数 plot で各クラスの ROC 曲線がプロットされます。

    • ClassNames=[] を指定し、AverageROCType を使用して 1 つ以上の平均化方法を指定した場合、関数 plot で平均 ROC 曲線のみがプロットされます。

    例: ClassNames=["red","blue"]

    データ型: single | double | logical | char | string | cell | categorical

    y 軸のメトリクス (YAxisMetric) の信頼区間を表示するためのフラグ。logical 0 (false) または 1 (true) として指定します。

    ShowConfidenceIntervals の値を true にできるのは、rocObjMetrics プロパティに y 軸のメトリクスの信頼区間が格納されている場合のみです。

    例: ShowConfidenceIntervals=true

    データ型: logical

    [0,0] から [1,1] までの対角線を表示するためのフラグ。logical 1 (true) または 0 (false) として指定します。

    既定値は、ROC 曲線または平均 ROC 曲線をプロットする場合は true、それ以外の場合は false です。

    ROC 曲線のプロットでは、対角線はランダムな分類器を表し、[0,0][0,1]、および [1,1] を通る線は完璧な分類器を表します。

    例: ShowDiagonalLine=false

    データ型: logical

    モデル操作点を表示するためのフラグ。logical 1 (true) または 0 (false) として指定します。

    既定値は、ROC 曲線の場合は true、平均 ROC 曲線の場合は false です。ROC 以外の性能曲線に対しては、ShowModelOperatingPoint の値は false にする必要があります。

    例: ShowModelOperatingPoint=false

    データ型: logical

    x 軸のメトリクス。組み込みメトリクスの名前またはカスタム メトリクスの名前の文字ベクトルまたは string スカラー、あるいは関数ハンドル (@metricName) として指定します。

    • 組み込みメトリクス — 文字ベクトルまたは string スカラーを使用して次の組み込みメトリクスの名前を指定します。

      名前説明
      "TruePositives" または "tp"真陽性の数 (TP)
      "FalseNegatives" または "fn"偽陰性の数 (FN)
      "FalsePositives" または "fp"偽陽性の数 (FP)
      "TrueNegatives" または "tn"真陰性の数 (TN)
      "SumOfTrueAndFalsePositives" または "tp+fp"TP と FP の和
      "RateOfPositivePredictions" または "rpp"陽性予測率 (RPP)、(TP+FP)/(TP+FN+FP+TN)
      "RateOfNegativePredictions" または "rnp"陰性予測率 (RNP)、(TN+FN)/(TP+FN+FP+TN)
      "Accuracy" または "accu"精度、(TP+TN)/(TP+FN+FP+TN)
      "TruePositiveRate" または "tpr"真陽性率 (TPR) (再現率または感度とも呼ばれる)、TP/(TP+FN)
      "FalseNegativeRate""fnr"、または "miss"偽陰性率 (FNR)、失敗率、FN/(TP+FN)
      "FalsePositiveRate" または "fpr"偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる)、FP/(TN+FP)
      "TrueNegativeRate""tnr"、または "spec"真陰性率 (TNR)、特異度、TN/(TN+FP)
      "PositivePredictiveValue""ppv"、または "prec"陽性予測値 (PPV)、適合率、TP/(TP+FP)
      "NegativePredictiveValue" または "npv"陰性予測値 (NPV)、TN/(TN+FN)
      "ExpectedCost" または "ecost"

      予測コスト、(TP*cost(P|P)+FN*cost(N|P)+FP*cost(P|N)+TN*cost(N|N))/(TP+FN+FP+TN)。ここで、cost[0,cost(N|P);cost(P|N),0] を含む 2 行 2 列の誤分類コスト行列です。cost(N|P) は陽性クラス (P) を陰性クラス (N) として誤分類するコストで、cost(P|N) は陰性クラスを陽性クラスとして誤分類するコストです。

      1 対他の各バイナリ問題について、rocmetrics の名前と値の引数 Cost で指定された KK 列の行列が 2 行 2 列の行列に変換されます。詳細については、誤分類コスト行列を参照してください。

      事前クラス確率 (Prior) と Labels のクラス数を使用してスケール ベクトルが計算され、このスケール ベクトルに従ってパフォーマンス メトリクスがスケーリングされます。詳細については、パフォーマンス メトリクスを参照してください。

    • Metrics プロパティに格納されているカスタム メトリクス — 入力オブジェクト rocObjMetrics プロパティに格納されているカスタム メトリクスの名前を指定します。関数 rocmetrics は、カスタム メトリクスに "CustomMetricN" として名前を付けます。ここで、N はカスタム メトリクスを参照する番号です。たとえば、Metrics の 1 番目のカスタム メトリクスを x 軸のメトリクスとして使用するには XAxisMetric="CustomMetric1" と指定します。

    • カスタム メトリクス — 関数ハンドルを使用して新しいカスタム メトリクスを指定します。パフォーマンス メトリクスを返すカスタム関数は次の形式でなければなりません。

      metric = customMetric(C,scale,cost)

      • 出力引数 metric はスカラー値です。

      • カスタム メトリクスは混同行列 (C)、スケール ベクトル (scale)、およびコスト行列 (cost) の関数です。1 対他の各バイナリ分類について、それらの入力値が特定されます。詳細については、パフォーマンス メトリクスを参照してください。

        • C[TP,FN;FP,TN] で構成される 22 列の混同行列です。

        • scale21 列のスケール ベクトルです。

        • cost22 列の誤分類コスト行列です。

      関数 plot は、カスタム メトリクスの軸ラベルに "Custom Metric" という名前を付けます。

      カスタム メトリクスに対する交差検証はサポートされていません。代わりに、rocmetrics オブジェクトの作成時にブートストラップを使用するように指定できます。

    入力オブジェクト rocObjMetrics プロパティにない新しいメトリクスを指定すると、関数 plot でメトリクスの値が計算されてプロットされます。rocObj の作成時に信頼区間を計算した場合、関数 plot で新しいメトリクスの信頼区間も計算されます。

    関数 plot は、パフォーマンス メトリクスの値に含まれる NaN を無視します。すべて棄却しきい値 (TP = FP = 0) では陽性予測値 (PPV) が NaN になり、すべて確定しきい値 (TN = FN = 0) では陰性予測値 (NPV) が NaN になることに注意してください。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

    例: XAxisMetric="FalseNegativeRate"

    データ型: char | string | function_handle

    y 軸のメトリクス。組み込みメトリクスの名前またはカスタム メトリクスの名前の文字ベクトルまたは string スカラー、あるいは関数ハンドル (@metricName) として指定します。詳細については、XAxisMetric を参照してください。

    例: YAxisMetric="FalseNegativeRate"

    データ型: char | string | function_handle

    出力引数

    すべて折りたたむ

    性能曲線のオブジェクト。ROCCurve オブジェクトまたは ROCCurve オブジェクトの配列として返されます。plot は、各性能曲線の ROCCurve オブジェクトを返します。

    curveObj は、プロットの作成後にそのプロパティのクエリと変更を行う場合に使用します。プロパティの一覧については、ROCCurve のプロパティ を参照してください。

    モデル操作点と対角線のグラフィックス オブジェクト。Scatter オブジェクトと Line オブジェクトを含むグラフィックス配列として返されます。

    graphicsObjs には、各モデル操作点の Scatter オブジェクト (ShowModelOperatingPoint=true の場合) と対角線の Line オブジェクト (ShowDiagonalLine=true の場合) が格納されます。graphicsObjs は、プロットの作成後にモデル操作点や対角線のプロパティのクエリと変更を行う場合に使用します。プロパティの一覧については、Scatter のプロパティ および Line のプロパティ を参照してください。

    詳細

    すべて折りたたむ

    受信者動作特性 (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 番目のバイナリ分類問題を使用して評価します。

    モデルの操作点

    モデル操作点は、標準のしきい値に対応する FPR と TPR を表します。

    標準のしきい値は、rocmetrics オブジェクトの作成時に指定された引数 Scores (分類スコア) の入力形式に応じて次のように決まります。

    • Scores を行列として指定した場合、rocmetricsScores の値がマルチクラス分類問題のスコアであると仮定し、調整スコアの値を使用します。マルチクラス分類モデルでは、スコアが最も高いクラスに観測値を分類します。これは、調整スコアの非負のスコアに対応します。したがって、しきい値は 0 になります。

    • Scores を列ベクトルとして指定した場合、rocmetricsScores の値が ClassNames で指定されたクラスの事後確率であると仮定します。バイナリ分類モデルでは、事後確率が高い方のクラス、つまり事後確率が 0.5 よりも高いクラスに観測値を分類します。したがって、しきい値は 0.5 になります。

    バイナリ分類問題の場合、Scores を 2 列の行列または列ベクトルとして指定できます。ただし、分類スコアが事後確率でない場合は、Scores を行列として指定する必要があります。バイナリ分類器では、スコアが高い方のクラスに観測値を分類します。これは、調整スコアが非負になるクラスと等価です。そのため、バイナリ分類器に対して Scores を行列として指定すると、マルチクラス分類器に適用される方式と同じ方式を使用して、rocmetrics で正しいモデル操作点を特定できます。事後確率でない分類スコアをベクトルとして指定した場合は、モデル操作点のしきい値として常に 0.5 が使用されるため、rocmetrics で正しいモデル操作点を識別できません。

    関数 plot は、各 ROC 曲線のモデル操作点に塗りつぶされた円のマーカーを表示します (ShowModelOperatingPoint を参照)。関数では標準のしきい値に対応する点が選択されます。曲線に標準のしきい値に対するデータ点がない場合、関数は標準のしきい値より大きい最小のしきい値をもつ点を特定します。曲線上の点は、標準のしきい値の性能と同じ性能を示します。

    アルゴリズム

    すべて折りたたむ

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

    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 から返されるメトリクスの値と等しくなります。

    参照

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

    バージョン履歴

    R2022a で導入