perfcurve
分類器の出力用の受信者動作特性 (ROC) 曲線または他の性能曲線
構文
説明
例
標本データを読み込みます。
load fisheriris最初の 2 つの特徴のみを予測子変数として使用します。versicolor および virginica という種に対応する測定値のみを使用して、バイナリ分類問題を定義します。
pred = meas(51:end,1:2);
二項応答変数を定義します。
resp = (1:100)'>50; % Versicolor = 0, virginica = 1ロジスティック回帰モデルを当てはめます。
mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');
ROC 曲線を計算します。ロジスティック回帰モデルの推定確率をスコアとして使用します。
scores = mdl.Fitted.Probability;
[X,Y,T,AUC] = perfcurve(species(51:end,:),scores,'virginica');perfcurve はしきい値を配列 T に格納します。
曲線の下の領域を表示します。
AUC
AUC = 0.7918
曲線の下の領域は 0.7918 です。最大の AUC は 1 で、これは完璧な分類器に対応します。AUC の値が大きい場合、分類器の性能が高いことを示します。
ROC 曲線をプロットします。
plot(X,Y) xlabel('False positive rate') ylabel('True positive rate') title('ROC for Classification by Logistic Regression')

あるいは、rocmetricsオブジェクトを作成してオブジェクト関数plotを使用することで、ROC 曲線を計算してプロットできます。
rocObj = rocmetrics(species(51:end,:),scores,'virginica');
plot(rocObj)
関数 plot はモデルの動作点に塗りつぶされた円を表示し、凡例には曲線のクラス名と AUC 値が表示されます。
標本データを読み込みます。
load ionosphereX は、予測子が含まれている 351 行 34 列の実数値の配列です。Y はクラス ラベルの文字配列で、不良なレーダー反射は 'b'、良好なレーダー反射は 'g' というラベルを使用します。
ロジスティック回帰で近似するため、応答の形式を変更します。予測子変数 3 ~ 34 を使用します。
resp = strcmp(Y,'b'); % resp = 1, if Y = 'b', or 0 if Y = 'g' pred = X(:,3:34);
ロジスティック回帰モデルを当てはめ、レーダー反射が不良なものである事後確率を推定します。
mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit'); score_log = mdl.Fitted.Probability; % Probability estimates
スコアの確率を使用して、標準的な ROC 曲線を計算します。
[Xlog,Ylog,Tlog,AUClog] = perfcurve(resp,score_log,'true');同じ標本データで SVM 学習器を学習させます。データを標準化します。
mdlSVM = fitcsvm(pred,resp,'Standardize',true);事後確率 (スコア) を計算します。
mdlSVM = fitPosterior(mdlSVM); [~,score_svm] = resubPredict(mdlSVM);
score_svm の 2 列目には、不良なレーダー反射の事後確率が格納されています。
SVM モデルのスコアを使用して、標準的な ROC 曲線を計算します。
[Xsvm,Ysvm,Tsvm,AUCsvm] = perfcurve(resp,score_svm(:,mdlSVM.ClassNames),'true');同じ標本データについて単純ベイズ分類器を当てはめます。
mdlNB = fitcnb(pred,resp);
事後確率 (スコア) を計算します。
[~,score_nb] = resubPredict(mdlNB);
単純ベイズ分類器のスコアを使用して、標準的な ROC 曲線を計算します。
[Xnb,Ynb,Tnb,AUCnb] = perfcurve(resp,score_nb(:,mdlNB.ClassNames),'true');同じグラフに ROC 曲線をプロットします。
plot(Xlog,Ylog) hold on plot(Xsvm,Ysvm) plot(Xnb,Ynb) legend('Logistic Regression','Support Vector Machines','Naive Bayes','Location','Best') xlabel('False positive rate'); ylabel('True positive rate'); title('ROC Curves for Logistic Regression, SVM, and Naive Bayes Classification') hold off

しきい値が高いと SVM の ROC 値は高くなりますが、通常はレーダー反射が良好または不良であるかの区別については、ロジスティック回帰が優れています。単純ベイズの ROC 曲線は、全般的に他の 2 つの ROC 曲線より下になっています。これは、標本内性能が他の 2 つの分類方法より低下していることを示します。
3 つの分類器すべてについて、曲線の下の領域を比較します。
AUClog
AUClog = 0.9659
AUCsvm
AUCsvm = 0.9489
AUCnb
AUCnb = 0.9393
分類の AUC 尺度は、ロジスティック回帰が最高で単純ベイズが最低です。結果として、この標本データに関してロジスティック回帰の平均的な標本内性能が優れていることを示します。
この例では、ROC 曲線を使用して分類器のカスタム カーネル関数に適しているパラメーター値を決定する方法を示します。
単位円の内部に無作為な点集合を生成します。
rng(1); % For reproducibility n = 100; % Number of points per quadrant r1 = sqrt(rand(2*n,1)); % Random radii t1 = [pi/2*rand(n,1); (pi/2*rand(n,1)+pi)]; % Random angles for Q1 and Q3 X1 = [r1.*cos(t1) r1.*sin(t1)]; % Polar-to-Cartesian conversion r2 = sqrt(rand(2*n,1)); t2 = [pi/2*rand(n,1)+pi/2; (pi/2*rand(n,1)-pi/2)]; % Random angles for Q2 and Q4 X2 = [r2.*cos(t2) r2.*sin(t2)];
予測子変数を定義します。第 1 象限と第 3 象限の点を陽性のクラスとしてラベル付けし、第 2 象限と第 4 象限の点を陰性のクラスとしてラベル付けします。
pred = [X1; X2];
resp = ones(4*n,1);
resp(2*n + 1:end) = -1; % Labels
特徴空間の 2 つの行列を入力として使用し、シグモイド カーネルを使用してグラム行列に変換する関数 mysigmoid.m を作成します。
function G = mysigmoid(U,V) % Sigmoid kernel function with slope gamma and intercept c gamma = 1; c = -1; G = tanh(gamma*U*V' + c); end
シグモイド カーネル関数を使用して SVM 分類器に学習させます。データの標準化をお勧めします。
SVMModel1 = fitcsvm(pred,resp,'KernelFunction','mysigmoid',... 'Standardize',true); SVMModel1 = fitPosterior(SVMModel1); [~,scores1] = resubPredict(SVMModel1);
mysigmoid.m 内で gamma = 0.5 に設定し、mysigmoid2.m として保存します。そして、調整したシグモイド カーネルを使用して SVM 分類器に学習をさせます。
function G = mysigmoid2(U,V) % Sigmoid kernel function with slope gamma and intercept c gamma = 0.5; c = -1; G = tanh(gamma*U*V' + c); end
SVMModel2 = fitcsvm(pred,resp,'KernelFunction','mysigmoid2',... 'Standardize',true); SVMModel2 = fitPosterior(SVMModel2); [~,scores2] = resubPredict(SVMModel2);
両方のモデルについて ROC 曲線と曲線の下の領域 (AUC) を比較します。
[x1,y1,~,auc1] = perfcurve(resp,scores1(:,2),1); [x2,y2,~,auc2] = perfcurve(resp,scores2(:,2),1);
ROC 曲線をプロットします。
plot(x1,y1) hold on plot(x2,y2) hold off legend('gamma = 1','gamma = 0.5','Location','SE'); xlabel('False positive rate'); ylabel('True positive rate'); title('ROC for classification by SVM');

標本内の結果は、ガンマ パラメーターを 0.5 に設定したカーネル関数が優れています。
AUC 尺度を比較します。
auc1 auc2
auc1 =
0.9518
auc2 =
0.9985
ガンマを 0.5 に設定した場合の曲線の下の領域は、ガンマを 1 に設定した場合より広くなっています。これも、ガンマ パラメーター値を 0.5 に設定する方が結果が優れていることを示しています。この 2 つのガンマ パラメーター値による分類性能の視覚的な比較については、カスタム カーネルを使用した SVM 分類器の学習を参照してください。
標本データを読み込みます。
load fisheriris列ベクトル species は、3 種類のアヤメ (setosa、versicolor、virginica) で構成されています。double 行列 meas は、花に関する 4 種類の測定値 (がく片の長さ、がく片の幅、花弁の長さ、花弁の幅) から構成されています。すべての測定値は、センチメートル単位です。
萼弁の長さと幅を予測子変数として使用して、分類木を学習させます。クラス名を指定することをお勧めします。
Model = fitctree(meas(:,1:2),species, ... 'ClassNames',{'setosa','versicolor','virginica'});
木 Model に基づいて種のクラス ラベルとスコアを予測します。
[~,score] = resubPredict(Model);
スコアは、あるクラスに観測値 (データ行列の行) が属する事後確率です。score の各列は、'ClassNames' で指定したクラスに対応します。つまり、1 列目は setosa に、2 列目は versicolor に、3 列目は virginica に対応します。
真のクラスのラベル species が与えられた場合について、ある観測値が versicolor に属するという予測の ROC 曲線を計算します。陰性サブクラスの最適な動作点と y の値も計算します。陰性クラスの名前を取得します。
これはマルチクラス問題なので、perfcurve への入力として単純に score(:,2) を指定することはできません。そのようにしても、2 つの陰性クラス (setosa と virginica) のスコアに関する十分な情報は perfcurve に与えられません。この問題は、1 つのクラスのスコアがわかるだけで他のクラスのスコアを決定できるバイナリ分類問題とは異なります。したがって、2 つの陰性クラスのスコアを因子として組み込んだ関数を perfcurve に与えなければなりません。このような関数の 1 つは、1 対他の符号化設計に対応する です。
diffscore1 = score(:,2) - max(score(:,1),score(:,3));
diffscore の値は、2 番目のクラスを陽性クラス、残りを陰性クラスとして扱うバイナリ問題の分類スコアです。
[X,Y,T,~,OPTROCPT,suby,subnames] = perfcurve(species,diffscore1,'versicolor');既定の設定では、X は偽陽性率 (フォールアウトまたは 1 - 特異度)、Y は真陽性率 (再現率または感度) です。陽性クラスのラベルは versicolor です。陰性クラスを定義していないので、perfcurve では陽性クラスに属していない観測値が 1 つのクラスに属していると見なされます。この関数では、これらを陰性クラスとして扱います。
OPTROCPT
OPTROCPT = 1×2
0.1000 0.8000
suby
suby = 12×2
0 0
0.1800 0.1800
0.4800 0.4800
0.5800 0.5800
0.6200 0.6200
0.8000 0.8000
0.8800 0.8800
0.9200 0.9200
0.9600 0.9600
0.9800 0.9800
1.0000 1.0000
1.0000 1.0000
⋮
subnames
subnames = 1×2 cell
{'setosa'} {'virginica'}
ROC 曲線をプロットし、最適な動作点を ROC 曲線に表示します。
plot(X,Y) hold on plot(OPTROCPT(1),OPTROCPT(2),'ro') xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve for Classification by Classification Trees') hold off

最適な動作点に対応するしきい値を求めます。
T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))
ans = 0.2857
virginica を陰性クラスとして指定し、versicolor の ROC 曲線を計算してプロットします。
ここでも、陰性クラスのスコアを因子として組み込んだ関数を perfcurve に与えなければなりません。使用する関数の例は です。
diffscore2 = score(:,2) - score(:,3); [X,Y,~,~,OPTROCPT] = perfcurve(species,diffscore2,'versicolor', ... 'negClass','virginica'); OPTROCPT
OPTROCPT = 1×2
0.1800 0.8200
figure, plot(X,Y) hold on plot(OPTROCPT(1),OPTROCPT(2),'ro') xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve for Classification by Classification Trees') hold off

あるいは、rocmetricsオブジェクトを使用して ROC 曲線を作成できます。rocmetrics は、マルチクラス問題を一連のバイナリ問題に縮小する 1 対他の符号化設計を使用して、マルチクラスの分類問題をサポートします。各クラスの 1 対他の ROC 曲線をプロットして、各クラスのマルチクラス問題の性能を調べることができます。
rocmetrics オブジェクトを作成してパフォーマンス メトリクスを計算します。真のラベル、分類スコア、およびクラス名を指定します。
rocObj = rocmetrics(species,score,Model.ClassNames);
rocmetrics の関数 plot を使用して、各クラスの ROC 曲線をプロットします。
figure plot(rocObj)

関数 plot は各クラスのモデルの動作点に塗りつぶされた円を表示し、凡例には各曲線のクラス名と AUC 値が表示されます。rocmetrics オブジェクト rocObj に格納されたプロパティを使用して、最適動作点を求めることができます。例については、モデル操作点と最適な操作点の特定を参照してください。
標本データを読み込みます。
load fisheriris列ベクトル species は、3 種類のアヤメ (setosa、versicolor、virginica) で構成されています。double 行列 meas は、花に関する 4 種類の測定値 (がく片の長さ、がく片の幅、花弁の長さ、花弁の幅) から構成されています。すべての測定値は、センチメートル単位です。
最初の 2 つの特徴のみを予測子変数として使用します。versicolor および virginica という種に対応する測定値のみを使用して、バイナリ問題を定義します。
pred = meas(51:end,1:2);
二項応答変数を定義します。
resp = (1:100)'>50; % Versicolor = 0, virginica = 1ロジスティック回帰モデルを当てはめます。
mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');
ブートストラップを使用するサンプリングと縦方向平均化 (VA) によって、真陽性率 (TPR) について点単位の信頼区間を計算します。
[X,Y,T] = perfcurve(species(51:end,:),mdl.Fitted.Probability,... 'virginica','NBoot',1000,'XVals',[0:0.05:1]);
'NBoot',1000 は、ブートストラップ複製の数を 1000 に設定します。'XVals','All' は、すべてのスコアについて X、Y および T の値を返し、縦方向平均化を使用してすべての X の値 (偽陽性率) で Y の値 (真陽性率) の平均を計算するよう perfcurve に指定します。XVals を指定しない場合、既定では perfcurve はしきい値平均化を使用して信頼限界を計算します。
点単位の信頼区間をプロットします。
errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwVA','Location','Best')

常に偽陽性率 (FPR、この例では X の値) を制御できるとは限りません。このため、しきい値平均化により真陽性率 (TPR) について点単位の信頼区間を計算することが必要な場合があります。
[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,... 'virginica','NBoot',1000);
'TVals' を 'All' に設定した場合、または 'TVals' または 'Xvals' を設定しなかった場合、perfcurve はすべてのスコアについて X、Y および T の値を返し、しきい値平均化を使用して X と Y について点単位の信頼限界を計算します。
信頼限界をプロットします。
figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwTA','Location','Best')

しきい値を固定するように指定し、ROC 曲線を計算します。次に、曲線をプロットします。
[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,... 'virginica','NBoot',1000,'TVals',0:0.05:1); figure() errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1)); xlim([-0.02,1.02]); ylim([-0.02,1.02]); xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve with Pointwise Confidence Bounds') legend('PCBwTA','Location','Best')

入力引数
真のクラスのラベル。数値ベクトル、logical ベクトル、文字行列、string 配列、categorical 配列、文字ベクトルの cell 配列、または cell 配列として指定します。labels が cell 配列の場合、他の型のいずれかをもつ要素を含めることができます。この場合、perfcurve は交差検証を使用し、cell 配列の各要素を交差検証分割として扱います。scores が cell 配列の場合、labels も cell 配列でなければなりません。labels と scores は同じ数の要素を含んでいなければなりません。詳細は、グループ化変数を参照してください。
例: {"hi","mid","hi","low",...,"mid"}
例: ["H","M","H","L",...,"M"]
データ型: single | double | logical | char | string | cell | categorical
標本データについて分類器で返されるスコア。浮動小数点のベクトルまたは cell 配列として指定します。scores の要素数は labels と同じでなければなりません。labels が交差検証分割を表す cell 配列の場合、scores も cell 配列でなければなりません。
例: [0.82;0.60;0.79;0.16;…;0.71;0.48;0.63;0.53;0.35]
データ型: single | double | cell
陽性クラスのラベル。数値スカラー、logical スカラー、文字ベクトル、string スカラー、文字ベクトルが格納されているセル、または categorical スカラーを指定します。陽性クラスは、入力したラベルのメンバーでなければなりません。指定できる posclass の値は、labels の値によって異なります。
labels 値 | posclass 値 |
|---|---|
| 数値ベクトル | 数値スカラー |
| logical ベクトル | logical スカラー |
| 文字行列 | 文字ベクトル |
| string 配列 | string スカラー |
| 文字ベクトルの cell 配列 | 文字ベクトル、または文字ベクトルが含まれているセル |
| categorical ベクトル | categorical スカラー |
たとえば、癌診断問題で悪性腫瘍が陽性クラスの場合、posclass として 'malignant' を指定します。
データ型: single | double | logical | char | string | cell | categorical
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'NegClass','versicolor','XCrit','fn','NBoot',1000,'BootType','per' は、versicolor 種を陰性クラス、X 座標の基準として偽陰性、ブートストラップ標本の数として 1000 を指定します。また、百分位数法を使用して点単位の信頼限界を計算することも指定します。
陰性クラスのリスト。'NegClass' と数値配列、categorical 配列、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。既定の設定では、perfcurve は NegClass を 'all' に設定し、入力されたラベルの配列に含まれている陽性でないクラスをすべて陰性と見なします。
NegClass が、入力されたラベルの配列に含まれているクラスのサブセットである場合、perfcurve は陽性のクラスにも陰性のクラスにも属していないラベルをもつインスタンスを破棄します。
例: 'NegClass',{'versicolor','setosa'}
データ型: single | double | categorical | char | string | cell
X を計算する基準。'XCrit' と次のいずれかをコンマ区切りのペアとして指定します。
| 基準 | 説明 |
|---|---|
tp | 真陽性インスタンスの数。 |
fn | 偽陰性インスタンスの数 |
fp | 偽陽性インスタンスの数 |
tn | 真陰性インスタンスの数 |
tp+fp | 真陽性インスタンスと偽陽性インスタンスの合計 |
rpp | 陽性予測の比率rpp = (tp+fp)/(tp+fn+fp+tn) |
rnp | 陰性予測率rnp = (tn+fn)/(tp+fn+fp+tn) |
accu | 精度accu = (tp+tn)/(tp+fn+fp+tn) |
tpr、sens または reca | 真陽性率、または感度、または再現率tpr= sens = reca = tp/(tp+fn) |
fnr または miss | 偽陰性率、または失敗fnr = miss = fn/(tp+fn) |
fpr または fall | 偽陽性率、またはフォールアウト、または 1 - 特異度fpr = fall = fp/(tn+fp) |
tnr または spec | 真陰性率、または特異度tnr = spec = tn/(tn+fp) |
ppv または prec | 陽性の予測値、または精度ppv = prec = tp/(tp+fp) |
npv | 陰性の予測値npv = tn/(tn+fn) |
ecost | 期待コストecost = (tp*Cost(P|P)+fn*Cost(N|P)+fp* Cost(P|N)+tn*Cost(N|N))/(tp+fn+fp+tn) |
| カスタム基準 | 入力引数 (C,scale,cost) があるカスタム定義関数。C は 2 行 2 列の混同行列、scale は 2 行 1 列のクラス スケール配列、cost は 2 行 2 列の誤分類コスト行列です。 |
注意
2 つの特殊なしきい値 'reject all' および 'accept all' のいずれかにおいて、これらの基準から NaN 値が返される場合があります。
例: 'XCrit','ecost'
陽性クラスのスコアのしきい値。'TVals' と 'all' または数値配列をコンマ区切りのペアとして指定します。
メモ
XVals および TVals を同時に設定することはできません。
例: 'TVals',[0:0.05:1]
データ型: single | double | char | string
XVals または TVals で指定された数値ではなく、データ内の最も近い値を使用するためのインジケーター。'UseNearest' と 'on' または 'off' をコンマ区切りのペアとして指定します。
例: 'UseNearest','off'
perfcurve で NaN スコアを処理する方法。'ProcessNaN' と 'ignore' または 'addtofalse' をコンマ区切りのペアとして指定します。
ProcessNaNが'ignore'の場合、perfcurveはNaNスコアが含まれている観測値をデータから削除します。ProcessNaNが'addtofalse'の場合、perfcurveはNaNスコアが含まれているインスタンスを各クラスの偽分類カウントに追加します。つまり、perfcurveは常に陽性クラスのインスタンスを偽陰性 (FN) として、陰性クラスのインスタンスを偽陽性 (FP) としてカウントします。
例: 'ProcessNaN','addtofalse'
陽性クラスと陰性クラスの事前確率。'Prior' と 'empirical'、'uniform' または 2 要素の配列をコンマ区切りのペアとして指定します。
Prior が 'empirical' の場合、perfcurve は事前確率をクラスの頻度から導き出します。
Prior が 'uniform' の場合、perfcurve はすべての事前確率を同じ値に設定します。
例: 'Prior',[0.3,0.7]
データ型: single | double | char | string
誤分類コスト。'Cost' と [Cost(P|P),Cost(N|P);Cost(P|N),Cost(N|N)] を含む 2 行 2 列の行列をコンマ区切りのペアとして指定します。
Cost(N|P) は、陽性クラスを陰性クラスとして誤分類するコストです。Cost(P|N) は、陰性クラスを陽性クラスとして誤分類するコストです。通常は Cost(P|P) = 0 および Cost(N|N) = 0 ですが、perfcurve では正しい分類に対しても非ゼロのコストを指定できます。
例: 'Cost',[0 0.7;0.3 0]
データ型: single | double
観測値の重み。'Weights' と非負のスカラー値のベクトルをコンマで区切って指定します。このベクトルの要素数は、scores または labels の要素数と同じでなければなりません。
scores と labels が cell 配列に含まれていて Weights の指定が必要な場合は、重みも cell 配列に格納しなければなりません。この場合、Weights のすべての要素は、対応する scores の要素と同じ数の要素が含まれている数値ベクトルでなければなりません。たとえば、numel(weights{1}) == numel(scores{1}) です。
perfcurve で交差検証を使用して X、Y および T または信頼限界を計算する場合、観測値の数ではなくこれらの重みが使用されます。
perfcurve でブートストラップを使用して信頼限界を計算する場合、これらの重みは多項分布抽出確率として使用され、N 個の観測値のうち N 個が復元抽出されます。
既定は、1 のベクトル、または各要素が 1 のベクトルである cell 配列です。
データ型: single | double | cell
bootci で信頼区間を計算するために使用する信頼区間のタイプ。'BootType' と次のいずれかをコンマ区切りのペアとして指定します。
'bca'― BCa 法 (bias corrected and accelerated percentile method)'normまたは'normal'― バイアスと標準誤差をブートストラップした正規近似区間'per'または'percentile'― 百分位数法'cper'または'corrected percentile'― バイアス補正百分位数法'stud'または'student'― スチューデント化された信頼区間
例: 'BootType','cper'
信頼限界を計算するための bootci のオプション入力引数。'BootArg' と {'Nbootstd',nbootstd} から構成されるコンマ区切りのペアとして指定します。
スチューデント化されたブートストラップ信頼区間を計算する ('BootType' が 'student') 場合、'BootArg' を使用して bootci の名前と値のペアの引数 'Nbootstd' をさらに指定できます。たとえば、'BootArg',{'Nbootstd',nbootstd} は、nbootstd 個のデータ標本によるブートストラップを使用してブートストラップ統計量の標準誤差を推定します。nbootstd は正の整数であり、既定値は 100 です。
例: 'BootArg',{'Nbootstd',nbootstd}
データ型: cell
信頼区間の計算を制御するオプション。'Options' と、statset が返す構造体配列をコンマ区切りのペアとして指定します。これらのオプションには Parallel Computing Toolbox™ が必要です。perfcurve では、この引数を点単位の信頼限界の計算にのみ使用します。これらの限界を計算するには、labels および scores について cell 配列を渡すか、NBoot に正の整数を設定しなければなりません。
次の表は、使用できるオプションの一覧です。
| オプション | 説明 |
|---|---|
'UseParallel' |
|
'UseSubstreams' |
|
'Streams' |
これらが真の場合は、並列プールと同じサイズの cell 配列を使用します。並列プールが開いていない場合、 |
'UseParallel' が true で 'UseSubstreams' が false の場合、'Streams' の長さは perfcurve で使用するワーカーの数と等しくなければなりません。並列プールが既に開いている場合、'Streams' の長さは並列プールのサイズになります。並列プールがまだ開いていない場合、インストール状況と設定によっては MATLAB® がプールを開く可能性があります。予測結果をより確実にするために、parpool (Parallel Computing Toolbox) を使用し、並列プールを明示的に作成してから perfcurve を呼び出し 'Options',statset('UseParallel',true) を設定します。
例: 'Options',statset('UseParallel',true)
データ型: struct
出力引数
性能曲線の x 座標。m 行 3 列の行列として返されます。既定の設定では、X の値は偽陽性率 FPR (フォールアウトまたは 1 - 特異度) です。X を変更するには、名前と値のペアの引数 XCrit を使用します。
perfcurveで点単位の信頼限界を計算しない場合、または縦方向平均化を使用して計算する場合、Xはベクトルになります。perfcurveでしきい値平均化を使用して信頼限界を計算する場合、Xは m 行 3 列の行列になります。m は固定されたしきい値の数です。Xの 1 列目には平均値が格納されます。2 列目には点単位の信頼限界の下限が、3 列目には上限が格納されます。
X と Y の計算値に対する分類器のスコアのしきい値。ベクトルまたは m 行 3 列の行列として返されます。
perfcurveで点単位の信頼限界を計算しない場合、またはしきい値平均化を使用して計算する場合、Tはベクトルになります。perfcurveで縦方向平均化を使用して信頼限界を計算する場合、Tは m 行 3 列の行列になります。m は固定されたXの値の数です。Tの 1 列目には平均値が格納されます。2 列目には点単位の信頼限界の下限が、3 列目には上限が格納されます。
各しきい値に対し、TP はこのしきい値以上のスコアをもつ真陽性観測値の数であり、FP はこのしきい値以上のスコアをもつ偽陽性観測値の数です。perfcurve では陰性数の TN および FN も同様に定義されます。しきい値は降順で並べ替えられます。これは陽性カウントの昇順に対応します。
m 個の異なるしきい値がスコアの配列に含まれるようにするため、perfcurve は m + 1 行の配列として X、Y および T を返します。perfcurve は、要素 T(2:m+1) に個別のしきい値を設定し、T(1) には T(2) を複製します。慣例により、T(1) は最大の 'reject all' しきい値を表します。perfcurve は、対応する X と Y の値を TP = 0 および FP = 0 について計算します。T(end) の値は、TN = 0 および FN = 0 になる最小の 'accept all' しきい値です。
X と Y の計算値に対する曲線の下の領域 (AUC)。スカラー値または 3 行 1 列のベクトルとして返されます。
perfcurveで点単位の信頼限界を計算しない場合、AUCはスカラー値になります。perfcurveで縦方向平均化を使用して信頼限界を計算する場合、AUCは 3 行 1 列のベクトルになります。AUCの 1 列目には平均値が格納されます。2 列目には信頼限界の下限が、3 列目には上限が格納されます。
完璧な分類器では AUC = 1 になります。観測値を無作為にクラスに割り当てる分類器では、AUC = 0.5 になります。
XVals に 'all' (既定) を設定した場合、perfcurve は返される X と Y の値を使用して AUC を計算します。
XVals が数値配列の場合、perfcurve は XVals の最小要素と最大要素で指定される区間に含まれているすべての個別のスコアによる X と Y の値を使用して、AUC を計算します。より正確には、perfcurve は XVals を 'all' に設定した場合と同じようにすべての個別のしきい値に対して X を求めてから、min(XVals) と max(XVals) の間でこれらのサブセットを (対応する Y の値と共に) 使用して AUC を計算します。
perfcurve では、台形近似を使用して面積を推定します。X または Y の最初または最後の値が NaN の場合、perfcurve ではこれらを削除して AUC を計算できるようにします。これにより、特殊なしきい値 'reject all' または 'accept all' の場合に陽性の予測値 (PPV) や陰性の予測値 (NPV) などに対して NaN を生成する基準に対応できるようになります。
ROC 曲線の最適な動作点。最適な ROC 動作点の偽陽性率 (FPR) と真陽性率 (TPR) の値が含まれている 1 行 2 列の配列として返されます。
perfcurve では、標準的な ROC 曲線の場合のみ OPTROCPT を計算します。それ以外の場合は NaN が設定されます。ROC 曲線の最適な動作点を取得するため、perfcurve でははじめに次の式を使用して傾き S を求めます。
Cost(N|P) は、陽性のクラスを陰性のクラスとして誤分類するコストです。Cost(P|N) は、陰性のクラスを陽性のクラスとして誤分類するコストです。
P = TP + FN および N = TN + FPこれらは、それぞれ陽性のクラスと陰性のクラスにおける合計インスタンス数です。
次に、perfcurve は傾きが S の直線を ROC 曲線と交わるまで ROC プロットの左上隅 (FPR = 0、TPR = 1) から下および右に移動して、最適な動作点を求めます。
陰性サブクラスの値。配列として返されます。
SUBY は、各陰性クラスに対する Y の基準の値を個別に与えます。perfcurve は、各陰性クラスについて新しい列を SUBY に追加し、このクラスのみについてカウントされた真陰性 (TN) と偽陽性 (FP) に対する Y の値を設定します。
アルゴリズム
labels と scores について cell 配列を指定した場合、または NBoot に正の整数を設定した場合、perfcurve は X、Y、T および AUC について点単位の信頼限界を返します。labels と scores の cell 配列を指定して、同時に NBoot を正の整数に設定することはできません。
perfcurve はデータをリサンプリングし、交差検証またはブートストラップを使用して信頼限界を計算します。
交差検証 —
labelsとscoresについて cell 配列を指定した場合、perfcurveは交差検証を使用し、cell 配列の要素を交差検証の分割として扱います。labelsには、数値ベクトルの cell 配列、logical ベクトル、文字行列、文字ベクトルの cell 配列または categorical ベクトルを指定できます。labelsのすべての要素は同じ型でなければなりません。scoresには、数値ベクトルの cell 配列を指定できます。labelsとscoresの cell 配列は、要素数が同じでなければなりません。labelsのセル j に含まれているラベル数は、1 からscoresの要素数までの任意の j について、scoresのセル j に含まれているスコアの数と等しくなければなりません。ブートストラップ ―
NBootに正の整数 n を設定した場合、perfcurveは n 個のブートストラップ複製を生成して点単位の信頼限界を計算します。XCritまたはYCritを使用してXまたはYの基準に無名関数を設定した場合、perfcurveはブートストラップを使用しないと信頼限界を計算できません。
perfcurve は、2 つの方法のいずれかで信頼限界を計算します。
縦方向平均化 (VA) ―
perfcurveは、Xの固定値におけるYとTの信頼限界を推定します。つまり、perfcurveは固定されたXの値について ROC 曲線の標本を抽出し、対応するYとTの値の平均を計算して、標準偏差を計算します。名前と値のペアの引数XValsを使用すると、信頼限界を計算するためにXの値を固定できます。XValsを指定しない場合、perfcurveはすべてのX値において信頼限界を計算します。しきい値平均化 (TA) ―
perfcurveは、陽性クラスのスコアについて固定したTのしきい値で ROC 曲線の標本を抽出し、対応するXとYの値の平均を計算して、信頼限界を推定します。名前と値のペアの引数TValsを使用すると、この方法を使用して信頼限界を計算できます。TValsを'all'に設定した場合、またはTValsまたはXValsを指定しなかった場合、perfcurveはすべてのスコアについてX、YおよびTの値を返し、しきい値平均化を使用してYとXについて点単位の信頼限界を計算します。
信頼限界を計算する場合、Y はm 行 3 列の配列です。m は固定された X の値またはしきい値 (T の値) の数です。Y の 1 列目には平均値が格納されます。2 列目には点単位の信頼限界の下限が、3 列目には上限が格納されます。AUC は 3 要素の行ベクトルで、同じ規則に従います。perfcurve で VA を使用して信頼限界を計算する場合、T は m 行 3 列の行列、X は列ベクトルです。perfcurve で TA を使用する場合、X は m 行 3 列の行列、T は列ベクトルです。
perfcurve は点単位の信頼限界を返します。曲線全体の同時信頼限界は返されません。
代替機能
rocmetricsオブジェクトを作成して、ROC 曲線などの性能曲線のパフォーマンス メトリクスを計算できます。rocmetricsは、バイナリ問題とマルチクラスの分類問題の両方をサポートします。分類モデル オブジェクトの関数predict(ClassificationTreeのpredictなど) によって返された分類スコアを、マルチクラス モデル用に調整せずにrocmetricsに渡すことができます。rocmetricsには、ROC 曲線のプロット (plot)、マルチクラス問題の平均 ROC 曲線の特定 (average)、およびオブジェクト作成後の追加メトリクスの計算 (addMetrics) を行うためのオブジェクト関数が用意されています。詳細については、リファレンス ページとROC 曲線とパフォーマンス メトリクスを参照してください。
参照
[1] Fawcett, T. “ROC Graphs: Notes and Practical Considerations for Researchers”, Machine Learning 31, no. 1 (2004): 1–38.
[2] Zweig, M., and G. Campbell. “Receiver-Operating Characteristic (ROC) Plots: A Fundamental Evaluation Tool in Clinical Medicine.” Clinical Chemistry 39, no. 4 (1993): 561–577.
[3] Davis, J., and M. Goadrich. “The Relationship Between Precision-Recall and ROC Curves.” Proceedings of ICML ’06, 2006, pp. 233–240.
[4] Moskowitz, C. S., and M. S. Pepe. “Quantifying and Comparing the Predictive Accuracy of Continuous Prognostic Factors for Binary Outcomes.” Biostatistics 5, no. 1 (2004): 113–27.
[5] Huang, Y., M. S. Pepe, and Z. Feng. “Evaluating the Predictiveness of a Continuous Marker.” U. Washington Biostatistics Paper Series, 2006, 250–61.
[6] Briggs, W. M., and R. Zaretzki. “The Skill Plot: A Graphical Technique for Evaluating Continuous Diagnostic Tests.” Biometrics 64, no. 1 (2008): 250–256.
[7] Bettinger, R. “Cost-Sensitive Classifier Selection Using the ROC Convex Hull Method.” SAS Institute, 2003.
拡張機能
並列実行するには、この関数を呼び出すときに名前と値の引数 Options を指定し、statset を使用してオプション構造体の UseParallel フィールドを true に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2009a で導入R2022a 以降では、名前と値の引数 Cost の既定値は [0 1; 1 0] です。これは、新機能 rocmetrics と分類器の学習関数 (fitcsvm や fitctree など) の既定の誤分類コスト行列値と同じです。以前のリリースでは、Cost の既定値は [0 0.5; 0.5 0] です。
名前と値の引数 XCrit または YCrit として 'ecost' (期待コスト) を指定し、Cost の既定値を使用すると、この関数は、出力引数 X または Y に以前のリリースの値と比べて 2 倍の値を返します。
名前と値の引数 XCrit または YCrit としてカスタム メトリクスを指定し、Cost の既定値を使用すると、対応する出力引数値は、カスタム メトリクスでのコスト行列の使用方法によって異なります。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)