このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
perfcurve
分類器の出力用の受信者動作特性 (ROC) 曲線または他の性能曲線
構文
説明
例
ロジスティック回帰による分類の 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 値が表示されます。
ROC 曲線による分類方法の比較
標本データを読み込みます。
load ionosphere
X
は、予測子が含まれている 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 分類器の学習を参照してください。
分類木の ROC 曲線のプロット
標本データを読み込みます。
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
⋮
subnames
subnames = 1x2 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
に格納されたプロパティを使用して、最適動作点を求めることができます。例については、モデル操作点と最適な操作点の特定を参照してください。
ROC 曲線の点単位の信頼区間の計算
標本データを読み込みます。
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')
入力引数
labels
— 真のクラス ラベル
数値ベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | categorical 配列
真のクラスのラベル。数値ベクトル、logical ベクトル、文字行列、string 配列、文字ベクトルの cell 配列、または categorical 配列を指定します。詳細は、グループ化変数を参照してください。
例: {'hi','mid','hi','low',...,'mid'}
例: ['H','M','H','L',...,'M']
データ型: single
| double
| logical
| char
| string
| cell
| categorical
scores
— 分類器が返したスコア
ベクトルまたは浮動小数点数
何らかの標本データについて分類器が返したスコア。浮動小数点数のベクトルを指定します。scores
の要素数は labels
の要素数と同じでなければなりません。
データ型: single
| double
posclass
— 陽性クラスのラベル
数値スカラー | logical スカラー | 文字ベクトル | string スカラー | 文字ベクトルが格納されているセル | categorical スカラー
陽性クラスのラベル。数値スカラー、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
— 陰性クラスのリスト
'all'
(既定値) | 数値配列 | categorical 配列 | string 配列 | 文字ベクトルの cell 配列
陰性クラスのリスト。'NegClass'
と数値配列、categorical 配列、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。既定の設定では、perfcurve
は NegClass
を 'all'
に設定し、入力されたラベルの配列に含まれている陽性でないクラスをすべて陰性と見なします。
NegClass
が、入力されたラベルの配列に含まれているクラスのサブセットである場合、perfcurve
は陽性のクラスにも陰性のクラスにも属していないラベルをもつインスタンスを破棄します。
例: 'NegClass',{'versicolor','setosa'}
データ型: single
| double
| categorical
| char
| string
| cell
XCrit
— X
を計算する基準
'fpr'
(既定値) | 'fnr'
| 'tnr'
| 'ppv'
| 'ecost'
| ...
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'
XVals
— X
の基準の値
'all'
(既定値) | 数値配列
TVals
— 陽性クラスのスコアのしきい値
'all'
(既定値) | 数値配列
陽性クラスのスコアのしきい値。'TVals'
と 'all'
または数値配列をコンマ区切りのペアとして指定します。
メモ
XVals
および TVals
を同時に設定することはできません。
例: 'TVals',[0:0.05:1]
データ型: single
| double
| char
| string
UseNearest
— データ内の最も近い値を使用するためのインジケーター
'on'
(既定値) | 'off'
XVals
または TVals
で指定された数値ではなく、データ内の最も近い値を使用するためのインジケーター。'UseNearest'
と 'on'
または 'off'
をコンマ区切りのペアとして指定します。
例: 'UseNearest','off'
ProcessNaN
— perfcurve
で NaN
スコアを処理する方法
'ignore'
(既定値) | 'addtofalse'
perfcurve
で NaN
スコアを処理する方法。'ProcessNaN'
と 'ignore'
または 'addtofalse'
をコンマ区切りのペアとして指定します。
ProcessNaN
が'ignore'
の場合、perfcurve
はNaN
スコアが含まれている観測値をデータから削除します。ProcessNaN
が'addtofalse'
の場合、perfcurve
はNaN
スコアが含まれているインスタンスを各クラスの偽分類カウントに追加します。つまり、perfcurve
は常に陽性クラスのインスタンスを偽陰性 (FN) として、陰性クラスのインスタンスを偽陽性 (FP) としてカウントします。
例: 'ProcessNaN','addtofalse'
Prior
— 陽性クラスと陰性クラスの事前確率
'empirical'
(既定値) | 'uniform'
| 2 要素の配列
陽性クラスと陰性クラスの事前確率。'Prior'
と 'empirical'
、'uniform'
または 2 要素の配列をコンマ区切りのペアとして指定します。
Prior
が 'empirical'
の場合、perfcurve
は事前確率をクラスの頻度から導き出します。
Prior
が 'uniform'
の場合、perfcurve
はすべての事前確率を同じ値に設定します。
例: 'Prior',[0.3,0.7]
データ型: single
| double
| char
| string
Cost
— 誤分類のコスト
[0 1;1 0]
(既定値) | 2 行 2 列の行列
誤分類コスト。'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
— 観測値の重み
非負のスカラー値のベクトル | 非負のスカラー値のベクトルによる cell 配列
観測値の重み。'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
BootType
— bootci
の信頼区間のタイプ
'bca'
(既定値) | 'norm
| 'per'
| 'cper'
| 'stud'
bootci
で信頼区間を計算するために使用する信頼区間のタイプ。'BootType'
と次のいずれかをコンマ区切りのペアとして指定します。
'bca'
― BCa 法 (bias corrected and accelerated percentile method)'norm
または'normal'
― バイアスと標準誤差をブートストラップした正規近似区間'per'
または'percentile'
― 百分位数法'cper'
または'corrected percentile'
― バイアス補正百分位数法'stud'
または'student'
― スチューデント化された信頼区間
例: 'BootType','cper'
BootArg
— bootci
のオプション入力引数
[ ] (既定値) | {'Nbootstd',nbootstd}
信頼限界を計算するための bootci
のオプション入力引数。'BootArg'
と {'Nbootstd',nbootstd}
から構成されるコンマ区切りのペアとして指定します。
スチューデント化されたブートストラップ信頼区間を計算する ('BootType'
が 'student'
) 場合、'BootArg'
を使用して bootci
の名前と値のペアの引数 'Nbootstd'
をさらに指定できます。たとえば、'BootArg',{'Nbootstd',nbootstd}
は、nbootstd
個のデータ標本によるブートストラップを使用してブートストラップ統計量の標準誤差を推定します。nbootstd
は正の整数であり、既定値は 100 です。
例: 'BootArg',{'Nbootstd',nbootstd}
データ型: cell
Options
— 信頼区間の計算を制御するオプション
[]
(既定値) | statset
によって返される構造体配列
信頼区間の計算を制御するオプション。'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
— 性能曲線の x 座標
ベクトル、fpr
(既定値) | m 列 3 行の行列
性能曲線の x 座標。m 行 3 列の行列として返されます。既定の設定では、X
の値は偽陽性率 FPR (フォールアウトまたは 1 - 特異度) です。X
を変更するには、名前と値のペアの引数 XCrit
を使用します。
perfcurve
で点単位の信頼限界を計算しない場合、または縦方向平均化を使用して計算する場合、X
はベクトルになります。perfcurve
でしきい値平均化を使用して信頼限界を計算する場合、X
は m 行 3 列の行列になります。m は固定されたしきい値の数です。X
の 1 列目には平均値が格納されます。2 列目には点単位の信頼限界の下限が、3 列目には上限が格納されます。
Y
— 性能曲線の y 座標
ベクトル、tpr
(既定値) | m 列 3 行の行列
T
— 分類器のスコアのしきい値
ベクトル | m 列 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'
しきい値です。
AUC
— 曲線の下の領域
スカラー値 | 3 行 1 列のベクトル
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
を生成する基準に対応できるようになります。
OPTROCPT
— ROC 曲線の最適な動作点
1 行 2 列の配列
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
— 陰性サブクラスの値
配列
陰性サブクラスの値。配列として返されます。
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.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 Options
を指定し、statset
を使用してオプション構造体の UseParallel
フィールドを true
に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2009a で導入R2022a: Cost
の既定値の変更
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 コマンド
次の 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)