このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ROC 曲線とパフォーマンス メトリクス
このトピックでは、受信者動作特性 (ROC) 曲線や ROC 曲線の下の領域 (AUC) などの分類用のパフォーマンス メトリクスについて説明し、バイナリ分類問題とマルチクラス分類問題のパフォーマンス メトリクスの計算に使用できる Statistics and Machine Learning Toolbox™ オブジェクト rocmetrics
を紹介します。
ROC 曲線の紹介
ClassificationNaiveBayes
や ClassificationEnsemble
などの分類モデルに学習させた後に、アルゴリズムの性能を特定のテスト データ セットで調べることができます。一般的な方法としては、二次損失や精度など、テスト データ セット全体で平均した全体的な性能測定を計算する方法があります。ROC 曲線をプロットしてパフォーマンス メトリクスを計算すると、より詳しく分類器の性能を検査できます。たとえば、分類精度を最大化するしきい値を見つけたり、高感度と高特異度の領域における分類器の性能を評価したりできます。
受信者動作特性 (ROC) 曲線
ROC 曲線は、分類スコアのさまざまなしきい値についての真陽性率 (TPR、感度) と偽陽性率 (FPR、1 - 特異度) の関係を示します。
ROC 曲線の各点は、特定のしきい値についての TPR と FPR の値のペアに対応します。しきい値を変化させてさまざまな TPR と FPR の値のペアを求め、それらのペアを使用して ROC 曲線を作成できます。
マルチクラス分類問題の場合、1 対他の符号化設計を使用し、各クラスの ROC 曲線を求めることができます。1 対他の符号化設計では、マルチクラス分類問題を一連のバイナリ分類問題として扱い、各バイナリ問題において 1 つのクラスが陽性で残りが陰性であると仮定します。
一般に、バイナリ分類器では、スコアが高い方のクラスに観測値を分類します。これは、1 対他のバイナリ分類問題の正の調整スコアに対応します。つまり、分類器は、通常は 0 をしきい値として使用し、観測値が陽性であるか陰性であるかを判定します。たとえば、観測値の調整スコアが 0.2 の場合、しきい値が 0 の分類器は観測値を陽性クラスに割り当てます。しきい値をすべての観測値に適用して TPR と FPR の値のペアを求め、そのペアを ROC 曲線の単一の点として使用できます。ここで、新しいしきい値 0.25 を使用するとします。この場合、しきい値が 0.25 の分類器は、調整スコアが 0.2 の観測値を陰性クラスに割り当てます。新しいしきい値をすべての観測値に適用することにより、新しい TPR と FPR の値のペアを求めることで ROC 曲線の新しい点が得られます。この処理をさまざまなしきい値について繰り返すことで、TPR と FPR の値のペアを求め、それらのペアを使用して ROC 曲線を作成できます。
ROC 曲線の下の領域 (AUC)
ROC 曲線の下の領域 (AUC) は、ROC 曲線の FPR
= 0
から FPR
= 1
までの FPR に対する積分 (TPR の値) に対応します。
AUC は、可能なすべてのしきい値についての集約した性能測定を提供します。AUC の値は 0
から 1
までの範囲で表され、AUC の値が大きいほど分類器の性能が高いことを示します。
完璧な分類器は、陽性クラスの観測値を陽性クラスに常に正しく割り当て、いずれのしきい値についても真陽性率が
1
になります。したがって、[0,0]
、[0,1]
、および[1,1]
を通る線は完璧な分類器を表し、AUC の値は1
になります。ランダムな分類器は、ランダムなスコア値を返し、いずれのしきい値についても偽陽性率と真陽性率の値が同じになります。したがって、ランダムな分類器の ROC 曲線は対角線になり、AUC の値は
0.5
になります。
MATLAB による性能曲線
rocmetrics
オブジェクトを作成して、ROC 曲線やその他の性能曲線を計算できます。rocmetrics
オブジェクトはバイナリ分類問題とマルチクラス分類問題の両方をサポートし、次のオブジェクト関数が用意されています。
plot
— ROC 曲線や分類器のその他の性能曲線をプロットします。plot
は、各曲線についてROCCurve
グラフィックス オブジェクトを返します。オブジェクトのプロパティを変更して各曲線の外観を制御できます。詳細については、ROCCurve のプロパティ を参照してください。average
— マルチクラス問題の平均 ROC 曲線のパフォーマンス メトリクスを計算します。addMetrics
— 分類の追加のパフォーマンス メトリクスを計算します。
交差検証入力を提供するか入力データをブートストラッピングして、性能曲線の信頼区間を計算することもできます。
分類器に学習させた後、性能曲線を使用して、テスト データで分類器の性能を評価できます。平均二乗誤差、分類誤差、指数損失などのさまざまな測定値は単一の数の分類器の予測力を要約することができます。ただし、性能曲線では分類スコアのさまざまなしきい値で分類器の性能を調べることができるため、性能曲線を使用した方が多くの情報が得られます。
バイナリ分類器の 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
は、70
行 2
列のサイズの行列です。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)
関数 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))
マルチクラス分類器の ROC 曲線のプロット
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
は、150
行 3
列のサイズの行列です。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")
塗りつぶされた円のマーカーはモデル操作点を示します。凡例に各曲線のクラスの名前と AUC の値が表示されます。
マルチクラス分類の ROC 曲線
マルチクラス分類器の場合、関数 rocmetrics
で各クラスに対する 1 対他の ROC 曲線のパフォーマンス メトリクスを計算し、関数 average
で ROC 曲線の平均のメトリクスを計算します。関数 plot
を使用して、各クラスの ROC 曲線と平均 ROC 曲線をプロットできます。
1 対他 (OVA) 符号化設計
1 対他 (OVA) 符号化設計は、マルチクラス分類問題を一連のバイナリ分類問題に縮小します。この符号化設計では、各バイナリ分類で 1 つのクラスを陽性として扱い、残りのクラスを陰性として扱います。rocmetrics
は、マルチクラス分類に OVA 符号化設計を使用し、各クラスについての性能をそのクラスが陽性であるバイナリ分類を使用して評価します。
たとえば、3 つのクラスに対する OVA 符号化設計では 3 つのバイナリ分類を定式化します。
各行はクラスに対応し、各列はバイナリ分類問題に対応します。1 番目のバイナリ分類では、クラス 1 が陽性クラスで残りのクラスは陰性であると仮定しています。rocmetrics
は、1 番目のクラスについての性能を 1 番目のバイナリ分類問題を使用して評価します。
分類スコアを 2 列の行列として指定した場合、rocmetrics
はバイナリ分類問題にも OVA 符号化設計を適用します。rocmetrics
は、1 対他のバイナリ分類問題を 2 つ定式化し、そのそれぞれで 1 つのクラスを陽性クラスとして扱い、他のクラスを陰性クラスとして扱います。rocmetrics
は、それらの 2 つの ROC 曲線を求めます。そのいずれかを使用してバイナリ分類問題を評価できます。
パフォーマンス メトリクスの平均
平均 ROC 曲線のメトリクスは、関数 average
を使用して計算できます。あるいは、関数 plot
を使用することで、平均 ROC 曲線のメトリクスを計算してプロットできます。例については、平均 ROC 曲線の特定 (average
の例) およびマルチクラス分類器の平均 ROC 曲線のプロット (plot
の例) を参照してください。
average
と plot
は、平均 ROC 曲線を求めるために平均偽陽性率 (FPR) と平均真陽性率 (TPR) を計算する 3 つのアルゴリズムをサポートしています。
マイクロ平均 — 1 対他のすべてのバイナリ分類問題を 1 つのバイナリ分類問題に結合し、次のように平均パフォーマンス メトリクスを計算します。
各バイナリ問題について、
rocmetrics
オブジェクトのLabels
プロパティの値を logical1
(true
) が陽性クラスを示す logical 値に変換します。変換されたラベルのベクトルを各バイナリ問題から 1 つずつスタックして単一のベクトルにします。
結合されたバイナリ問題に対する混同行列の成分について、それぞれのしきい値 (調整スコアのそれぞれの異なる値) に対する値を計算します。混同行列には、真陽性 (TP)、偽陰性 (FN)、偽陽性 (FP)、および真陰性 (TN) のインスタンスの数が格納されます。
混同行列の成分に基づいて平均の FPR と TPR を計算します。
マクロ平均 — 1 対他のすべてのバイナリ分類問題の値を平均して、FPR と TPR の平均値を計算します。
しきい値、FPR、および TPR の 3 つのメトリクスを使用して、次のように平均値が計算されます。
固定のメトリクスを特定します。
rocmetrics
のFixedMetric
を"FalsePositiveRate"
または"TruePositiveRate"
として指定した場合、関数は指定されたメトリクスを固定にします。それ以外の場合、関数はしきい値を固定にします。固定のメトリクスの
Metrics
プロパティに含まれるすべての異なる値を特定します。各バイナリ問題について、他の 2 つのメトリクスの対応する値を特定します。
すべてのバイナリ問題の FPR と TPR の値の平均を計算します。
加重マクロ平均 — マクロ平均アルゴリズムを使用し、事前クラス確率 (
Prior
プロパティ) を重みとして使用して、FPR と TPR の加重平均値を計算します。
パフォーマンス メトリクス
rocmetrics
オブジェクトは、次の組み込みのパフォーマンス メトリクスをサポートしています。
真陽性の数 (TP)
偽陰性の数 (FN)
偽陽性の数 (FP)
真陰性の数 (TN)
TP と FP の和
陽性予測率 (RPP)
陰性予測率 (RNP)
精度
真陽性率 (TPR)、再現率、感度
偽陰性率 (FNR)、失敗率
偽陽性率 (FPR)、フォールアウト、1 - 特異度
真陰性率 (TNR)、特異度
陽性予測値 (PPV)、適合率
陰性予測値 (NPR)
予測コスト
rocmetrics
は、関数ハンドルとして指定されるカスタム メトリクスもサポートします。詳細については、関数 rocmetrics
の名前と値の引数 AdditionalMetrics
を参照してください。
rocmetrics
は、1 対他の各バイナリ分類問題について、混同行列、スケール ベクトル、および誤分類コスト行列を使用して、さまざまなしきい値に対するパフォーマンス メトリクスの値を計算します。各パフォーマンス メトリクスは混同行列とスケール ベクトルの関数です。また、予測コストは誤分類コスト行列の関数であり、カスタム メトリクスです。
混同行列 — 混同行列には、真陽性 (TP)、偽陰性 (FN)、偽陽性 (FP)、および真陰性 (TN) のインスタンスの数が格納されます。
rocmetrics
は、各バイナリ問題について、さまざまなしきい値に対する混同行列を計算します。スケール ベクトル — スケール ベクトルは、事前クラス確率と真のラベルのクラス数で定義されます。
rocmetrics
は、各バイナリ問題について、名前と値の引数Prior
で指定された事前クラス確率と入力引数Labels
で指定された真のラベルから確率とクラスの数を特定します。誤分類コスト行列 —
rocmetrics
は、各バイナリ問題について、名前と値の引数Cost
で指定された誤分類コスト行列を値に変換します。
既定では、rocmetrics
は、各バイナリ問題について、すべての異なる調整スコアの値をしきい値として使用します。しきい値の詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。
混同行列
混同行列は次のように定義されます。
ここで
P
は "陽性" を意味します。N
は "陰性" を意味します。T
は "真" を意味します。F
は "偽" を意味します。
たとえば、混同行列の 1 列目は、分類器が陽性クラスのインスタンスを識別する方法を定義します。TP は正しく識別された陽性のインスタンスのカウントであり、FN は陰性と誤判別された陽性のインスタンスのカウントです。
rocmetrics
は、1 対他の各バイナリ分類について、さまざまなしきい値に対する混同行列を計算します。1 対他のバイナリ分類モデルは、観測値のスコアがしきい値以上である場合に観測値を陽性クラスに分類します。
事前クラス確率
既定では、rocmetrics
は、真のラベルのクラス頻度で表される経験的確率を使用します。
rocmetrics
は、1 対他の各バイナリ分類について、1
行 K 列の事前確率ベクトル π を 1
行 2
列のベクトルに正規化します。ここで、K はクラスの数です。
陽性クラスが k 番目のクラスである k 番目のバイナリ分類の事前確率は です。ここで、πk はマルチクラス問題におけるクラス k の事前確率です。
スケール ベクトル
rocmetrics
は、1 対他の各バイナリ分類問題について、2
行 1
列のサイズのスケール ベクトル sk を定義します。
ここで、P と N は、それぞれ陽性クラスと陰性クラスの合計インスタンス数を表します。つまり、P は TP と FN の和、N は FP と TN の和です。sk(1) (sk の 1 番目の要素) と sk(2) (sk の 2 番目の要素) は、それぞれ陽性クラス (k 番目のクラス) と陰性クラス (残り) のスケールです。
rocmetrics
は、スケール値を対応するクラスのカウントに乗法係数として適用します。つまり、関数は陽性クラスのカウントに sk(1) を乗算し、陰性クラスのカウントに sk(2) を乗算します。たとえば、k 番目のバイナリ問題の陽性予測値 (PPV = TP/(TP+FP)
) を計算する場合、rocmetrics
は PPV
を次のようにスケーリングします。
誤分類コスト行列
既定では、rocmetrics
は、K 行 K 列のコスト行列 C を使用します。ここで、i ~= j の場合は C(i,j) = 1
、i = j の場合は C(i,j) = 0
です。C(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです (つまり、行は真のクラス、列は予測クラスに対応します)。
rocmetrics
は、1 対他の各バイナリ分類について、K 行 K 列のコスト行列 C を 2
行 2
列の行列に正規化します。
Ck は、陽性クラスが k 番目のクラスである k 番目のバイナリ分類のコスト行列です。costk(N|P)
は陽性クラスを陰性クラスとして誤分類するコストで、costk(P|N)
は陰性クラスを陽性クラスとして誤分類するコストです。
クラス k について、πk+ と πk- が次の値をもつ K 行 1
列のベクトルであるとします。
πki+ と πki- は、それぞれ πk+ と πk- の i 番目の要素です。
陽性クラス (クラス k) の観測値を陰性クラス (残り) に分類するコストは次のようになります。
同様に、陰性クラスの観測値を陽性クラスに分類するコストは次のようになります。
分類スコアとしきい値
関数 rocmetrics
は、入力分類スコアまたは名前と値の引数 FixedMetricValues
からしきい値を決定します。
rocmetrics
に対する分類スコアの入力
rocmetrics
は、分類スコア (Scores
) として、n 行 K 列のサイズの行列または n の長さのベクトルを受け入れます。ここで、n は観測値の数、K はクラスの数です。交差検証データの場合、Scores
はベクトルの cell 配列または行列の cell 配列にすることができます。
n 行 K 列のサイズの行列 — 分類モデル オブジェクトの関数
predict
(ClassificationTree
のpredict
など) の 2 番目の出力引数を使用してScores
を指定します。出力の各行にすべてのクラスの観測値に対する分類スコアが格納され、出力の列の順序は分類モデル オブジェクトのClassNames
プロパティ内のクラスの順序に一致します。バイナリ分類問題とマルチクラス分類問題のどちらでもScores
を行列として指定できます。行列の形式を使用する場合、
rocmetrics
は、各クラスの分類スコアを残りのクラスのスコアとの関係で調整します。具体的には、観測値が与えられたクラスの調整スコアは、そのクラスのスコアと残りのクラスのスコアのうちの最大値との差になります。詳細については、マルチクラス分類問題の調整スコアを参照してください。n の長さのベクトル — 1 つのクラスの分類スコアのみの場合は、ベクトルを使用して
Scores
を指定します。ベクトル入力は、マルチクラス問題で異なるタイプの調整スコアを使用する場合にも適しています。例として、A
、B
、C
の 3 つのクラスの問題について考えてみます。C
を無視して、クラスA
とB
を分離する性能曲線を計算する場合は、B
よりもA
を選択してあいまいさに対処する必要があります。スコアの比s(A)/s(B)
またはスコアの差s(A)–s(B)
を使用して、rocmetrics
にベクトルを渡すことができます。この方法は、スコアとその正規化の性質により異なる場合があります。
rocmetrics
を任意の分類器、もしくは、入力データのインスタンス用に数値スコアを返す任意の関数と併用することができます。
与えられたインスタンスとクラスに対して分類器が高いスコアを返す場合は、そのインスタンスが対応するクラスのものである可能性を示します。
低いスコアは、インスタンスが対応するクラスのものでない可能性を示します。
分類器によっては、スコアを観測値が与えられたクラスのインスタンスを観測する事後確率として解釈できる場合があります。そのようなスコアの例としては、決定木の葉における特定のクラスの観測値の比率があります。この場合、スコアは 0 ~ 1 の範囲に収まり、すべてのクラスのスコアの合計が 1 になります。他の関数は、スコアから事後クラス確率への明確なマッピングがなくても、負の無限大から正の無限大までの範囲でスコアを返すことができます。
rocmetrics
は入力スコア範囲にどのような制約も与えません。正規化がないため、いずれの分類関数、回帰関数、近似関数から返されたスコアも rocmetrics
を使用して処理できます。rocmetrics
では、入力スコアの性質について何も仮定しません。
rocmetrics
はスコアを返す分類器での使用を意図しており、予測されたクラスのみを返す分類器のためのものではありません。2 つのクラスをもつデータについて分類ラベル 0 または 1 のみを返す分類器について考えてみます。この場合、分類されたインスタンスを陽性と陰性のカテゴリに一方向にしか分割できないため、性能曲線は単一の点まで減少します。
マルチクラス分類問題の調整スコア
Scores
を行列として指定した場合、rocmetrics
は、各クラスの分類スコア (rocmetrics
の入力引数 Scores
) を残りのクラスのスコアとの関係で調整します。具体的には、観測値が与えられたクラスの調整スコアは、そのクラスのスコアと残りのクラスのスコアのうちの最大値との差になります。
たとえば、3 つのクラスの分類問題で Scores
の行が [s1,s2,s3] である場合、調整スコアの値は [s1-max
(s2,s3),s2-max
(s1,s3),s3-max
(s1,s2)] になります。
rocmetrics
は、各クラスのパフォーマンス メトリクスを調整スコアの値を使用して計算します。
バイナリ分類問題の場合、Scores
を 2 列の行列または列ベクトルとして指定できます。分類オブジェクトの関数 predict
は分類スコアを行列として返すため、2 列の行列を使用する方が、返される行列を rocmetrics
に渡すことができて簡単です。スコアを 2 列の行列として渡すと、rocmetrics
はマルチクラス分類のスコアの調整と同じ方法でスコアを調整し、両方のクラスのパフォーマンス メトリクスを計算します。2 つのクラスのうちの一方のメトリクスの値を使用してバイナリ分類問題を評価できます。2 列の行列を渡した場合に rocmetrics
から返されるクラスのメトリクスの値は、クラスの分類スコアを列ベクトルとして指定した場合に rocmetrics
から返されるメトリクスの値と等しくなります。
モデルの操作点
モデル操作点は、標準のしきい値に対応する FPR と TPR を表します。
標準のしきい値は、rocmetrics
オブジェクトの作成時に指定された引数 Scores
(分類スコア) の入力形式に応じて次のように決まります。
Scores
を行列として指定した場合、rocmetrics
はScores
の値がマルチクラス分類問題のスコアであると仮定し、調整スコアの値を使用します。マルチクラス分類モデルでは、スコアが最も高いクラスに観測値を分類します。これは、調整スコアの非負のスコアに対応します。したがって、しきい値は0
になります。Scores
を列ベクトルとして指定した場合、rocmetrics
はScores
の値がClassNames
で指定されたクラスの事後確率であると仮定します。バイナリ分類モデルでは、事後確率が高い方のクラス、つまり事後確率が0.5
よりも高いクラスに観測値を分類します。したがって、しきい値は0.5
になります。
バイナリ分類問題の場合、Scores
を 2 列の行列または列ベクトルとして指定できます。ただし、分類スコアが事後確率でない場合は、Scores
を行列として指定する必要があります。バイナリ分類器では、スコアが高い方のクラスに観測値を分類します。これは、調整スコアが非負になるクラスと等価です。そのため、バイナリ分類器に対して Scores
を行列として指定すると、マルチクラス分類器に適用される方式と同じ方式を使用して、rocmetrics
で正しいモデル操作点を特定できます。事後確率でない分類スコアをベクトルとして指定した場合は、モデル操作点のしきい値として常に 0.5
が使用されるため、rocmetrics
で正しいモデル操作点を識別できません。
関数 plot
は、各 ROC 曲線のモデル操作点に塗りつぶされた円のマーカーを表示します (ShowModelOperatingPoint
を参照)。関数では標準のしきい値に対応する点が選択されます。曲線に標準のしきい値に対するデータ点がない場合、関数は標準のしきい値より大きい最小のしきい値をもつ点を特定します。曲線上の点は、標準のしきい値の性能と同じ性能を示します。
例については、モデル操作点と最適な操作点の特定を参照してください。
しきい値、固定のメトリクス、固定のメトリクスの値
rocmetrics
は、固定のメトリクス (名前と値の引数 FixedMetric
) の固定の値 (名前と値の引数 FixedMetricValues
) に対応する ROC 曲線と他のメトリクスの値を求め、それらの値を Metrics
プロパティに table として格納します。
FixedMetric
の既定値は "Thresholds"
で、FixedMetricValues
の既定値は "all"
です。rocmetrics
は、各クラスについて、すべての異なる調整スコアの値をしきい値として使用し、それぞれのしきい値に対する混同行列の成分を計算し、混同行列の成分を使用してパフォーマンス メトリクスを計算します。
既定の FixedMetricValues
の値 ("all"
) を使用する場合、既定以外の FixedMetric
の値を指定しても、信頼区間を計算するように指定しない限りソフトウェアの動作は変わりません。rocmetrics
で信頼区間を計算する場合、FixedMetric
が FixedMetricValues
で固定され、他のメトリクスの信頼区間が計算されます。詳細については、点単位の信頼区間を参照してください。
FixedMetricValues
に既定以外の値を指定した場合、rocmetrics
は、指定された固定のメトリクスの値 (FixedMetric
の FixedMetricValues
) に対応するしきい値を特定し、そのしきい値を使用して他のパフォーマンス メトリクスの値を計算します。
名前と値の引数
UseNearestNeighbor
をfalse
に設定した場合、rocmetrics
は、指定された固定のメトリクスの値に対応する厳密なしきい値を使用します。UseNearestNeighbor
をtrue
に設定した場合、rocmetrics
は、調整スコアから、指定された固定のメトリクスの各値に対応するしきい値に最も近い値を特定します。
Metrics
プロパティには、ROC 曲線が原点 (0,0)
から始まるように各クラスの最大のしきい値を複製する追加のしきい値が含まれます。この追加のしきい値は、TP
= FP
= 0
(陽性のインスタンスなし、つまり真陽性のインスタンスと偽陽性のインスタンスがいずれもゼロ) となる "すべて棄却" しきい値を表します。
Metrics
には、もう 1 つの特殊なしきい値である "すべて確定" しきい値も含まれます。これは、TN
= FN
= 0
(陰性のインスタンスなし、つまり真陰性のインスタンスと偽陰性のインスタンスがいずれもゼロ) となる最小のしきい値です。
すべて棄却しきい値では陽性予測値 (PPV = TP/(TP+FP)
) が NaN
になり、すべて確定しきい値では陰性予測値 (NPV = TN/(TN+FN)
) が NaN
になることに注意してください。
NaN スコア値
rocmetrics
は、分類スコアの入力 (Scores
) に含まれる NaN
値を次の 2 つのいずれかの方法で処理します。
(既定) を指定した場合、NaNFlag
="omitnan"rocmetrics
はNaN
スコアの行を破棄します。NaNFlag="includenan"
を指定した場合、rocmetrics
は、1 対他の各バイナリ分類について、NaN
スコアのインスタンスを各クラスの偽分類カウントに追加します。つまり、どのようなしきい値でも、陽性クラスからのNaN
スコアをもつインスタンスは偽陰性 (FN) としてカウントされ、陰性クラスからのNaN
スコアをもつインスタンスは偽陽性 (FP) としてカウントされます。真陽性 (TP) のインスタンス数をゼロに設定し、真陰性 (TN) のインスタンス数を総数から陰性クラス内のNaN
の数を引いた値に設定することにより、しきい値1
に対応するメトリクスが計算されます。
陽性クラス内の 2 行と陰性クラス内の 2 行をもつ例を考えてみましょう (各ペアは NaN
スコアをもちます)。
真のクラス ラベル | 分類スコア |
---|---|
陰性 | 0.2 |
陰性 | NaN |
陽性 | 0.7 |
陽性 | NaN |
NaN
スコアをもつ行を破棄すると (NaNFlag="omitnan"
)、スコアのしきい値が変わり、rocmetrics
はパフォーマンス メトリクスを次の表のように計算します。たとえば、中間行に対応するしきい値 0.5 について、rocmetrics
は行 1 と 3 を正しく分類し、行 2 と 4 を省略しています。
しきい値 | TP | FN | FP | TN |
---|---|---|---|---|
1 | 0 | 1 | 0 | 1 |
0.5 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 |
NaN
スコアをもつ行をそれぞれのクラスの偽のカテゴリに追加すると (NaNFlag="includenan"
)、rocmetrics
はパフォーマンス メトリクスを次の表のように計算します。たとえば、中間行に対応するしきい値 0.5 について、rocmetrics
は行 2 と 4 を正しく分類されたものとしてカウントしています。FN
列と FP
列のみがこの 2 つの表で異なることに注意してください。
しきい値 | TP | FN | FP | TN |
---|---|---|---|---|
1 | 0 | 2 | 1 | 1 |
0.5 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 2 | 0 |
点単位の信頼区間
rocmetrics
は、ブートストラップ標本または交差検証データのいずれかを使用して、AUC の値やスコアのしきい値などのパフォーマンス メトリクスに対する点単位の信頼区間を計算します。これらの値は、オブジェクトの Metrics
プロパティと AUC
プロパティに格納されます。
ブートストラップ — ブートストラッピングを使用して信頼区間を計算するには、名前と値の引数
NumBootstraps
を正の整数に設定します。rocmetrics
でNumBootstraps
個のブートストラップ標本が生成されます。関数は、復元抽出によりn
行の入力データからn
個を無作為に選択することで各ブートストラップ標本を作成します。例については、ブートストラッピングを使用した信頼区間の計算を参照してください。交差検証 — 交差検証を使用して信頼区間を計算するには、真のクラス ラベル (
Labels
)、分類スコア (Scores
)、および観測値の重み (Weights
) の交差検証データを cell 配列を使用して指定します。rocmetrics
で cell 配列の要素が交差検証分割として扱われます。例については、交差検証入力データを使用した信頼区間の計算を参照してください。
両方のオプションを指定することはできません。AdditionalMetrics
でカスタム メトリクスを指定する場合は、信頼区間の計算にブートストラップを使用する必要があります。rocmetrics
では、カスタム メトリクスに対する交差検証はサポートしていません。
rocmetrics
は、FixedMetric
(しきい値、FPR、TPR、または AdditionalMetrics
で指定されたメトリクス) を FixedMetricValues
で固定し、FixedMetricValues
の値に対応する点の AUC や他のメトリクスに対する信頼区間を計算します。
しきい値平均 (TA) (
FixedMetric
が"Thresholds"
(既定) の場合) —rocmetrics
は、固定のしきい値でパフォーマンス メトリクスに対する信頼区間を推定します。関数は固定のしきい値で標本を抽出し、対応するメトリクスの値の平均を計算します。縦方向平均 (VA) (
FixedMetric
がパフォーマンス メトリクスの場合) —rocmetrics
は、固定のメトリクスの値でしきい値と他のパフォーマンス メトリクスに対する信頼区間を推定します。関数は固定のメトリクスの値で標本を抽出し、対応するしきい値とメトリクスの値の平均を計算します。
AUC の値に対する信頼区間については、関数は FixedMetric
が "Thresholds"
、"FalsePositiveRate"
、または "TruePositiveRate"
の場合にのみ推定します。
参照
参考
rocmetrics
| addMetrics
| average
| plot
| ROCCurve のプロパティ