Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

rocmetrics

バイナリ分類器およびマルチクラス分類器の受信者動作特性 (ROC) 曲線とパフォーマンス メトリクス

R2022a 以降

説明

分類モデルの性能を受信者動作特性 (ROC) 曲線またはその他のパフォーマンス メトリクスを使用して評価するには、rocmetrics オブジェクトを作成します。rocmetrics は、バイナリ問題とマルチクラス問題の両方をサポートします。

rocmetrics は、各クラスについて、1 対他の ROC 曲線のパフォーマンス メトリクスを計算します。平均 ROC 曲線のメトリクスは、関数 average を使用して計算できます。ROC 曲線のメトリクスを計算した後、関数 plot を使用してそれらをプロットできます。

rocmetrics は、ROC 曲線と ROC 曲線の下の領域 (AUC) を取得するために、既定では偽陽性率 (FPR) と真陽性率 (TPR) を計算します。追加のメトリクスを計算する場合は、オブジェクトの作成時に名前と値の引数 AdditionalMetrics を指定するか、オブジェクトの作成後に関数 addMetrics を呼び出して指定できます。計算されたメトリクスと AUC の値は、rocmetrics オブジェクトの Metrics プロパティと AUC プロパティにそれぞれ格納されます。

rocmetrics は、NumBootstraps の値を正の整数に設定するか、真のクラス ラベル (Labels)、分類スコア (Scores)、および観測値の重み (Weights) の交差検証データを指定すると、パフォーマンス メトリクスの点単位の信頼区間を計算します。詳細については、点単位の信頼区間を参照してください。

作成

説明

rocObj = rocmetrics(Labels,Scores,ClassNames) は、Labels の真のクラス ラベルと Scores の分類スコアを使用して rocmetrics オブジェクトを作成します。Labels は長さ n のベクトルとして指定し、ScoresnK 列のサイズの行列として指定します。ここで、n は観測値の数、K はクラスの数です。ClassNames は、Scores における列の順序を指定します。

Metrics プロパティと AUC プロパティに、ScoresClassNames を指定した各クラスについてのパフォーマンス メトリクスと AUC の値が格納されます。

LabelsScores で交差検証データを cell 配列として指定すると、rocmetrics はパフォーマンス メトリクスの信頼区間を計算します。

rocObj = rocmetrics(Labels,Scores,ClassNames,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、NumBootstraps=100 は、100 個のブートストラップ標本を抽出してパフォーマンス メトリクスの信頼区間を計算します。

入力引数

すべて展開する

真のクラス ラベル。数値ベクトル、logical ベクトル、categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。これらのいずれかの型の cell 配列として、Labels で交差検証データを指定することもできます。

  • 交差検証データでない場合、Labels の長さと Scores の行数は等しくなければなりません。

  • 交差検証データの場合、LabelsScores、および Weights を同じ要素数の cell 配列として指定する必要があります。rocmetrics は、cell 配列の要素を 1 つの交差検証分割のデータとして扱い、パフォーマンス メトリクスの点単位の信頼区間を計算します。Labels{i} の長さと Scores{i} の行数は等しくなければなりません。

Labels または Labels{i} の各行は、1 つの観測値の真のラベルを表します。

この引数は Labels プロパティを設定します。

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

分類スコア。数値行列または数値行列の cell 配列として指定します。

Scores の行列の各行には、ClassNames で指定されたすべてのクラスに対する 1 つの観測値の分類スコアが格納されます。Scores の列の順序は ClassNames のクラスの順序と一致しなければなりません。

  • 行列入力の場合、Score(j,k) はクラス ClassNames(k) に対する観測値 j の分類スコアです。バイナリ分類とマルチクラス分類のどちらでも、分類モデル オブジェクトの関数 predict の 2 番目の出力引数を使用して Scores を指定できます。たとえば、ClassificationTreepredict は n 行 K 列の行列として分類スコアを返します。ここで、n は観測値の数、K はクラスの数です。この出力を rocmetrics に渡します。

    Scores の行数と Labels の長さは等しくなければなりません。rocmetrics は、各クラスのスコアを残りのクラスのスコアとの関係で調整します。詳細については、マルチクラス分類問題の調整スコアを参照してください。

  • ベクトル入力の場合、Score(j)ClassNames で指定されたクラスに対する観測値 j の分類スコアです。

    • ClassNames にはクラスが 1 つだけ含まれている必要があります。

    • Prior は指定されたクラスの事前確率を表す Prior(1) をもつ 2 要素のベクトルでなければなりません。

    • Cost[Cost(P|P),Cost(N|P);Cost(P|N),Cost(N|N)] を含む 22 列の行列でなければなりません。ここで、P は陽性クラス (分類スコアを指定するクラス)、N は陰性クラスです。

    • Scores の長さと Labels の長さは等しくなければなりません。

    関数 plot を使用して ROC 曲線をプロットするときにモデル操作点を表示する場合は、Score(j) の値を事後確率にする必要があります。この制限はベクトル入力にのみ適用されます。

  • 交差検証データの場合、LabelsScores、および Weights を同じ要素数の cell 配列として指定する必要があります。rocmetrics は、cell 配列の要素を 1 つの交差検証分割のデータとして扱い、パフォーマンス メトリクスの点単位の信頼区間を計算します。Score{i}(j,k) は、クラス ClassNames(k) に対する要素 i の観測値 j の分類スコアです。Scores{i} の行数と Labels{i} の長さは等しくなければなりません。

詳細については、rocmetrics に対する分類スコアの入力を参照してください。

この引数は Scores プロパティを設定します。

データ型: single | double | cell

クラス名。数値ベクトル、logical ベクトル、categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。ClassNames のデータ型は Labels の真のラベルと同じでなければなりません。ClassNames の値は Labels に含まれていなければなりません。

  • Scores の 1 つのクラスのみに対する分類スコアを指定する場合、そのクラスの名前のみを ClassNames で指定します。

  • それ以外の場合、ScoresCost、および Prior におけるクラスの順序を ClassNames で指定します。

この引数は ClassNames プロパティを設定します。

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

名前と値の引数

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

例: FixedMetric="FalsePositiveRate",FixedMetricValues=0:0.01:1 は、FPR の値を 0:0.01:1 で固定します。

パフォーマンス メトリクス

すべて展開する

追加で計算するモデルのパフォーマンス メトリクス。組み込みメトリクスの名前の文字ベクトルまたは 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 になることに注意してください。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

例: AdditionalMetrics=["Accuracy","PositivePredictiveValue"]

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

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

固定のメトリクス。"Thresholds""FalsePositiveRate" (または "fpr")、"TruePositiveRate" (または "tpr")、あるいは名前と値の引数 AdditionalMetrics で指定されたメトリクスとして指定します。カスタム メトリクスを固定にするには、FixedMetric"CustomMetricN" として指定します。ここで、N はカスタム メトリクスを参照する番号です。たとえば、AdditionalMetrics で指定された 1 番目のカスタム メトリクスを固定のメトリクスとして使用するには "CustomMetric1" と指定します。

rocmetrics は、固定のメトリクス (FixedMetric) の固定の値 (FixedMetricValues) に対応する ROC 曲線と他のメトリクスの値を求め、それらの値を Metrics プロパティに table として格納します。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

rocmetrics で信頼区間を計算する場合、FixedMetric の値に応じて 2 つの方法のいずれかが計算に使用されます。

  • FixedMetric"Thresholds" (既定) の場合、rocmetrics はしきい値平均化を使用します。

  • FixedMetric が既定以外の値の場合、rocmetrics は縦方向平均化を使用します。

詳細については、点単位の信頼区間を参照してください。

例: FixedMetric="TruePositiveRate"

データ型: char | string

固定のメトリクス (FixedMetric) の値。"all" または数値ベクトルとして指定します。

rocmetrics は、固定のメトリクス (FixedMetric) の固定の値 (FixedMetricValues) に対応する ROC 曲線と他のメトリクスの値を求め、それらの値を Metrics プロパティに table として格納します。

FixedMetric の既定値は "Thresholds" で、FixedMetricValues の既定値は "all" です。rocmetrics は、各クラスについて、すべての異なる調整スコアの値をしきい値として使用し、そのしきい値を使用してパフォーマンス メトリクスを計算します。UseNearestNeighbor の設定に応じて、rocmetrics は固定の値に対応する厳密なしきい値か最も近いしきい値を使用します。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

rocmetrics で信頼区間を計算する場合、FixedMetricFixedMetricValues で固定されます。

  • FixedMetric の値が "Thresholds"FixedMetricValues"all"rocmetrics は、すべての個別のしきい値に対応する値で信頼区間を計算します。

  • FixedMetric の値がパフォーマンス メトリクスで FixedMetricValues"all"rocmetrics は、すべての個別のしきい値に対応するメトリクスの値を求め、そのメトリクスの値に対応する値で信頼区間を計算します。

詳細については、点単位の信頼区間を参照してください。

例: FixedMetricValues=0:0.01:1

データ型: single | double

NaN 条件。"omitnan" または "includenan" として指定します。

  • "omitnan"rocmetrics は、入力 Scores に含まれているすべての NaN スコア値と Labels および Weights の対応する値を無視します。

  • "includenan"rocmetrics は、入力 Scores に含まれている NaN スコア値を計算に使用します。関数は NaN スコアをもつ観測値を各クラスの偽分類カウントに追加します。つまり、関数は陽性クラスからの NaN スコアをもつ観測値を偽陰性 (FN) としてカウントし、陰性クラスからの NaN スコアをもつ観測値を偽陽性 (FP) としてカウントします。

詳細については、NaN スコア値を参照してください。

例: NaNFlag="includenan"

データ型: char | string

最も近いメトリクスの値を使用するためのインジケーター。logical 0 (false) または 1 (true) として指定します。

  • logical 0 (false) — rocmetrics は、FixedMetricFixedMetricValues で指定された固定のメトリクスの値に対応する厳密なしきい値を使用します。

  • logical 1 (true) — rocmetrics は、調整された入力スコアから、指定された固定のメトリクスの各値に対応するしきい値に最も近い値を特定します。

詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

rocmetrics で信頼区間を計算する場合、UseNearestNeighbor の値は false でなければなりません。それ以外の場合、既定値は true です。

例: UseNearestNeighbor=false

データ型: logical

分類モデルのオプション

すべて展開する

誤分類コスト。K 行 K 列の正方行列 C として指定します。ここで、K は Labels に含まれている一意のクラスの数です。C(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです (行は真のクラス、列は予測したクラスに対応します)。ClassNames でクラスの順序を指定します。

rocmetrics は、1 対他の各バイナリ問題について、KK 列の行列を 2 行 2 列の行列に変換します。詳細については、誤分類コスト行列を参照してください。

Scores の 1 つのクラスのみに対する分類スコアを指定する場合、Cost の値は [0,cost(N|P);cost(P|N),0] を含む 22 列の行列でなければなりません。ここで、P は陽性クラス (分類スコアを指定するクラス)、N は陰性クラスです。cost(N|P) は陽性クラスを陰性クラスとして誤分類するコスト、cost(P|N) は陰性クラスを陽性クラスとして誤分類するコストです。

既定値は、i~=j である場合は C(i,j)=1i=j である場合は C(i,j)=0 です。コスト行列の対角要素はゼロでなければなりません。

この引数は Cost プロパティを設定します。

例: Cost=[0 2;1 0]

データ型: single | double

事前クラス確率。次のいずれかとして指定します。

  • "empirical" は真のクラス ラベル Labels におけるクラスの頻度からクラス確率を決定します。観測値の重み (Weights) を渡す場合、rocmetrics はこの重みも使用してクラス確率を計算します。

  • "uniform" はすべてのクラス確率を均等に設定します。

  • クラスごとに 1 つのスカラー値を含むスカラー値のベクトル。ClassNames でクラスの順序を指定します。

    Scores の 1 つのクラスのみに対する分類スコアを指定する場合、Prior の値は指定されたクラスの事前確率を表す Prior(1) をもつ 2 要素のベクトルでなければなりません。

この引数は Prior プロパティを設定します。

例: Prior="uniform"

データ型: single | double | char | string

観測値の重み。正の値の数値ベクトルまたは正の値の数値ベクトルを含む cell 配列として指定します。

  • 交差検証データでない場合、WeightsLabels と同じ長さの数値ベクトルとして指定します。

  • 交差検証データの場合、LabelsScores、および Weights を同じ要素数の cell 配列として指定する必要があります。rocmetrics は、cell 配列の要素を 1 つの交差検証分割のデータとして扱い、パフォーマンス メトリクスの点単位の信頼区間を計算します。Weights{i} の長さと Labels{i} の長さは等しくなければなりません。

rocmetrics は、Labels および Scores に含まれている観測値に Weights の対応する値で重みを付けます。NumBootstraps の値を正の整数に設定した場合、rocmetrics は重みを多項分布抽出確率として使用して復元抽出します。

既定では、Weights は 1 のベクトルまたは 1 のベクトルを含む cell 配列です。

この引数は Weights プロパティを設定します。

データ型: single | double | cell

信頼区間のオプション

すべて展開する

点単位の信頼区間の有意水準。範囲 (0,1) のスカラーとして指定します。

Alpha を α と指定した場合、rocmetrics はパフォーマンス メトリクスについての 100×(1 – α)% の点単位の信頼区間を計算します。

この引数は信頼区間の計算に関連します。そのため、LabelsScores、および Weights の交差検証データを指定した場合、または NumBootstraps の値を正の整数に設定した場合のみ有効です。

例: Alpha=0.01 は 99% の信頼区間を指定します。

データ型: single | double

並列計算のブートストラップ オプション。構造体として指定します。

ブートストラップ反復の並列計算、およびブートストラップ サンプリング時の乱数設定のオプションを指定できます。statset を使用して BootstrapOptions 構造体を作成します。次の表は、オプションのフィールドとその値の一覧です。

フィールド名フィールドの値既定の設定
UseParallel

ブートストラップ反復を並列計算する場合は、この値を true に設定します。

false
UseSubstreams

再生可能な方法で並列計算する場合は、この値を true に設定します。

再現性のある計算を行うには、Streams をサブストリームを許可する型 ("mlfg6331_64" または "mrg32k3a") に設定します。

false
Streams

RandStream オブジェクトまたはそのようなオブジェクトの cell 配列としてこの値を指定します。UseParallel の値が true でなく、UseSubstreams の値も false でない場合、単一オブジェクトを使用します。この場合は、並列プールと同じサイズの cell 配列を使用します。

Streams を指定しなかった場合、rocmetrics は既定のストリームを使用します。

この引数は、NumBootstraps を正の整数として指定し、ブートストラッピングを使用して信頼区間を計算する場合のみ有効です。

並列計算には Parallel Computing Toolbox™ が必要です。

例: BootstrapOptions=statset(UseParallel=true)

データ型: struct

ブートストラップ信頼区間のタイプ。次の表のいずれかの値として指定します。

説明
"bca"

BCa 法 (bias corrected and accelerated percentile method) [8][9]。この方法には、元の標本値未満のブートストラップ値の比率を使用して計算される z0 係数が含まれます。標本が塊状の場合に合理的な結果を得るために、z0 は元の標本値と同じブートストラップ値の半分を含めることで計算されます。

"corrected percentile" または "cper"バイアス補正百分位数法[10]
"normal" または "norm" バイアスと標準誤差をブートストラップした正規近似区間[11]
"percentile" または "per"基本の等百分位数法
"student" または "stud"スチューデント化された信頼区間[8]

この引数は、NumBootstraps を正の整数として指定し、ブートストラッピングを使用して信頼区間を計算する場合のみ有効です。

例: BootstrapType="student"

データ型: char | string

点単位の信頼区間の計算用に抽出するブートストラップ標本の数。非負の整数スカラーとして指定します。

NumBootstraps を正の整数として指定すると、rocmetricsNumBootstraps 個のブートストラップ標本を使用します。各ブートストラップ標本を作成するために、関数は n 行の入力データから n 行を復元抽出で無作為に選択します。既定値の 0 は、rocmetrics でブートストラッピングを使用しないことを意味します。

rocmetrics は、交差検証データまたはブートストラップ標本のいずれかを使用して信頼区間を計算します。したがって、LabelsScores、および Weights の交差検証データを指定する場合、NumBootstraps0 でなければなりません。

詳細については、点単位の信頼区間を参照してください。

例: NumBootstraps=500

データ型: single | double

スチューデント化された標準誤差推定用に抽出するブートストラップ標本の数。正の整数スカラーとして指定します。

この引数は、NumBootstraps を正の整数、BootstrapType"student" として指定し、スチューデント化されたブートストラップ信頼区間を計算する場合のみ有効です。rocmetrics は、スチューデント化された標準誤差推定を NumBootstrapsStudentizedSE 個のブートストラップ データ標本を使用して推定します。

例: NumBootstrapsStudentizedSE=500

データ型: single | double

プロパティ

すべて展開する

パフォーマンス メトリクス

この プロパティ は読み取り専用です。

ROC 曲線の下の領域 (AUC)。数値ベクトルまたは数値行列として指定します。

rocmetrics は、1 対他の各 ROC 曲線 (つまり各クラス) について AUC を計算します。AUC プロパティの値の列の順序は ClassNames のクラスの順序と一致します。

バイナリ問題で Scores を 2 列の行列として指定する場合、このプロパティは同一の AUC の値を含む 12 列のベクトルになります。バイナリ問題の場合、一方のクラスについての全体的なモデルの性能がもう一方のクラスについての性能と同じであるため、AUC の値が同一になります。

rocmetrics で AUC の信頼区間を計算する場合、AUC プロパティの値は、1 行目が AUC の値に対応し、2 行目と 3 行目が下限と上限にそれぞれ対応する行列になります。rocmetrics は、パフォーマンス メトリクスの信頼区間も計算する場合で、FixedMetric"Thresholds" (既定)、"FalsePositiveRate"、または "TruePositiveRate" に設定した場合に AUC の信頼区間を計算します。

データ型: single | double

この プロパティ は読み取り専用です。

パフォーマンス メトリクス。table として指定します。

table には、すべてのクラスについてのパフォーマンス メトリクスの値が、ClassNames のクラスの順序に従って垂直方向に連結して格納されます。table には各クラスの一意のしきい値ごとに 1 つの行が格納されます。rocmetrics は、使用するしきい値を FixedMetricFixedMetricValues、および UseNearestNeighbor の値に基づいて決定します。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。

table 内の各クラスに対する行数は一意のしきい値の数になります。

table の各行には、ClassNameThresholdFalsePositiveRate、および TruePositiveRate の各変数と AdditionalMetrics で指定された追加の各メトリクスの変数が含まれます。カスタム メトリクスを指定する場合、rocmetrics はメトリクスに "CustomMetricN" として名前を付けます。ここで、N はカスタム メトリクスを参照する番号です。たとえば、"CustomMetric1" は、AdditionalMetrics で指定された 1 番目のカスタム メトリクスに対応します。

Metrics の table の各変数には、ベクトルまたは 3 列の行列が格納されます。

  • rocmetrics で信頼区間を計算しない場合、各変数にベクトルが格納されます。

  • rocmetrics で信頼区間を計算する場合、ClassNameFixedMetric の変数 (ThresholdFalsePositiveRateTruePositiveRate、または追加のメトリクス) の両方にベクトルが格納され、その他の変数に 3 列の行列が格納されます。行列の 1 列目がメトリクスの値に対応し、2 列目と 3 列目が下限と上限にそれぞれ対応します。

データ型: table

分類モデルのプロパティ

rocmetrics オブジェクトを作成するときに、以下のプロパティを指定できます。

この プロパティ は読み取り専用です。

クラス名。数値ベクトル、logical ベクトル、categorical ベクトル、または文字ベクトルの cell 配列として指定します。

詳細については、このプロパティを設定する入力引数 ClassNames を参照してください。(文字配列または string 配列は文字ベクトルの cell 配列として扱われます。)

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

この プロパティ は読み取り専用です。

誤分類コスト。正方行列として指定します。

詳細については、このプロパティを設定する名前と値の引数 Cost を参照してください。

データ型: single | double

この プロパティ は読み取り専用です。

真のクラス ラベル。数値ベクトル、logical ベクトル、categorical ベクトル、または文字ベクトルの cell 配列として指定します。交差検証データの場合は、これらのいずれかの型の cell 配列として指定します。

詳細については、このプロパティを設定する入力引数 Labels を参照してください。(文字配列または string 配列は文字ベクトルの cell 配列として扱われます。)

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

この プロパティ は読み取り専用です。

事前クラス確率。数値ベクトルとして指定します。

詳細については、このプロパティを設定する名前と値の引数 Prior を参照してください。この引数を文字ベクトルまたは string スカラー ("empirical" または "uniform") として指定すると、rocmetrics は事前確率を計算し、Prior プロパティを数値ベクトルとして格納します。

データ型: single | double

この プロパティ は読み取り専用です。

分類スコア。数値行列または数値行列の cell 配列として指定します。

詳細については、このプロパティを設定する入力引数 Scores を参照してください。

データ型: single | double | cell

この プロパティ は読み取り専用です。

観測値の重み。正の値の数値ベクトルまたは正の値の数値ベクトルを含む cell 配列として指定します。

詳細については、このプロパティを設定する名前と値の引数 Weights を参照してください。

データ型: single | double | cell

オブジェクト関数

addMetrics分類の追加のパフォーマンス メトリクスの計算
averageマルチクラス問題における平均受信者動作特性 (ROC) 曲線のパフォーマンス メトリクスの計算
plot受信者動作特性 (ROC) 曲線やその他の性能曲線のプロット

すべて折りたたむ

rocmetrics オブジェクトを作成してバイナリ分類問題のパフォーマンス メトリクス (FPR と TPR) を計算し、関数 plot を使用して ROC 曲線をプロットします。

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);
size(Scores)
ans = 1×2

    70     2

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

Mdl.ClassNames
ans = 2x1 cell
    {'b'}
    {'g'}

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

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

rocObj は、各クラスの AUC の値とパフォーマンス メトリクスが AUC プロパティと Metrics プロパティに格納された rocmetrics オブジェクトです。AUC プロパティを表示します。

rocObj.AUC
ans = 1×2

    0.8587    0.8587

バイナリ分類問題の場合、AUC の値は互いに等しくなります。

Metrics の table には、両方のクラスについてのパフォーマンス メトリクスの値が、クラスの順序に従って垂直方向に連結して格納されます。table から 1 番目のクラスの行を特定し、最初の 8 行を表示します。

idx = strcmp(rocObj.Metrics.ClassName,Mdl.ClassNames(1));
head(rocObj.Metrics(idx,:))
    ClassName    Threshold    FalsePositiveRate    TruePositiveRate
    _________    _________    _________________    ________________

      {'b'}       15.545              0                     0      
      {'b'}       15.545              0                  0.04      
      {'b'}       15.105              0                  0.08      
      {'b'}       11.424              0                  0.16      
      {'b'}       10.077              0                   0.2      
      {'b'}       9.9716              0                  0.24      
      {'b'}       9.9417              0                  0.28      
      {'b'}       9.0338              0                  0.32      

関数 plot を使用して、各クラスの ROC 曲線をプロットします。

plot(rocObj)

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

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

バイナリ分類問題では、両方のクラスの ROC 曲線を調べる必要はないことに注意してください。2 つの ROC 曲線は対称であり、AUC の値は同じになります。一方のクラスの TPR はもう一方のクラスの真陰性率 (TNR) であり、TNR は 1-FPR です。したがって、一方のクラスの TPR と FPR のプロットはもう一方のクラスの 1-FPR と 1-TPR のプロットと同じになります。

名前と値の引数 ClassNames を指定して、1 番目のクラスの ROC 曲線のみをプロットします。

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.

rocmetrics オブジェクトを作成してマルチクラス分類問題のパフォーマンス メトリクス (FPR と TPR) を計算し、関数 plot を使用して各クラスの ROC 曲線をプロットします。plot の名前と値の引数 AverageROCType を指定して、マルチクラス問題の平均 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);

rocObj は、各クラスの AUC の値とパフォーマンス メトリクスが AUC プロパティと Metrics プロパティに格納された rocmetrics オブジェクトです。AUC プロパティを表示します。

rocObj.AUC
ans = 1×3

    1.0000    0.9636    0.9636

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

idx = strcmp(rocObj.Metrics.ClassName,Mdl.ClassNames(2));
rocObj.Metrics(idx,:)
ans=13×4 table
      ClassName       Threshold    FalsePositiveRate    TruePositiveRate
    ______________    _________    _________________    ________________

    {'versicolor'}           1              0                    0      
    {'versicolor'}           1           0.01                  0.7      
    {'versicolor'}     0.95455           0.02                  0.8      
    {'versicolor'}     0.91304           0.03                  0.9      
    {'versicolor'}        -0.2           0.04                  0.9      
    {'versicolor'}    -0.33333           0.06                  0.9      
    {'versicolor'}        -0.6           0.08                  0.9      
    {'versicolor'}    -0.86957           0.12                 0.92      
    {'versicolor'}    -0.91111           0.16                 0.96      
    {'versicolor'}    -0.95122           0.31                 0.96      
    {'versicolor'}    -0.95238           0.38                 0.98      
    {'versicolor'}    -0.95349           0.44                 0.98      
    {'versicolor'}          -1              1                    1      

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

plot(rocObj,AverageROCType="micro")

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, Micro-average (AUC = 0.9788).

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

外れ値を含む生成された標本データについて、関数iforestを使用して孤立森モデルに学習させて異常スコアを計算します。iforest はスコアをベクトルとして返します。スコアを使用して rocmetrics オブジェクトを作成します。異常スコアを使用して適合率-再現率曲線をプロットし、孤立森モデルのモデル操作点を特定します。

ガウス型コピュラを使用して、二変量分布からランダムなデータ点を生成します。

rng("default")
rho = [1,0.05;0.05,1];
n = 1000;
u = copularnd("Gaussian",rho,n);

無作為に選択された 5% の観測値にノイズを追加して、それらの観測値を外れ値にします。

noise = randperm(n,0.05*n);
true_tf = false(n,1);
true_tf(noise) = true;
u(true_tf,1) = u(true_tf,1)*5;

関数 iforest を使用して孤立森モデルに学習させます。学習観測値に含まれている異常の比率を 0.05 と指定します。

[f,tf,scores] = iforest(u,ContaminationFraction=0.05);

fIsolationForestオブジェクトです。iforest は、学習データの異常インジケーター (tf) および異常スコア (scores) も返します。iforest は、指定した比率の学習観測値が異常として検出されるようにしきい値 (f.ScoreThreshold) を決定します。

適合率-再現率曲線をプロットし、曲線の下の領域 (AUC) の値を計算して、IsolationForest オブジェクトの性能をチェックします。真の異常インジケーター (true_tf) と異常スコア (scores) を使用して rocmetrics オブジェクトを作成します。1 に近いスコア値は異常を示し、true_tf の値が true になります。したがって、scores のクラス名を true として指定します。名前と値の引数 AdditionalMetrics を指定して、適合率の値 (つまり陽性の予測値) を計算します。

rocObj = rocmetrics(true_tf,scores,true,AdditionalMetrics="PositivePredictiveValue");

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

r = plot(rocObj,YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate");
hold on
idx = find(rocObj.Metrics.Threshold>=f.ScoreThreshold,1,'last');
scatter(rocObj.Metrics.TruePositiveRate(idx), ...
    rocObj.Metrics.PositivePredictiveValue(idx), ...
    [],r.Color,"filled")
xyData = rmmissing([r.XData r.YData]);
auc = trapz(xyData(:,1),xyData(:,2));
legend(join([r.DisplayName " (AUC = " string(auc) ")"],""),"true Model Operating Point")
xlabel("Recall")
ylabel("Precision")
title("Precision-Recall Curve")
hold off

Figure contains an axes object. The axes object with title Precision-Recall Curve, xlabel Recall, ylabel Precision contains 2 objects of type roccurve, scatter. These objects represent true (AUC = 0.72846), true Model Operating Point.

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

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);

YTest の真のラベルと Scores の分類スコアを使用して rocmetrics オブジェクトを作成します。Mdl.ClassNames を使用して Scores の列の順序を指定します。NumBootstraps を 100 と指定し、100 個のブートストラップ標本を使用して信頼区間を計算します。

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

Metrics プロパティの table から 2 番目のクラスの行を特定し、最初の 8 行を表示します。

idx = strcmp(rocObj.Metrics.ClassName,Mdl.ClassNames(2));
head(rocObj.Metrics(idx,:))
    ClassName    Threshold        FalsePositiveRate                 TruePositiveRate        
    _________    _________    __________________________    ________________________________

      {'g'}       7.1963         0          0          0           0           0           0
      {'g'}       7.1963         0          0          0    0.022222           0    0.093023
      {'g'}       6.2593         0          0          0    0.044444           0     0.11969
      {'g'}       5.5728         0          0          0    0.066667    0.020988     0.16024
      {'g'}       5.5642         0          0          0    0.088889    0.022635     0.18805
      {'g'}       5.4619      0.04          0    0.22222    0.088889    0.022635     0.18805
      {'g'}       5.3672      0.08          0       0.28    0.088889    0.022635     0.18805
      {'g'}       5.1525      0.08          0       0.28     0.11111    0.045035     0.19532

table の各行に、FPR と TPR の固定のしきい値に対するメトリクスの値とその信頼区間が格納されます。変数 Threshold は列ベクトルで、変数 FalsePositiveRateTruePositiveRate は 3 列の行列です。行列の 1 列目がメトリクスの値に対応し、2 列目と 3 列目が下限と上限にそれぞれ対応します。

TPR の ROC 曲線と信頼区間をプロットします。信頼区間を表示するために ShowConfidenceIntervals=true を指定し、プロットする 1 つのクラスを名前と値の引数 ClassNames を使用して指定します。

plot(rocObj,ShowConfidenceIntervals=true,ClassNames=Mdl.ClassNames(2))

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 g (AUC = 0.8587), g Model Operating Point.

ROC 曲線の周囲に影付きの領域で信頼区間が示されます。信頼区間は、学習済みモデルのテスト セットでの分散による曲線の不確かさを表しています。

交差検証データを使用して FPR と TPR の固定のしきい値に対する信頼区間を計算し、関数 plot を使用して 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);

cell 配列の各要素が 1 つの検証分割に対応するように、交差検証済みスコアとそれに対応する真のラベルを cell 配列に格納します。

cv = Mdl.Partition;
numTestSets = cv.NumTestSets;
cvLabels = cell(numTestSets,1);
cvScores = cell(numTestSets,1);
for i = 1:numTestSets
    testIdx = test(cv,i);
    cvLabels{i} = species(testIdx);
    cvScores{i} = Scores(testIdx,:);
end

cell 配列を使用して rocmetrics オブジェクトを作成します。cell 配列を使用して真のラベルとスコアを指定すると、rocmetrics で信頼区間が計算されます。

rocObj = rocmetrics(cvLabels,cvScores,Mdl.ClassNames);

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 に対する影付きの領域はありません。信頼区間は、学習セットとテスト セットでの分散によるモデルの不確かさを反映しています。

決定木モデル、一般化加法モデル、および単純ベイズ モデルの 3 種類の分類モデルに学習させます。ROC 曲線と AUC の値を使用して、テスト データ セットで 3 つのモデルの性能を比較します。

census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータセットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。

load census1994

census1994 には学習データ セット adultdata およびテスト データ セット adulttest が含まれています。応答変数 salary の一意の値を表示します。

classNames = unique(adultdata.salary)
classNames = 2x1 categorical
     <=50K 
     >50K 

学習データ adultdata を渡し、応答変数名 "salary" を指定して、3 つのモデルに学習させます。名前と値の引数 ClassNames を使用してクラスの順序を指定します。

MdlTree = fitctree(adultdata,"salary",ClassNames=classNames);
MdlGAM = fitcgam(adultdata,"salary",ClassNames=classNames); 
MdlNB = fitcnb(adultdata,"salary",ClassNames=classNames);

学習済みモデルを使用して、テスト データ セット adulttest の分類スコアを計算します。

[~,ScoresTree] = predict(MdlTree,adulttest);
[~,ScoresGAM] = predict(MdlGAM,adulttest);
[~,ScoresNB] = predict(MdlNB,adulttest);

各モデルの rocmetrics オブジェクトを作成します。

rocTree = rocmetrics(adulttest.salary,ScoresTree,classNames);
rocGAM = rocmetrics(adulttest.salary,ScoresGAM,classNames);
rocNB = rocmetrics(adulttest.salary,ScoresNB,classNames);

各モデルの ROC 曲線をプロットします。関数 plot は、既定ではクラス名と AUC の値を凡例に表示します。凡例にクラス名の代わりにモデル名を含めるには、関数 plot から返される ROCCurve オブジェクトの DisplayName プロパティを変更します。

figure
c = cell(3,1);
g = cell(3,1);
[c{1},g{1}] = plot(rocTree,ClassNames=classNames(1));
hold on
[c{2},g{2}] = plot(rocGAM,ClassNames=classNames(1));
[c{3},g{3}] = plot(rocNB,ClassNames=classNames(1));
modelNames = ["Decision Tree Model", ...
    "Generalized Additive Model","Naive Bayes Model"];
for i = 1 : 3
    c{i}.DisplayName = replace(c{i}.DisplayName, ...
        string(classNames(1)),modelNames(i));
    g{i}(1).DisplayName = join([modelNames(i),"Operating Point"]);
end
hold off

Figure contains an axes object. The axes object with title ROC Curve, xlabel False Positive Rate, ylabel True Positive Rate contains 9 objects of type roccurve, scatter, line. These objects represent Decision Tree Model (AUC = 0.8297), Decision Tree Model Operating Point, Generalized Additive Model (AUC = 0.9182), Generalized Additive Model Operating Point, Naive Bayes Model (AUC = 0.8902), Naive Bayes Model Operating Point.

AUC の値は、一般化加法モデル (MdlGAM) が最も高く、決定木モデル (MdlTree) が最も低くなっています。この結果は、MdlTreeMdlNB よりも MdlGAM の方がテスト データ セットに対する平均的な性能が優れていることを示しています。

バイナリ分類モデルのモデル操作点と最適な操作点を特定します。最適な操作点に対応する新しいしきい値を使用して、テスト データ セットの観測値を分類します。

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

load ionosphere

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

rng("default") % For reproducibility of the partition
c = cvpartition(Y,Holdout=0.25);
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);

Mdl.ClassNames に格納されているクラスの順序を表示します。

Mdl.ClassNames
ans = 2x1 cell
    {'b'}
    {'g'}

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

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

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

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

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

idx_b = strcmp(rocObj.Metrics.ClassName,"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

    1.2640    0.0179    0.5806

バイナリ分類の場合、平均誤分類コストが最小になる最適な操作点は、ROC 曲線が勾配 m の直線と交差する点になります。ここで、m は次のように定義されます。

m=cost(P|N)-cost(N|N)cost(N|P)-cost(P|P)np.

p は陽性クラスの観測値の総数、n は陰性クラスの観測値の総数です。cost の値はコスト行列 C の成分です。

C=[cost(P|P)cost(N|P)cost(P|N)cost(N|N)]

cost(N|P) は陽性クラスを陰性クラスとして誤分類するコスト、cost(P|N) は陰性クラスを陽性クラスとして誤分類するコストです。Mdl.ClassNames のクラスの順序に従い、陽性クラス P はクラス b に対応します。

勾配 m の線と交差する ROC 曲線上の点から、完璧な ROC 曲線が通る完璧な分類器の点 (FPR = 0TPR = 1) に最も近い点を選択します。

陽性クラス b の最適な操作点を特定します。

p = sum(strcmp(YTest,"b"));  
n = sum(~strcmp(YTest,"b")); 
cost = Mdl.Cost;
m = (cost(2,1)-cost(2,2))/(cost(1,2)-cost(1,1))*n/p;
[~,idx_opt] = min(X - Y/m);
optpt = [T(idx_opt) X(idx_opt) Y(idx_opt)]
optpt = 1×3

   -1.1978    0.1071    0.7742

関数 plot を使用してクラス b の ROC 曲線をプロットし、関数 scatter を使用して最適な操作点を表示します。

figure
r = plot(rocObj,ClassNames="b");
hold on 
scatter(optpt(2),optpt(3),"filled", ...
    DisplayName="b Optimal Operating Point");

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

モデル操作点と最適な操作点を表示します。

array2table([modelpt;optpt], ...
    RowNames=["Model Operating Point" "Optimal Operating Point"], ...
    VariableNames=["Threshold" "FalsePositiveRate" "TruePositiveRate"])
ans=2×3 table
                               Threshold    FalsePositiveRate    TruePositiveRate
                               _________    _________________    ________________

    Model Operating Point         1.264         0.017857             0.58065     
    Optimal Operating Point     -1.1978          0.10714             0.77419     

最適な操作点を使用して XTest を分類します。調整スコアが最適なしきい値以上である観測値を陽性クラス b に割り当てます。

s = Scores(:,1) - Scores(:,2);
idx_b_opt = (s >= optpt(1));
Y2 = cell(size(YTest));
Y2(idx_b_opt) = {'b'};
Y2(~idx_b_opt) = {'g'};

Y1 のラベル (関数 predict からのラベル) と Y2 のラベル (最適なしきい値 optpt(1) からのラベル) が異なる観測値の調整スコアを表示します。

s(~strcmp(Y1,Y2))
ans = 11×1

   -1.1704
   -0.8441
   -0.8237
   -0.4545
   -1.0720
   -0.4618
   -0.2189
   -1.1978
   -1.0113
   -1.1550
      ⋮

調整スコアが 0 未満で最適なしきい値以上である観測値が 11 個あります。

マルチクラス分類問題用のモデルに学習させた後、目的のクラスのみに対応する rocmetrics オブジェクトを作成します。指定したしきい値についてのパフォーマンス メトリクスを rocmetrics で計算するように FixedMetricValues を指定します。

標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データセットの最初の数行をプレビューします。

creditrating = readtable("CreditRating_Historical.dat");
head(creditrating)
     ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    ______    ______    _______    ________    _____    ________    _______

    62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
    48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
    42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
    48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
    43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
    39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
    62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
    39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }

変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

creditrating = removevars(creditrating,"ID");
creditrating.Industry = categorical(creditrating.Industry);

データを学習セットとテスト セットに分割します。観測値の約 80% をニューラル ネットワーク モデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能のテストに使用します。データの分割には cvpartition を使用します。

rng("default") % For reproducibility of the partition
c = cvpartition(creditrating.Rating,"Holdout",0.20);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
creditTrain = creditrating(trainingIndices,:);
creditTest = creditrating(testIndices,:);

学習データ creditTrain を関数 fitcnet に渡して、ニューラル ネットワーク分類器に学習させます。

Mdl = fitcnet(creditTrain,"Rating");

テスト セットの観測値について、分類スコアを計算し、格付けを予測します。

[labels,Scores] = predict(Mdl,creditTest);

ニューラル ネットワーク分類器の分類スコアは事後確率に対応します。

モデルの BBB、および BBB の格付けのみを評価し、残りの格付けは無視するとします。

ClassNames プロパティに格納されているモデルの格付けの順序を表示し、評価するクラスを特定します。

Mdl.ClassNames
ans = 7x1 cell
    {'A'  }
    {'AA' }
    {'AAA'}
    {'B'  }
    {'BB' }
    {'BBB'}
    {'CCC'}

idx_Class = [4 5 6];
classesToEvaluate = Mdl.ClassNames(idx_Class);

3 つのクラス (BBBBBB) の観測値のインデックスを特定します。

idx = ismember(creditTest.Rating,classesToEvaluate);

3 つのクラスの真のラベルとスコアを使用して rocmetrics オブジェクトを作成します。指定したしきい値についてのパフォーマンス メトリクスを rocmetrics で計算するように FixedMetricValues=1:-0.25:-1 を指定します。

thresholds = 1:-0.25:-1;
rocObj = rocmetrics(creditTest.Rating(idx),Scores(idx,idx_Class), ...
    classesToEvaluate,FixedMetricValues=thresholds);

Metrics プロパティに格納されている計算されたメトリクスを表示します。

rocObj.Metrics
ans=27×4 table
    ClassName    Threshold    FalsePositiveRate    TruePositiveRate
    _________    _________    _________________    ________________

     {'B' }         0.8987               0                   0     
     {'B' }        0.81356               0             0.09375     
     {'B' }        0.50257        0.007732              0.3125     
     {'B' }        0.25635        0.025773             0.42188     
     {'B' }       0.014391        0.051546             0.57812     
     {'B' }       -0.22962         0.11082              0.6875     
     {'B' }       -0.48407         0.17526                0.75     
     {'B' }       -0.74996         0.51804             0.84375     
     {'B' }       -0.97442               1                   1     
     {'BB'}        0.96327               0                   0     
     {'BB'}        0.75156        0.052434             0.19459     
     {'BB'}        0.50483         0.10861             0.44324     
     {'BB'}        0.25408         0.14981             0.60541     
     {'BB'}      0.0055626         0.22846             0.74595     
     {'BB'}       -0.23851         0.33708             0.84324     
     {'BB'}       -0.49618         0.47191             0.94595     
      ⋮

Metrics プロパティには、3 つの格付け BBB、および BBB の指定したしきい値についてのパフォーマンス メトリクスのみが格納されます。rocmetrics で信頼区間を計算しない場合、UseNearestNeighbor の既定値は true です。したがって、指定した各しきい値について、rocmetrics は指定された値に最も近い調整スコアの値を選択し、その最も近い値をしきい値として使用します。各クラスの指定したしきい値と実際に使用されるしきい値を表示します。

idx_B = strcmp(rocObj.Metrics.ClassName,"B");
idx_BB = strcmp(rocObj.Metrics.ClassName,"BB");
idx_BBB = strcmp(rocObj.Metrics.ClassName,"BBB");
table(thresholds',rocObj.Metrics.Threshold(idx_B), ...
    rocObj.Metrics.Threshold(idx_BB), ...
    rocObj.Metrics.Threshold(idx_BBB), ...
    VariableNames=["Fixed Threshold";string(classesToEvaluate)])
ans=9×4 table
    Fixed Threshold       B           BB           BBB   
    _______________    ________    _________    _________

             1           0.8987      0.96327      0.93863
          0.75          0.81356      0.75156       0.7516
           0.5          0.50257      0.50483      0.50177
          0.25          0.25635      0.25408      0.25086
             0         0.014391    0.0055626    0.0039881
         -0.25         -0.22962     -0.23851     -0.24539
          -0.5         -0.48407     -0.49618     -0.49944
         -0.75         -0.74996     -0.74338     -0.74854
            -1         -0.97442     -0.93863     -0.96909

詳細

すべて展開する

アルゴリズム

すべて展開する

参照

[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.

[3] Davis, J., and M. Goadrich. “The Relationship Between Precision-Recall and ROC Curves.” Proceedings of ICML ’06, 2006, pp. 233–240.

[4] Moskowitz, C. S., and M. S. Pepe. “Quantifying and Comparing the Predictive Accuracy of Continuous Prognostic Factors for Binary Outcomes.” Biostatistics 5, no. 1 (2004): 113–27.

[5] Huang, Y., M. S. Pepe, and Z. Feng. “Evaluating the Predictiveness of a Continuous Marker.” U. Washington Biostatistics Paper Series, 2006, 250–61.

[6] Briggs, W. M., and R. Zaretzki. “The Skill Plot: A Graphical Technique for Evaluating Continuous Diagnostic Tests.” Biometrics 64, no. 1 (2008): 250–256.

[7] Bettinger, R. “Cost-Sensitive Classifier Selection Using the ROC Convex Hull Method.” SAS Institute, 2003.

[8] DiCiccio, Thomas J., and Bradley Efron. “Bootstrap Confidence Intervals.” Statistical Science 11, no. 3 (1996): 189–228.

[9] Efron, Bradley, and Robert J. Tibshirani. An Introduction to the Bootstrap. New York: Chapman & Hall, 1993.

[10] Efron, Bradley. The Jackknife, the Bootstrap and Other Resampling Plans. Philadelphia: The Society for Industrial and Applied Mathematics, 1982.

[11] Davison, A. C., and D. V. Hinkley. Bootstrap Methods and Their Applications. Cambridge University Press, 1997.

拡張機能

バージョン履歴

R2022a で導入