Main Content

addMetrics

分類の追加のパフォーマンス メトリクスの計算

R2022a 以降

    説明

    rocmetrics は、偽陽性率 (FPR)、真陽性率 (TPR)、および名前と値の引数 AdditionalMetrics で指定された追加のメトリクスを計算します。rocmetrics オブジェクトを作成した後、関数 addMetrics を使用して分類の追加のパフォーマンス メトリクスを計算できます。

    UpdatedROCObj = addMetrics(rocObj,metrics) は、rocmetrics オブジェクト rocObj に格納された分類モデルの情報を使用して、metrics で指定された分類の追加のパフォーマンス メトリクスを計算します。

    UpdatedROCObj には、rocObj のすべての情報に加え、addMetrics で計算された追加のパフォーマンス メトリクスが格納されます。関数で計算された追加のメトリクス (metrics) が Metrics プロパティの table に新しい変数として追加されます。

    rocObj の作成時に信頼区間を計算した場合、関数 addMetrics で追加の metrics に対する信頼区間が計算されます。Metrics プロパティの新しい変数に、1 列目がメトリクスの値に対応し、2 列目と 3 列目が下限と上限にそれぞれ対応する 3 列の行列が格納されます。

    すべて折りたたむ

    rocmetrics オブジェクトを作成する際に、マルチクラス分類問題のパフォーマンス メトリクス (FPR、TPR、および予測コスト) を計算します。追加のメトリクスとして陽性予測値 (PPV) と陰性予測値 (NPV) を計算し、それらをオブジェクトに追加します。

    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 の列の順序を指定します。既定では、rocmetrics は FPR と TPR を計算します。AdditionalMetrics="ExpectedCost" を指定して予測コストも計算します。

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

    rocObjMetrics プロパティの table には、3 つのすべてのクラスについてのパフォーマンス メトリクスの値が、クラスの順序に従って垂直方向に連結して格納されます。table から 2 番目のクラスの行を特定して表示します。

    idx = strcmp(rocObj.Metrics.ClassName,Mdl.ClassNames(2));
    rocObj.Metrics(idx,:)
    ans=13×5 table
          ClassName       Threshold    FalsePositiveRate    TruePositiveRate    ExpectedCost
        ______________    _________    _________________    ________________    ____________
    
        {'versicolor'}           1              0                    0            0.074074  
        {'versicolor'}           1           0.01                  0.7            0.023704  
        {'versicolor'}     0.95455           0.02                  0.8            0.017778  
        {'versicolor'}     0.91304           0.03                  0.9            0.011852  
        {'versicolor'}        -0.2           0.04                  0.9            0.013333  
        {'versicolor'}    -0.33333           0.06                  0.9            0.016296  
        {'versicolor'}        -0.6           0.08                  0.9            0.019259  
        {'versicolor'}    -0.86957           0.12                 0.92            0.023704  
        {'versicolor'}    -0.91111           0.16                 0.96            0.026667  
        {'versicolor'}    -0.95122           0.31                 0.96            0.048889  
        {'versicolor'}    -0.95238           0.38                 0.98            0.057778  
        {'versicolor'}    -0.95349           0.44                 0.98            0.066667  
        {'versicolor'}          -1              1                    1             0.14815  
    
    

    Metrics の table に、クラス名、しきい値、偽陽性率、真陽性率、および予測コスト (追加のメトリクス) の変数が格納されています。

    rocmetrics オブジェクトを作成した後、オブジェクトに格納された分類モデルの情報を使用して追加のメトリクスを計算できます。関数 addMetrics を使用して PPV と NPV を計算します。入力引数 rocObj を上書きするには、addMetrics の出力を入力に代入します。

    rocObj = addMetrics(rocObj,["PositivePredictiveValue","NegativePredictiveValue"]);

    Metrics プロパティを表示します。

    rocObj.Metrics(idx,:)
    ans=13×7 table
          ClassName       Threshold    FalsePositiveRate    TruePositiveRate    ExpectedCost    PositivePredictiveValue    NegativePredictiveValue
        ______________    _________    _________________    ________________    ____________    _______________________    _______________________
    
        {'versicolor'}           1              0                    0            0.074074                  NaN                    0.66667        
        {'versicolor'}           1           0.01                  0.7            0.023704              0.97222                    0.86842        
        {'versicolor'}     0.95455           0.02                  0.8            0.017778              0.95238                    0.90741        
        {'versicolor'}     0.91304           0.03                  0.9            0.011852               0.9375                    0.95098        
        {'versicolor'}        -0.2           0.04                  0.9            0.013333              0.91837                     0.9505        
        {'versicolor'}    -0.33333           0.06                  0.9            0.016296              0.88235                    0.94949        
        {'versicolor'}        -0.6           0.08                  0.9            0.019259              0.84906                    0.94845        
        {'versicolor'}    -0.86957           0.12                 0.92            0.023704               0.7931                    0.95652        
        {'versicolor'}    -0.91111           0.16                 0.96            0.026667                 0.75                    0.97674        
        {'versicolor'}    -0.95122           0.31                 0.96            0.048889              0.60759                    0.97183        
        {'versicolor'}    -0.95238           0.38                 0.98            0.057778              0.56322                    0.98413        
        {'versicolor'}    -0.95349           0.44                 0.98            0.066667              0.52688                    0.98246        
        {'versicolor'}          -1              1                    1             0.14815              0.33333                        NaN        
    
    

    Metrics の table の最後の 2 列に、変数 PositivePredictiveValueNegativePredictiveValue が指定した順序で追加されています。すべて棄却しきい値 (最大のしきい値) では陽性予測値 (PPV = TP/(TP+FP)) が NaN になり、すべて確定しきい値 (最小のしきい値) では陰性予測値 (NPV = TN/(TN+FN)) が NaN になることに注意してください。TPFPTN、および FN は、真陽性、偽陽性、真陰性、および偽陰性の数をそれぞれ表します。

    入力引数

    すべて折りたたむ

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

    追加で計算するモデルのパフォーマンス メトリクス。組み込みメトリクスの名前の文字ベクトルまたは string スカラー、名前の string 配列、関数ハンドル (@metricName)、または関数ハンドルの cell 配列として指定します。偽陽性率 (FPR) と真陽性率 (TPR) については、ROC 曲線を取得するために rocmetrics オブジェクトで常に計算されます。そのため、FPR と TPR を計算するように指定する必要はありません。

    • 組み込みメトリクス — 文字ベクトルまたは string スカラーを使用して次の組み込みメトリクスの名前を指定します。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)
      "FalseNegativeRate""fnr"、または "miss"偽陰性率 (FNR)、失敗率、FN/(TP+FN)
      "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 のクラス数を使用してスケール ベクトルが計算され、このスケール ベクトルに従ってパフォーマンス メトリクスがスケーリングされます。詳細については、パフォーマンス メトリクスを参照してください。

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

      metric = customMetric(C,scale,cost)

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

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

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

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

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

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

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

    例: ["Accuracy","PositivePredictiveValue"]

    例: {"Accuracy",@m1,@m2} は、精度のメトリクスとカスタム メトリクス m1 および m2 を追加のメトリクスとして指定します。addMetrics は、カスタム メトリクスの値を CustomMetric1 および CustomMetric2 という名前の変数として Metrics プロパティに格納します。

    データ型: char | string | cell | function_handle

    出力引数

    すべて折りたたむ

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

    入力引数 rocObj を上書きするには、addMetrics の出力を rocObj に代入します。

    rocObj = addMetrics(rocObj,metrics);

    バージョン履歴

    R2022a で導入