メインコンテンツ

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

rocmetrics

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

R2022a 以降

説明

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

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

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

R2024b において: auc 関数を使用して ROC 曲線の下の領域 (AUC) を求めることができます。

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

作成

説明

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

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

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

rocObj = rocmetrics(Mdl,Tbl,ResponseVarName) は、Tbl 内の予測子データと Tbl 内に 1 つの列として格納された応答変数名 ResponseVarName を使用して、分類モデル オブジェクト Mdl から rocmetrics オブジェクトを作成します。

rocObj = rocmetrics(Mdl,Tbl,Y) は、table Tbl 内の予測子データと Y 内のクラス ラベルを使用して分類モデルの rocmetrics オブジェクトを作成します。

rocObj = rocmetrics(Mdl,X,Y) は、行列 X 内の予測子データと Y 内のクラス ラベルを使用して分類モデルの rocmetrics オブジェクトを作成します。

rocObj = rocmetrics(CVMdl) は、交差検証分類モデルから rocmetrics オブジェクトを作成します。

rocObj = rocmetrics(___,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 を指定できます。たとえば、ClassificationTreepredictnK 列の行列として分類スコアを返します。ここで、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

R2024b 以降

分類モデル。次のタイプのいずれかに基づく完全またはコンパクトなモデル オブジェクトとして指定します。

たとえば、次のコードでは、fitctree 関数を使用してモデル オブジェクトを作成してから、そのモデル オブジェクトを rocmetrics 関数に入力として渡しています。

Mdl = fitctree(X,Y);
rocObj = rocmetrics(Mdl,X,Y);

メモ

分類モデルから rocmetrics オブジェクトを作成するには、Mdl に加えて学習データと応答データを渡す必要があります。交差検証済みモデルの場合は、学習データと応答データは渡しません。

R2024b 以降

予測に使用される標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。Tbl には、応答変数用の追加の 1 列を含めることができます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

  • Tbl に応答変数が含まれている場合に他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

  • Tbl に応答変数が含まれていない場合は、Y を使用して応答データを指定します。応答変数の長さと Tbl の行数は等しくなければなりません。

データ型: table

R2024b 以降

応答変数の名前。Tbl 内の変数の名前で指定します。Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName を指定する必要はありません。

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 YTbl.Y として格納されている場合、"Y" として指定します。それ以外の場合、Tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

データ型: char | string

R2024b 以降

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y のデータ型は、Mdl の学習に使用した応答データと同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の長さは、Tbl または X の行数と等しくなければなりません。

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

R2024b 以降

予測子データ。数値行列として指定します。X の各行は 1 つの観測値を、各列は 1 つの変数を表します。

データ型: single | double

R2024b 以降

交差検証分類モデル。次のタイプのいずれかに基づくモデル オブジェクトとして指定します。

たとえば、次のコードでは、fitctree 関数を使用して交差検証済みモデルを作成してから、そのモデル オブジェクトを rocmetrics 関数に入力として渡しています。

CVMdl = fitctree(X,Y,Crossval="on");
rocObj = rocmetrics(CVMdl);

メモ

分類モデルから rocmetrics オブジェクトを作成するには、Mdl に加えて学習データと応答データを渡す必要があります。交差検証済みモデルの場合は、学習データと応答データは渡しません。

名前と値の引数

すべて展開する

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

例: rocObj = rocmetrics(Labels,Scores,ClassNames,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"、または "precision"陽性予測値 (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 列の行列に変換されます。詳細については、誤分類コスト行列を参照してください。

    "f1score"F1 スコア、2*TP/(2*TP+FP+FN)
    "all" を指定すると上記のすべてのメトリクスを取得できます。"all" を他のいずれかのメトリクスと組み合わせて指定することはできません。

    事前クラス確率 (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

データ型: single | double | logical

分類のオプション

すべて展開する

R2024a 以降

該当するモデルのスコアに誤分類コストを適用するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。ApplyCostToScores は、k 最近傍 (KNN)、判別分析、または単純ベイズ モデルのスコアを既定以外の誤分類コストと共に指定する場合のみ true に設定します。これらのモデルでは、ラベルの予測にスコアではなく予測分類コストが使用されます。

ApplyCostToScorestrue として指定すると、スコアが S*(-C) に変更されます。ここで、S は引数 Scores で指定されるスコア、C は名前と値の引数 Cost で指定される誤分類コスト行列です。変換されたスコアが rocmetrics オブジェクトの Scores プロパティに格納されます。

ApplyCostToScoresfalse として指定すると、未変換のスコアが rocmetrics オブジェクトの Scores プロパティに格納されます。

ApplyCostToScores は、モデル オブジェクトを入力として使用する構文にはいずれにも適用されません。

例: ApplyCostToScores=true

データ型: single | double | logical

誤分類コスト。KK 列の正方行列 C として指定します。ここで、KLabels に含まれている一意のクラスの数です。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 プロパティを設定します。

メモ

KNN、判別分析、または単純ベイズ モデルのスコアを使用するときに誤分類コスト行列を指定する場合は、ApplyCostToScorestrue に設定します。これらのモデルでは、ラベルの予測にスコアではなく予測分類コストが使用されます。 (R2024a 以降)

例: Cost=[0 2;1 0]

データ型: single | double

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

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

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

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

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

Prior は、モデル オブジェクトを入力として使用する構文にはいずれにも適用されません。

この引数は 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 は、モデル オブジェクトを入力として使用する構文も含め、いずれの構文にも指定できます。

この引数は 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) [11][12]。この方法には、元の標本値未満のブートストラップ値の比率を使用して計算される z0 係数が含まれます。標本が塊状の場合に合理的な結果を得るために、z0 は元の標本値と同じブートストラップ値の半分を含めることで計算されます。

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

この引数は、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

ECOC モデルのオプション

R2024b 以降

すべて展開する

バイナリ学習器損失関数。組み込みの損失関数の名前または関数ハンドルとして指定します。

  • 次の表で、組み込み関数について説明します。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。

    説明スコア領域g(yj,sj)
    "binodeviance"二項分布からの逸脱度(–∞,∞)log[1 + exp(–2yjsj)]/[2log(2)]
    "exponential"指数(–∞,∞)exp(–yjsj)/2
    "hamming"ハミング[0,1] または (–∞,∞)[1 – sign(yjsj)]/2
    "hinge"ヒンジ(–∞,∞)max(0,1 – yjsj)/2
    "linear"線形(–∞,∞)(1 – yjsj)/2
    "logit"ロジスティック(–∞,∞)log[1 + exp(–yjsj)]/[2log(2)]
    "quadratic"2 次[0,1][1 – yj(2sj – 1)]2/2

    バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]

  • カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、customFunction の場合は BinaryLoss=@customFunction を指定します。

    customFunction の形式は次のとおりです。

    bLoss = customFunction(M,s)

    • MMdl.CodingMatrix に格納された KB 列の符号化行列です。

    • s は 1 行 B 列の分類スコアの行ベクトルです。

    • bLoss は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。

    • K は、クラスの数です。

    • B はバイナリ学習器の数です。

    カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数の使用による ECOC モデルのテスト標本ラベルの予測を参照してください。

次の表に BinaryLoss の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。

仮定既定値

すべてのバイナリ学習器が次のいずれかである。

  • 分類決定木

  • 判別分析モデル

  • k 最近傍モデル

  • ロジスティック回帰学習器の線形またはカーネル分類モデル

  • 単純ベイズ モデル

"quadratic"
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。"hinge"
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。"exponential"
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。"binodeviance"
fitcecocFitPosterior=true を設定して、クラスの事後確率を予測するように指定している。"quadratic"
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。"hamming"

既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss プロパティを表示します。

例: BinaryLoss="binodeviance"

データ型: char | string | function_handle

バイナリ損失を集計する復号化方式。"lossweighted" または "lossbased" として指定します。詳細については、バイナリ損失を参照してください。

例: Decoding="lossbased"

データ型: char | string

推定オプション。statset によって返される構造体配列として指定します。

並列計算を起動するには、Parallel Computing Toolbox ライセンスが必要です。

例: Options=statset(UseParallel=true)

データ型: struct

詳細レベル。0 または 1 として指定します。Verbose は、コマンド ウィンドウに表示される診断メッセージの量を制御します。

Verbose0 の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。

例: Verbose=1

データ型: single | double

GAM モデルのオプション

R2024b 以降

すべて展開する

モデルの交互作用項を含むというフラグ。true または false として指定します。

モデルに交互作用項が含まれる場合、IncludeInteractions の既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

例: IncludeInteractions=false

データ型: logical

アンサンブルのオプション

R2024b 以降

すべて展開する

rocmetrics で使用するアンサンブル内の弱学習器のインデックス。範囲 [1:ens.NumTrained] の正の整数のベクトルとして指定します。既定では、この関数はすべての学習器を使用します。

例: Learners=[1 2 4]

データ型: single | double

学習器の観測値を使用するオプション。NT 列のサイズの logical 行列として指定します。

  • NX の行の数です。

  • T は、ens に存在する弱学習器の数です。

UseObsForLearner(i,j)true (既定) の場合、学習器 jX の行 i のクラスの予測に使用されます。

例: UseObsForLearner=logical([1 1; 0 1; 1 0])

データ型: logical matrix

並列実行のフラグ。数値または logical の 1 (true) または 0 (false) として指定します。UseParallel=true を指定した場合、関数 rocmetricsparfor を使用して for ループの反復を実行します。Parallel Computing Toolbox がある場合、ループが並列に実行されます。

例: UseParallel=true

データ型: logical

分類木のオプション

R2024b 以降

すべて展開する

枝刈りレベル。昇順の非負の整数のベクトルまたは "all" として指定します。

ベクトルを指定する場合、すべての要素が 0 から max(tree.PruneList) の範囲になければなりません。0 は枝刈りしない完全な木を、max(tree.PruneList) は完全に枝刈りした木 (つまり、ルート ノードのみ) を表します。

"all" を指定した場合、rocmetrics はすべての部分木 (つまり、枝刈り順序全体) に作用します。これは、0:max(tree.PruneList) を指定することと同じです。

rocmetrics では、Subtrees で指定された各レベルまで tree の枝刈りを行ってから、対応する出力引数を推定します。Subtrees のサイズにより、一部の出力引数のサイズが決まります。

関数で Subtrees を呼び出すために、treePruneList プロパティと PruneAlpha プロパティは空以外でなければなりません。言い換えると、fitctree を使用するときに Prune="on" を設定して tree を成長させるか、prune を使用して tree を枝刈りすることで成長させます。

例: Subtrees="all"

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

ニューラル ネットワーク ECOC 分類モデルのオプション

R2024b 以降

すべて展開する

予測子データにおける観測値の次元。"rows" または "columns" として指定します。

メモ

観測値が列に対応するように予測子行列を配置して ObservationsIn="columns" を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して ObservationsIn="columns" を指定することはできません。

例: ObservationsIn="columns"

データ型: char | string

交差検証済みモデルのオプション

R2024b 以降

すべて展開する

信頼区間のタイプ。次のいずれかとして指定します。

  • "crossval" — 交差検証分割を使用して信頼区間を作成します。

  • "bootstrap" — ブートストラッピングを使用して信頼区間を作成します。この場合、NumBootstraps の既定値は 100 です。

  • "none" — 信頼区間を作成しません。

例: ConfidenceIntervalType="bootstrap"

データ型: char | string

予測に交互作用を含めるための指示。false または true として指定します。既定値は、モデルに交互作用がある場合は true、それ以外の場合は false です。この引数は、ClassificationPartitionedGAM モデルまたは交差検証済み ClassificationGAM モデルにのみ適用されます。

例: IncludeInteractions=false

データ型: logical

プロパティ

すべて展開する

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

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

パフォーマンス メトリクス。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 を参照してください。

メモ

名前と値の引数 ApplyCostToScorestrue として指定すると、変換されたスコア S*(-C) が格納されます。ここで、S は引数 Scores で指定されるスコア、C は名前と値の引数 Cost で指定される誤分類コスト行列です。 (R2024a 以降)

データ型: single | double | cell

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

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

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

データ型: single | double | cell

オブジェクト関数

addMetrics分類の追加のパフォーマンス メトリクスの計算
aucROC 曲線または適合率-再現率曲線の下の領域
averageマルチクラス問題における平均受信者動作特性 (ROC) 曲線のパフォーマンス メトリクスの計算
modelOperatingPointOperating point of rocmetrics object
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 = 2×1 cell
    {'b'}
    {'g'}

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

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

rocObj は、各クラスのパフォーマンス メトリクスが Metrics プロパティに格納された rocmetrics オブジェクトです。auc 関数を使用して AUC 値を計算します。

a = auc(rocObj)
a = 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 の名前と値の引数 AverageCurveType を指定して、マルチクラス問題の平均 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 = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

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

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

rocObj は、各クラスのパフォーマンス メトリクスが Metrics プロパティに格納された rocmetrics オブジェクトです。auc 関数を使用して AUC 値を計算します。

a = auc(rocObj)
a = 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 曲線をプロットします。AverageCurveType="micro" を指定し、マイクロ平均法を使用して平均 ROC 曲線のパフォーマンス メトリクスを計算します。

plot(rocObj,AverageCurveType="micro")

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 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), Micro-average Model Operating Point.

ionosphere データをワークスペースに読み込みます。

load ionosphere
who
Your variables are:

Description  X            Y            

変数 X にデータがあり、変数 Y に応答があります。データの分類木モデルを作成します。

Mdl = fitctree(X,Y);

モデルと行列データからの rocmetrics オブジェクトの作成

XY を予測子データと応答データとして使用して、分類木モデルから rocmetrics オブジェクトを作成します。

rocMdl = rocmetrics(Mdl,X,Y);

rocmetrics オブジェクトの ROC 曲線をプロットします。

plot(rocMdl)

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

モデルと table データからの rocmetrics オブジェクトの作成

X のデータの table を作成します。

save("datafile.txt","X","-ascii");
Tbl = readtable("datafile.txt");

Tbl を予測子データ、Y を応答データとして使用して、分類木モデルから rocmetrics オブジェクトを作成します。

Mdl2 = fitctree(Tbl,Y);
rocMdl2 = rocmetrics(Mdl2,Tbl,Y);

rocMdl2 の ROC 曲線をプロットします。前のプロットと同じになります。

plot(rocMdl2)

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

モデルと応答を含む table からの rocmetrics オブジェクトの作成

応答データ YTbl 内に Resp という変数名で含めます。

Tbl.Resp = Y;

Resp を応答変数名として指定して、Tbl から rocmetrics オブジェクトを作成します。

Mdl3 = fitctree(Tbl,"Resp");
rocMdl3 = rocmetrics(Mdl3,Tbl,"Resp");

rocMdl3 の ROC 曲線をプロットします。前のプロットと同じになります。

plot(rocMdl3)

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

交差検証済みモデルからの rocmetrics オブジェクトの作成

交差検証分類木モデルを作成します。

rng default % For reproducibility
CVMdl = fitctree(X,Y,KFold=5);

交差検証済みモデルから rocmetrics オブジェクトを作成します。

rocMdl4 = rocmetrics(CVMdl);

rocMdl4 の ROC 曲線をプロットします。

plot(rocMdl4)

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

この ROC 曲線は前のプロットと見た目が異なります。交差検証済みモデルの ROC 曲線は、より現実に近いものになります。

"k" 最近傍 (KNN)、判別分析、および単純ベイズ分類器では、ラベルの予測にスコアではなく予測分類コストが使用されます。これらのモデルの ROC 曲線を既定以外の誤分類コストを使用して作成する場合は、関数 rocmetrics の名前と値の引数 ApplyCostToScorestrue に設定します。

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

creditrating = readtable("CreditRating_Historical.dat");

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

creditrating = removevars(creditrating,"ID");

すべての A 格付けを 1 つの格付けに統合します。BC の格付けに対して同様に実行し、応答変数に 3 つの異なる格付けが含まれるようにします。3 つの格付けのうち、A が最良で C が最悪と見なされます。

Rating = categorical(creditrating.Rating);
Rating = mergecats(Rating,["AAA","AA","A"],"A");
Rating = mergecats(Rating,["BBB","BB","B"],"B");
Rating = mergecats(Rating,["CCC","CC","C"],"C");
creditrating.Rating = Rating;

顧客の信用格付けの誤分類に特定のコストが関連付けられていると仮定します。誤分類コストを含む行列変数を作成します。クラス名と行列変数におけるそれらの順序を指定する別の変数を作成します。

classificationCosts = [0 100 200; 500 0 100; 1000 500 0];
classNames = categorical(["A","B","C"]);

このコストは、信用が高い顧客を信用が低い顧客として分類するより、信用が低い顧客を信用が高い顧客として分類するほうが、コストが高いことを示しています。たとえば、C の格付け顧客を A の格付け顧客として誤分類するコストは $1000 です。

データを学習セットとテスト セットに分割します。観測値の 75% を判別分析分類器の学習に使用し、観測値の 25% を学習済みモデルの新しいデータでの性能のテストに使用します。

rng("default") % For reproducibility
c = cvpartition(creditrating.Rating,"Holdout",0.25);
trainRatings = creditrating(training(c),:);
testRatings = creditrating(test(c),:);

判別分析分類器を学習させます。誤分類コストを指定します。

mdl = fitcdiscr(trainRatings,"Rating",Cost=classificationCosts, ...
    ClassNames=classNames);

テスト セットの観測値について、クラス ラベル、スコア、予測分類コストを予測します。

[labels,scores,expectedCosts] = predict(mdl,testRatings);

各観測値の予測クラス ラベルは、すべてのクラスの中でスコア (事後確率) が最大のクラスではなく、予測分類コストが最小のクラスに対応します。

たとえば、テスト セットの最初の観測値についての予測を表示します。

firstLabel = labels(1)
firstLabel = categorical
     B 

firstScores = array2table(scores(1,:),VariableNames=["A","B","C"])
firstScores=1×3 table
       A          B           C     
    _______    _______    __________

    0.70807    0.29193    4.7141e-13

firstExpectedCosts = array2table(expectedCosts(1,:), ...
    VariableNames=["A","B","C"])
firstExpectedCosts=1×3 table
      A         B         C   
    ______    ______    ______

    145.96    70.807    170.81

事後確率はクラス A が最大であるにもかかわらず、予測ラベルは予測分類コストが最も低いクラス B に対応しています。

testRatings の真のラベルと scores の分類スコアを使用して rocmetrics オブジェクトを作成します。scores の列の順序を指定します。既定以外の誤分類コストと判別分析モデルから返されるスコアを使用するために、名前と値の引数 CostApplyCostToScores を指定します。

roc = rocmetrics(testRatings.Rating,scores,classNames, ...
    Cost=classificationCosts,ApplyCostToScores=true);

rocmetrics に格納されているスコアは負の予測分類コストであることに注意してください。

isequal(roc.Scores,-expectedCosts)
ans = logical
   1

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

plot(roc,ClassNames=classNames)

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 A (AUC = 0.9457), A Model Operating Point, B (AUC = 0.627), B Model Operating Point, C (AUC = 0.986), C Model Operating Point.

各クラスについて、プロット関数で曲線がプロットされます。塗りつぶされた円のマーカーはモデル操作点を示します。

creditrating データ セット全体を使用して、交差検証判別分析分類器に学習させます。

cvmdl = fitcdiscr(creditrating,"Rating",Cost=classificationCosts, ...
    ClassNames=classNames,CrossVal="on")
cvmdl = 
  ClassificationPartitionedModel
    CrossValidatedModel: 'Discriminant'
         PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
           ResponseName: 'Rating'
        NumObservations: 3932
                  KFold: 10
              Partition: [1×1 cvpartition]
             ClassNames: [A    B    C]
         ScoreTransform: 'none'


  Properties, Methods

関数 fitcdiscr で、タイプ Discriminant (CrossValidatedModel プロパティの値) の ClassificationPartitionedModel オブジェクトが作成されます。交差検証済みモデルを作成するために、関数では次の手順が実行されます。

  1. データを 10 個のセットに無作為に分割する。

  2. 各セットについて、そのセットを検証データとして予約し、他の 9 個のセットを使用してモデルに学習させる。

  3. 10 個のコンパクトな学習済みモデルを交差検証済みモデル オブジェクトの Trained プロパティに 10 行 1 列の cell ベクトルとして格納する。

cvmdl.Trained
ans=10×1 cell array
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}
    {1×1 classreg.learning.classif.CompactClassificationDiscriminant}

各観測値について、クラス ラベル、スコア、予測分類コストを予測します。

[cvlabels,cvscores,cvexpectedCosts] = kfoldPredict(cvmdl);

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

cvroc = rocmetrics(creditrating.Rating,cvscores,classNames, ...
    Cost=classificationCosts,ApplyCostToScores=true);
plot(cvroc,ClassNames=classNames)

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 A (AUC = 0.9569), A Model Operating Point, B (AUC = 0.6383), B Model Operating Point, C (AUC = 0.9903), C Model Operating Point.

交差検証の結果は前のテスト セットと似た結果になります。

外れ値を含む生成された標本データについて、関数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 に対応するモデル操作点に塗りつぶされた円を表示します。

r = plot(rocObj,YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate",...
    ShowModelOperatingPoint=true);

Figure contains an axes object. The axes object with title Precision-Recall Curve, xlabel Recall (True Positive Rate), ylabel Precision (Positive Predictive Value) contains 2 objects of type roccurve, scatter. These objects represent true (PR-AUC = 0.7485), 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.196         0          0          0           0           0           0
      {'g'}        7.196         0          0          0    0.022222           0    0.093023
      {'g'}       6.2583         0          0          0    0.044444           0     0.11969
      {'g'}       5.5719         0          0          0    0.066667    0.020988     0.16024
      {'g'}       5.5643         0          0          0    0.088889    0.022635     0.18805
      {'g'}       5.4618      0.04          0    0.22222    0.088889    0.022635     0.18805
      {'g'}       5.3667      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 = 2×1 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 = 2×1 cell
    {'b'}
    {'g'}

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

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

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

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

modelOperatingPoint 関数を使用してモデル操作点を特定します。

modelpt = modelOperatingPoint(rocObj)
modelpt=2×4 table
    ClassName    Threshold    FalsePositiveRate    TruePositiveRate
    _________    _________    _________________    ________________

      {'b'}        1.2654         0.017857             0.58065     
      {'g'}       0.21911          0.41935             0.98214     

この関数はどのように機能するでしょうか。関数 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");
modelptb = [T(idx_model) X(idx_model) Y(idx_model)]
modelptb = 1×3

    1.2654    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 曲線をプロットします。これにより、既定でモデル操作点も表示されます。

figure
r = plot(rocObj,ClassNames="b");

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.845), b Model Operating Point.

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

modelpt(3,:) = table({"b optimal"},optpt(1),optpt(2),optpt(3))
modelpt=3×4 table
       ClassName       Threshold    FalsePositiveRate    TruePositiveRate
    _______________    _________    _________________    ________________

    {'b'          }      1.2654         0.017857             0.58065     
    {'g'          }     0.21911          0.41935             0.98214     
    {["b optimal"]}     -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.1703
   -0.8445
   -0.8235
   -0.4546
   -1.0719
   -0.4612
   -0.2191
   -1.1978
   -1.0114
   -1.1552
   -0.4525
      ⋮

調整スコアが 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 = 7×1 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.90259               0                   0     
     {'B' }        0.75236               0               0.125     
     {'B' }        0.50135        0.010309             0.32812     
     {'B' }        0.27975        0.020619             0.40625     
     {'B' }      0.0026854        0.051546             0.57812     
     {'B' }       -0.24615         0.10567              0.6875     
     {'B' }        -0.4889         0.16753             0.76562     
     {'B' }       -0.74968         0.51289             0.84375     
     {'B' }        -0.9755               1                   1     
     {'BB'}        0.96203               0                   0     
     {'BB'}        0.75326        0.052434             0.18919     
     {'BB'}        0.50002         0.10487             0.47027     
     {'BB'}        0.25349         0.14981             0.61622     
     {'BB'}      0.0016854         0.22846             0.74595     
     {'BB'}       -0.24906         0.34082             0.85946     
     {'BB'}        -0.4971         0.46442             0.94054     
      ⋮

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.90259      0.96203      0.93785
          0.75           0.75236      0.75326      0.75037
           0.5           0.50135      0.50002      0.50124
          0.25           0.27975      0.25349      0.25269
             0         0.0026854    0.0016854    0.0082706
         -0.25          -0.24615     -0.24906     -0.22453
          -0.5           -0.4889      -0.4971     -0.49678
         -0.75          -0.74968     -0.74705     -0.74867
            -1           -0.9755     -0.93785      -0.9734

詳細

すべて展開する

アルゴリズム

すべて展開する

参照

[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.

[2] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett. Vol. 30, Issue 3, 2009, pp. 285–297.

[3] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.

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

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

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

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

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

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

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

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

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

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

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

拡張機能

すべて展開する

バージョン履歴

R2022a で導入

すべて展開する