plot
構文
説明
plot(
は、rocObj
)rocmetrics
オブジェクト rocObj
の ClassNames
プロパティの各クラスについて、真陽性率 (TPR) と偽陽性率 (FPR) の関係を示す受信者動作特性 (ROC) 曲線を作成します。関数は各曲線のモデル操作点をマークし、ROC 曲線の下の領域 (AUC) の値と曲線のクラス名を凡例に表示します。
plot(___,
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。たとえば、Name=Value
)AverageROCType="macro",ClassNames=[]
は、マクロ平均法を使用して平均パフォーマンス メトリクスを計算し、平均 ROC 曲線のみをプロットします。
[
は、モデル操作点と対角線のグラフィックス オブジェクトも返します。curveObj
,graphicsObjs
] = plot(___)
例
ROC 曲線のプロット
マルチクラス分類問題の rocmetrics
オブジェクトを作成し、各クラスの ROC 曲線をプロットします。
fisheriris
データ セットを読み込みます。行列 meas
には、150 種類の花についての測定値が格納されています。ベクトル species
には、それぞれの花の種類がリストされています。species
には、3 種類の花の名前が格納されています。
load fisheriris
観測値を 3 つのラベルのいずれかに分類する分類木に学習させます。10 分割の交差検証をモデルに対して実行します。
rng("default") % For reproducibility Mdl = fitctree(meas,species,Crossval="on");
検証分割観測値の分類スコアを計算します。
[~,Scores] = kfoldPredict(Mdl); size(Scores)
ans = 1×2
150 3
Scores
は、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);
各クラスの ROC 曲線をプロットします。
plot(rocObj)
関数 plot
は、各クラスの ROC 曲線をプロットし、モデル操作点に塗りつぶされた円のマーカーを表示します。凡例に各曲線のクラスの名前と AUC の値が表示されます。
マルチクラス分類器の平均 ROC 曲線のプロット
関数 plot
を使用して平均 ROC 曲線をプロットします。関数 plot
の出力の ROCCurve
オブジェクトを使用してメトリクスの平均値を取得します。
fisheriris
データ セットを読み込みます。行列 meas
には、150 種類の花についての測定値が格納されています。ベクトル species
には、それぞれの花の種類がリストされています。species
には、3 種類の花の名前が格納されています。
load fisheriris
観測値を 3 つのラベルのいずれかに分類する分類木に学習させます。10 分割の交差検証をモデルに対して実行します。
rng("default") % For reproducibility Mdl = fitctree(meas,species,Crossval="on");
検証分割観測値の分類スコアを計算します。
[~,Scores] = kfoldPredict(Mdl);
rocmetrics
オブジェクトを作成します。
rocObj = rocmetrics(species,Scores,Mdl.ClassNames);
各クラスの ROC 曲線をプロットします。AverageROCType="macro"
を指定し、マクロ平均法を使用して平均 ROC 曲線のメトリクスを計算します。
curveObj = plot(rocObj,AverageROCType="macro")
curveObj = 4x1 ROCCurve array: ROCCurve (setosa (AUC = 1)) ROCCurve (versicolor (AUC = 0.9636)) ROCCurve (virginica (AUC = 0.9636)) ROCCurve (Macro-average (AUC = 0.9788))
関数 plot
は、各性能曲線の ROCCurve
オブジェクトを返します。このオブジェクトを使用して、プロットの作成後にそのプロパティのクエリと設定を行うことができます。
curveObj
の 4 番目の要素に格納されている平均 ROC 曲線のデータ点を表示します。
tbl_average = table(curveObj(4).Thresholds,curveObj(4).XData,curveObj(4).YData, ... VariableNames=["Threshold",curveObj(4).XAxisMetric,curveObj(4).YAxisMetric])
tbl_average=32×3 table
Threshold FalsePositiveRate TruePositiveRate
_________ _________________ ________________
1 0 0
1 0.0066667 0.60667
0.95455 0.01 0.64
0.95349 0.01 0.68
0.95238 0.013333 0.72667
0.95122 0.013333 0.82667
0.91304 0.016667 0.86
0.91111 0.023333 0.88667
0.86957 0.026667 0.91333
0.6 0.026667 0.92667
0.33333 0.026667 0.94
0.2 0.026667 0.94667
-0.2 0.03 0.94667
-0.33333 0.036667 0.94667
-0.6 0.046667 0.94667
-0.66667 0.053333 0.94667
⋮
適合率-再現率曲線と検出誤差トレードオフ (DET) グラフのプロット
rocmetrics
オブジェクトを作成し、関数 plot
を使用して性能曲線をプロットします。関数 plot
の名前と値の引数 XAxisMetric
と YAxisMetric
を指定して、ROC 曲線とは異なるタイプの性能曲線をプロットします。関数 plot
を呼び出すときに新しいメトリクスを指定すると、その新しいメトリクスが関数で計算され、それらを使用して曲線がプロットされます。
ionosphere
データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子 (X
) と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応 (Y
) が含まれています。
load ionosphere
データを学習セットとテスト セットに分割します。観測値の約 80% をサポート ベクター マシン (SVM) モデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能の検定に使用します。データの分割には cvpartition
を使用します。
rng("default") % For reproducibility of the partition c = cvpartition(Y,Holdout=0.20); trainingIndices = training(c); % Indices for the training set testIndices = test(c); % Indices for the test set XTrain = X(trainingIndices,:); YTrain = Y(trainingIndices); XTest = X(testIndices,:); YTest = Y(testIndices);
SVM 分類モデルに学習させます。
Mdl = fitcsvm(XTrain,YTrain);
テスト セットの分類スコアを計算します。
[~,Scores] = predict(Mdl,XTest);
rocmetrics
オブジェクトを作成します。関数 rocmetrics
により、さまざまなしきい値における FPR と TPR が計算されます。
rocObj = rocmetrics(YTest,Scores,Mdl.ClassNames);
1 番目のクラスの適合率-再現率曲線をプロットします。"y" 軸のメトリクスを適合率 (つまり陽性の予測値)、"x" 軸のメトリクスを再現率 (つまり真陽性率) として指定します。関数 plot
により、新しいメトリクスが計算されて曲線がプロットされます。モデル操作点に塗りつぶされた円を表示します。また、関数 trapz
の台形法を使用して適合率-再現率曲線の下の領域を計算し、その値を凡例に表示します。
curveObj = plot(rocObj,ClassNames=Mdl.ClassNames(1), ... YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate"); hold on idx = find(curveObj.Thresholds>=0,1,'last'); scatter(curveObj.XData(idx),curveObj.YData(idx),[],curveObj.Color,"filled") xyData = rmmissing([curveObj.XData curveObj.YData]); auc = trapz(xyData(:,1),xyData(:,2)); legend(join([string(Mdl.ClassNames(1)) " (AUC = " string(auc) ")"],""), ... join([string(Mdl.ClassNames(1)) "Model Operating Point"]), ... Location="southwest") xlabel("Recall") ylabel("Precision") title("Precision-Recall Curve") hold off
1 番目のクラスの検出誤差トレードオフ (DET) グラフをプロットします。"y" 軸のメトリクスを偽陰性率、"x" 軸のメトリクスを偽陽性率として指定します。"x" 軸と "y" 軸に対数スケールを使用します。
f = figure; plot(rocObj,ClassNames=Mdl.ClassNames(1), ... YAxisMetric="FalseNegativeRate",XAxisMetric="FalsePositiveRate") f.CurrentAxes.XScale = "log"; f.CurrentAxes.YScale = "log"; title("DET Graph")
信頼区間のプロット
ブートストラップ標本を使用して FPR と TPR の固定のしきい値に対する信頼区間を計算し、ROC 曲線に TPR の信頼区間をプロットします。
fisheriris
データ セットを読み込みます。行列 meas
には、150 種類の花についての測定値が格納されています。ベクトル species
には、それぞれの花の種類がリストされています。species
には、3 種類の花の名前が格納されています。
load fisheriris
観測値を 3 つのラベルのいずれかに分類する単純ベイズ モデルに学習させます。10 分割の交差検証をモデルに対して実行します。
rng("default") % For reproducibility Mdl = fitcnb(meas,species,Crossval="on");
検証分割観測値の分類スコアを計算します。
[~,Scores] = kfoldPredict(Mdl);
rocmetrics
オブジェクトを作成します。NumBootstraps
を 100 と指定し、100 個のブートストラップ標本を使用して信頼区間を計算します。
rocObj = rocmetrics(species,Scores,Mdl.ClassNames, ...
NumBootstraps=100);
TPR の ROC 曲線と信頼区間をプロットします。信頼区間を表示するために ShowConfidenceIntervals=true
を指定します。
plot(rocObj,ShowConfidenceIntervals=true)
各曲線の周囲に影付きの領域で信頼区間が示されます。setosa
の信頼区間は非ゼロの偽陽性率の幅が 0 であるため、プロットに setosa
に対する影付きの領域はありません。
rocmetrics
は、交差検証済みスコアから ROC 曲線を計算します。そのため、各 ROC 曲線は、データ セット全体 (meas
と species
) で学習させたモデルの未観測のテスト データでの ROC 曲線の推定を表します。信頼区間は、曲線の不確かさの推定を表しています。この不確かさは、データ セット全体で学習させたモデルの未観測のテスト データでの分散によるものです。
モデル操作点へのデータ ヒントの表示
rocmetrics
オブジェクトを作成してバイナリ分類問題のパフォーマンス メトリクス (FPR と TPR) を計算し、関数 plot
を使用して ROC 曲線をプロットします。関数 plot
により、モデル操作点に塗りつぶされた円が表示されます。モデル操作点にデータ ヒントを表示します。
ionosphere
データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子 (X
) と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応 (Y
) が含まれています。
load ionosphere
データを学習セットとテスト セットに分割します。観測値の約 80% をサポート ベクター マシン (SVM) モデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能の検定に使用します。データの分割には cvpartition
を使用します。
rng("default") % For reproducibility of the partition c = cvpartition(Y,Holdout=0.20); trainingIndices = training(c); % Indices for the training set testIndices = test(c); % Indices for the test set XTrain = X(trainingIndices,:); YTrain = Y(trainingIndices); XTest = X(testIndices,:); YTest = Y(testIndices);
SVM 分類モデルに学習させます。
Mdl = fitcsvm(XTrain,YTrain);
テスト セットの分類スコアを計算します。
[~,Scores] = predict(Mdl,XTest);
rocmetrics
オブジェクトを作成します。
rocObj = rocmetrics(YTest,Scores,Mdl.ClassNames);
関数 rocmetrics
により、さまざまなしきい値における FPR と TPR が計算され、AUC の値が特定されます。
ROC 曲線をプロットします。ClassNames
を指定して 1 番目のクラスの曲線をプロットします。
curveObj = plot(rocObj,ClassNames=Mdl.ClassNames(1));
関数 plot
は、各性能曲線の ROCCurve
オブジェクトを返します。このオブジェクトを使用して、プロットの作成後にそのプロパティのクエリと設定を行うことができます。
塗りつぶされた円のマーカーは、しきい値が 0 であるモデル操作点を示します。0 以下の最も大きいしきい値をもつ点が関数で選択されます。凡例に曲線のクラスの名前と AUC の値が表示されます。
曲線上のデータ点をクリックしてデータ ヒントを作成できます。あるいは、関数 datatip
を使用してデータ ヒントを作成できます。
rocObj
の Metrics
プロパティでクラス b
のモデル操作点を特定します。関数 predict
は、スコアが高い方のクラスに観測値を分類します。これは、調整スコアが非負になるクラスに対応します。つまり、関数 predict
で使用される標準のしきい値は 0 です。rocObj
の Metrics
プロパティのクラス b
に対する行から、最も小さい非負のしきい値をもつ点を見つけます。曲線上の点は、しきい値 0 の性能と同じ性能を示します。
idx_b = strcmp(rocObj.Metrics.ClassName,"b"); t = rocObj.Metrics(idx_b,:); X = rocObj.Metrics(idx_b,:).FalsePositiveRate; Y = rocObj.Metrics(idx_b,:).TruePositiveRate; T = rocObj.Metrics(idx_b,:).Threshold; idx_model = find(T>=0,1,"last"); modelpt = [T(idx_model) X(idx_model) Y(idx_model)]
modelpt = 1×3
0.1044 0.0222 0.6800
モデル操作点にデータ ヒントを表示します。ターゲットのグラフ オブジェクトを関数 plot
の出力オブジェクトとして指定します。
datatip(curveObj,DataIndex=idx_model,Location="southeast");
入力引数
rocObj
— 分類性能を評価するオブジェクト
rocmetrics
オブジェクト
分類性能を評価するオブジェクト。rocmetrics
オブジェクトとして指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: YAxisMetric="PositivePredictiveValue",XAxisMetric="TruePositiveRate"
は、適合率 (陽性の予測値) と再現率 (真陽性率) の関係を表す適合率-再現率曲線をプロットします。
AverageROCType
— ROC 曲線の平均化方法
"none"
(既定値) | "micro"
| "macro"
| "weighted"
| string 配列 | 文字ベクトルの cell 配列
ROC 曲線の平均化方法。"none"
、"micro"
、"macro"
、"weighted"
、方法の名前の string 配列、または方法の名前の cell 配列として指定します。
"none"
(既定) を指定した場合、関数plot
で平均 ROC 曲線が作成されません。plot
で ROC 曲線以外の性能曲線を作成する場合、AverageROCType
の値は"none"
にする必要があります。string 配列または文字ベクトルの cell 配列として複数の方法を指定した場合、関数
plot
で指定した方法を使用して複数の平均 ROC 曲線がプロットされます。1 つ以上の平均化方法を指定し、
ClassNames=[]
を指定した場合、関数plot
で平均 ROC 曲線のみがプロットされます。
plot
は、マルチクラス分類問題のパフォーマンス メトリクスの平均を計算し、次の方法を使用して平均 ROC 曲線をプロットします。
"micro"
(マイクロ平均) —plot
は、1 対他のすべてのバイナリ分類問題を 1 つのバイナリ分類問題として扱うことで平均パフォーマンス メトリクスを求めます。関数は、結合されたバイナリ分類問題の混同行列の成分を計算し、混同行列の値を使用して平均の FPR と TPR を計算します。"macro"
(マクロ平均) —plot
は、1 対他のすべてのバイナリ分類問題の値を平均して FPR と TPR の平均値を計算します。"weighted"
(加重マクロ平均) —plot
は、マクロ平均法を使用し、事前クラス確率 (rocObj
のPrior
プロパティ) を重みとして使用して、FPR と TPR の加重平均値を計算します。
平均 ROC 曲線用に plot
から返される ROCCurve
オブジェクトの XData
、YData
、および Thresholds
プロパティに含まれているベクトルの長さは、アルゴリズムのタイプに応じて決まります。詳細については、パフォーマンス メトリクスの平均を参照してください。
例: AverageROCType="macro"
例: AverageROCType=["micro","macro"]
データ型: char
| string
ClassNames
— プロットするクラス ラベル
rocObj.ClassNames
(既定値) | categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
プロットするクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames
の値とデータ型は、rocObj
の ClassNames
プロパティのクラス名のものと一致しなければなりません。(文字配列または string 配列は文字ベクトルの cell 配列として扱われます。)
複数のクラス ラベルを指定した場合、関数
plot
で各クラスの ROC 曲線がプロットされます。ClassNames=[]
を指定し、AverageROCType
を使用して 1 つ以上の平均化方法を指定した場合、関数plot
で平均 ROC 曲線のみがプロットされます。
例: ClassNames=["red","blue"]
データ型: single
| double
| logical
| char
| string
| cell
| categorical
ShowConfidenceIntervals
— y 軸のメトリクスの信頼区間を表示するためのフラグ
false
または 0
(既定値) | true
または 1
y 軸のメトリクス (YAxisMetric
) の信頼区間を表示するためのフラグ。logical 0
(false
) または 1
(true
) として指定します。
ShowConfidenceIntervals
の値を true
にできるのは、rocObj
の Metrics
プロパティに y 軸のメトリクスの信頼区間が格納されている場合のみです。
例: ShowConfidenceIntervals=true
データ型: logical
ShowDiagonalLine
— 対角線を表示するためのフラグ
true
または 1
| false
または 0
[0,0]
から [1,1]
までの対角線を表示するためのフラグ。logical 1
(true
) または 0
(false
) として指定します。
既定値は、ROC 曲線または平均 ROC 曲線をプロットする場合は true
、それ以外の場合は false
です。
ROC 曲線のプロットでは、対角線はランダムな分類器を表し、[0,0]
、[0,1]
、および [1,1]
を通る線は完璧な分類器を表します。
例: ShowDiagonalLine=false
データ型: logical
ShowModelOperatingPoint
— モデル操作点を表示するためのフラグ
true
または 1
| false
または 0
モデル操作点を表示するためのフラグ。logical 1
(true
) または 0
(false
) として指定します。
既定値は、ROC 曲線の場合は true
、平均 ROC 曲線の場合は false
です。ROC 以外の性能曲線に対しては、ShowModelOperatingPoint
の値は false にする必要があります。
例: ShowModelOperatingPoint=false
データ型: logical
XAxisMetric
— x 軸のメトリクス
"FalsePositiveRate"
(既定値) | パフォーマンス メトリクスの名前 | 関数ハンドル
x 軸のメトリクス。組み込みメトリクスの名前またはカスタム メトリクスの名前の文字ベクトルまたは string スカラー、あるいは関数ハンドル (@metricName
) として指定します。
組み込みメトリクス — 文字ベクトルまたは string スカラーを使用して次の組み込みメトリクスの名前を指定します。
名前 説明 "TruePositives"
または"tp"
真陽性の数 (TP) "FalseNegatives"
または"fn"
偽陰性の数 (FN) "FalsePositives"
または"fp"
偽陽性の数 (FP) "TrueNegatives"
または"tn"
真陰性の数 (TN) "SumOfTrueAndFalsePositives"
または"tp+fp"
TP と FP の和 "RateOfPositivePredictions"
または"rpp"
陽性予測率 (RPP)、 (TP+FP)/(TP+FN+FP+TN)
"RateOfNegativePredictions"
または"rnp"
陰性予測率 (RNP)、 (TN+FN)/(TP+FN+FP+TN)
"Accuracy"
または"accu"
精度、 (TP+TN)/(TP+FN+FP+TN)
"TruePositiveRate"
または"tpr"
真陽性率 (TPR) (再現率または感度とも呼ばれる)、 TP/(TP+FN)
"FalseNegativeRate"
、"fnr"
、または"miss"
偽陰性率 (FNR)、失敗率、 FN/(TP+FN)
"FalsePositiveRate"
または"fpr"
偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる)、 FP/(TN+FP)
"TrueNegativeRate"
、"tnr"
、または"spec"
真陰性率 (TNR)、特異度、 TN/(TN+FP)
"PositivePredictiveValue"
、"ppv"
、または"prec"
陽性予測値 (PPV)、適合率、 TP/(TP+FP)
"NegativePredictiveValue"
または"npv"
陰性予測値 (NPV)、 TN/(TN+FN)
"ExpectedCost"
または"ecost"
予測コスト、
(TP*cost(P|P)+FN*cost(N|P)+FP*cost(P|N)+TN*cost(N|N))/(TP+FN+FP+TN)
。ここで、cost
は[0,cost(N|P);cost(P|N),0]
を含む 2 行 2 列の誤分類コスト行列です。cost(N|P)
は陽性クラス (P
) を陰性クラス (N
) として誤分類するコストで、cost(P|N)
は陰性クラスを陽性クラスとして誤分類するコストです。1 対他の各バイナリ問題について、
rocmetrics
の名前と値の引数Cost
で指定されたK
行K
列の行列が 2 行 2 列の行列に変換されます。詳細については、誤分類コスト行列を参照してください。事前クラス確率 (
Prior
) とLabels
のクラス数を使用してスケール ベクトルが計算され、このスケール ベクトルに従ってパフォーマンス メトリクスがスケーリングされます。詳細については、パフォーマンス メトリクスを参照してください。Metrics
プロパティに格納されているカスタム メトリクス — 入力オブジェクトrocObj
のMetrics
プロパティに格納されているカスタム メトリクスの名前を指定します。関数rocmetrics
は、カスタム メトリクスに"CustomMetricN"
として名前を付けます。ここで、N
はカスタム メトリクスを参照する番号です。たとえば、Metrics
の 1 番目のカスタム メトリクスを x 軸のメトリクスとして使用するにはXAxisMetric="CustomMetric1"
と指定します。カスタム メトリクス — 関数ハンドルを使用して新しいカスタム メトリクスを指定します。パフォーマンス メトリクスを返すカスタム関数は次の形式でなければなりません。
metric = customMetric(C,scale,cost)
出力引数
metric
はスカラー値です。カスタム メトリクスは混同行列 (
C
)、スケール ベクトル (scale
)、およびコスト行列 (cost
) の関数です。1 対他の各バイナリ分類について、それらの入力値が特定されます。詳細については、パフォーマンス メトリクスを参照してください。C
は[TP,FN;FP,TN]
で構成される2
行2
列の混同行列です。scale
は2
行1
列のスケール ベクトルです。cost
は2
行2
列の誤分類コスト行列です。
関数
plot
は、カスタム メトリクスの軸ラベルに"Custom Metric"
という名前を付けます。カスタム メトリクスに対する交差検証はサポートされていません。代わりに、
rocmetrics
オブジェクトの作成時にブートストラップを使用するように指定できます。
入力オブジェクト rocObj
の Metrics
プロパティにない新しいメトリクスを指定すると、関数 plot
でメトリクスの値が計算されてプロットされます。rocObj
の作成時に信頼区間を計算した場合、関数 plot
で新しいメトリクスの信頼区間も計算されます。
関数 plot
は、パフォーマンス メトリクスの値に含まれる NaN
を無視します。すべて棄却しきい値 (TP
= FP
= 0
) では陽性予測値 (PPV) が NaN
になり、すべて確定しきい値 (TN
= FN
= 0
) では陰性予測値 (NPV) が NaN
になることに注意してください。詳細については、しきい値、固定のメトリクス、固定のメトリクスの値を参照してください。
例: XAxisMetric="FalseNegativeRate"
データ型: char
| string
| function_handle
YAxisMetric
— y 軸のメトリクス
"TruePositiveRate"
(既定値) | パフォーマンス メトリクスの名前 | 関数ハンドル
y 軸のメトリクス。組み込みメトリクスの名前またはカスタム メトリクスの名前の文字ベクトルまたは string スカラー、あるいは関数ハンドル (@metricName
) として指定します。詳細については、XAxisMetric
を参照してください。
例: YAxisMetric="FalseNegativeRate"
データ型: char
| string
| function_handle
出力引数
curveObj
— 性能曲線のオブジェクト
ROCCurve
オブジェクト | ROCCurve
オブジェクトの配列
性能曲線のオブジェクト。ROCCurve
オブジェクトまたは ROCCurve
オブジェクトの配列として返されます。plot
は、各性能曲線の ROCCurve
オブジェクトを返します。
curveObj
は、プロットの作成後にそのプロパティのクエリと変更を行う場合に使用します。プロパティの一覧については、ROCCurve のプロパティ を参照してください。
graphicsObjs
— グラフィックス オブジェクト
グラフィックス配列
モデル操作点と対角線のグラフィックス オブジェクト。Scatter
オブジェクトと Line
オブジェクトを含むグラフィックス配列として返されます。
graphicsObjs
には、各モデル操作点の Scatter
オブジェクト (
の場合) と対角線の ShowModelOperatingPoint
=trueLine
オブジェクト (
の場合) が格納されます。ShowDiagonalLine
=truegraphicsObjs
は、プロットの作成後にモデル操作点や対角線のプロパティのクエリと変更を行う場合に使用します。プロパティの一覧については、Scatter のプロパティ および Line のプロパティ を参照してください。
詳細
受信者動作特性 (ROC) 曲線
ROC 曲線は、分類スコアのさまざまなしきい値についての真陽性率と偽陽性率の関係を示します。
真陽性率と偽陽性率は次のように定義されます。
真陽性率 (TPR) (再現率または感度とも呼ばれる) —
TP/(TP+FN)
。ここで、TP は真陽性の数、FN は偽陰性の数です。偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる) —
FP/(TN+FP)
。ここで、FP は偽陽性の数、TN は真陰性の数です。
ROC 曲線の各点は、特定のしきい値についての TPR と FPR の値のペアに対応します。しきい値を変化させてさまざまな TPR と FPR の値のペアを求め、それらのペアを使用して ROC 曲線を作成できます。rocmetrics
は、各クラスについて、すべての異なる調整スコアの値をしきい値として使用して ROC 曲線を作成します。
マルチクラス分類問題の場合、rocmetrics
は、バイナリ問題がクラスごとに 1 つになるように一連の 1 対他のバイナリ分類問題を定式化し、対応するバイナリ問題を使用して各クラスの ROC 曲線を求めます。それぞれのバイナリ問題において、1 つのクラスが陽性で残りが陰性であると仮定されます。
バイナリ分類問題で分類スコアを行列として指定した場合、rocmetrics
は 1 対他のバイナリ分類問題を 2 つ定式化します。rocmetrics
は、それらの問題のそれぞれで 1 つのクラスを陽性クラス、他のクラスを陰性クラスとして扱い、2 つの ROC 曲線を求めます。その曲線のいずれかを使用してバイナリ分類問題を評価します。
詳細については、ROC 曲線とパフォーマンス メトリクスを参照してください。
ROC 曲線の下の領域 (AUC)
ROC 曲線の下の領域 (AUC) は、ROC 曲線の FPR
= 0
から FPR
= 1
までの FPR に対する積分 (TPR の値) に対応します。
AUC は、可能なすべてのしきい値についての集約した性能測定を提供します。AUC の値は 0
から 1
までの範囲で表され、AUC の値が大きいほど分類器の性能が高いことを示します。
1 対他 (OVA) 符号化設計
1 対他 (OVA) 符号化設計は、マルチクラス分類問題を一連のバイナリ分類問題に縮小します。この符号化設計では、各バイナリ分類で 1 つのクラスを陽性として扱い、残りのクラスを陰性として扱います。rocmetrics
は、マルチクラス分類に OVA 符号化設計を使用し、各クラスについての性能をそのクラスが陽性であるバイナリ分類を使用して評価します。
たとえば、3 つのクラスに対する OVA 符号化設計では 3 つのバイナリ分類を定式化します。
各行はクラスに対応し、各列はバイナリ分類問題に対応します。1 番目のバイナリ分類では、クラス 1 が陽性クラスで残りのクラスは陰性であると仮定しています。rocmetrics
は、1 番目のクラスについての性能を 1 番目のバイナリ分類問題を使用して評価します。
モデルの操作点
モデル操作点は、標準のしきい値に対応する 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
を参照)。関数では標準のしきい値に対応する点が選択されます。曲線に標準のしきい値に対するデータ点がない場合、関数は標準のしきい値より大きい最小のしきい値をもつ点を特定します。曲線上の点は、標準のしきい値の性能と同じ性能を示します。
アルゴリズム
マルチクラス分類問題の調整スコア
Scores
を行列として指定した場合、rocmetrics
は、各クラスの分類スコア (rocmetrics
の入力引数 Scores
) を残りのクラスのスコアとの関係で調整します。具体的には、観測値が与えられたクラスの調整スコアは、そのクラスのスコアと残りのクラスのスコアのうちの最大値との差になります。
たとえば、3 つのクラスの分類問題で Scores
の行が [s1,s2,s3] である場合、調整スコアの値は [s1-max
(s2,s3),s2-max
(s1,s3),s3-max
(s1,s2)] になります。
rocmetrics
は、各クラスのパフォーマンス メトリクスを調整スコアの値を使用して計算します。
バイナリ分類問題の場合、Scores
を 2 列の行列または列ベクトルとして指定できます。分類オブジェクトの関数 predict
は分類スコアを行列として返すため、2 列の行列を使用する方が、返される行列を rocmetrics
に渡すことができて簡単です。スコアを 2 列の行列として渡すと、rocmetrics
はマルチクラス分類のスコアの調整と同じ方法でスコアを調整し、両方のクラスのパフォーマンス メトリクスを計算します。2 つのクラスのうちの一方のメトリクスの値を使用してバイナリ分類問題を評価できます。2 列の行列を渡した場合に rocmetrics
から返されるクラスのメトリクスの値は、クラスの分類スコアを列ベクトルとして指定した場合に rocmetrics
から返されるメトリクスの値と等しくなります。
参照
[1] Sebastiani, Fabrizio. "Machine Learning in Automated Text Categorization." ACM Computing Surveys 34, no. 1 (March 2002): 1–47.
バージョン履歴
R2022a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)