이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

perfcurve

분류기 출력값에 대한 ROC(수신자 조작 특성) 곡선 또는 기타 성능 곡선

설명

예제

[X,Y] = perfcurve(labels,scores,posclass)는 실제 클래스 레이블 labels 및 양성 클래스 레이블 posclass가 주어진 경우 분류기 예측 변수로 구성된 벡터 scores에 대한 ROC 곡선의 X, Y 좌표를 반환합니다. plot(X,Y)를 사용하여 성능 곡선을 시각화할 수 있습니다.

[X,Y,T] = perfcurve(labels,scores,posclass)XY 계산 값에 대한 분류기 점수의 분계점으로 구성된 배열을 반환합니다.

예제

[X,Y,T,AUC] = perfcurve(labels,scores,posclass)XY 계산 값에 대한 곡선 아래 면적을 반환합니다.

예제

[X,Y,T,AUC,OPTROCPT] = perfcurve(labels,scores,posclass)는 ROC 곡선의 최적 조작점을 반환합니다.

[X,Y,T,AUC,OPTROCPT,SUBY] = perfcurve(labels,scores,posclass)는 음성 서브클래스에 대한 Y 값을 반환합니다.

예제

[X,Y,T,AUC,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(labels,scores,posclass)는 음성 클래스 이름을 반환합니다.

[___] = perfcurve(labels,scores,posclass,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용하여 ROC 곡선의 좌표와 함께 위에 열거된 구문에 나와 있는 다른 출력 인수를 반환합니다.

예를 들어, 음성 클래스 목록을 제공하거나, X 또는 Y 기준을 변경하거나, 교차 검증 또는 부트스트랩을 사용하여 점별(Pointwise) 신뢰한계를 계산하거나, 오분류 비용을 지정하거나, 신뢰한계를 병렬로 계산할 수 있습니다.

예제

모두 축소

표본 데이터를 불러옵니다.

load fisheriris

처음 두 특징만 예측 변수로 사용합니다. 종 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')

표본 데이터를 불러옵니다.

load ionosphere

X는 예측 변수로 구성된 351x34 실수 값 행렬입니다. 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의 두 번째 열은 나쁜 레이더 반환값에 대한 사후 확률을 포함합니다.

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 곡선은 전반적으로 다른 두 ROC 곡선보다 낮으며, 이는 다른 두 분류기 방법보다 표본내 성능이 낮다는 것을 나타냅니다.

세 가지 분류기에 대한 곡선 아래 면적을 비교합니다.

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

특징 공간의 두 행렬을 입력값으로 받아 시그모이드 커널을 사용하여 이들 입력값을 그람 행렬(Gram Matrix)로 변환하는 함수 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인 경우 더 나은 결과를 생성함을 확인합니다. 이러한 두 감마 모수 값을 갖는 분류기 성능을 시각적으로 비교한 것을 보려면 사용자 지정 커널을 사용하여 SVM 분류기 훈련시키기 항목을 참조하십시오.

표본 데이터를 불러옵니다.

load fisheriris

열 벡터 species는 세 가지 붓꽃 종, setosa, versicolor, virginica로 구성됩니다. double형 행렬 meas는 꽃에 대한 네 가지 측정값 유형인 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비로 구성됩니다. 모든 측정값은 센티미터 단위입니다.

꽃받침 길이와 너비를 예측 변수로 사용하여 분류 트리를 훈련시킵니다. 클래스 이름을 지정하는 것이 좋습니다.

Model = fitctree(meas(:,1:2),species, ...
    'ClassNames',{'setosa','versicolor','virginica'});

트리 Model을 기반으로 하여 종에 대한 클래스 레이블과 점수를 예측합니다.

[~,score] = resubPredict(Model);

점수는 하나의 관측값(데이터 행렬의 한 행)이 하나의 클래스에 속할 사후 확률입니다. score의 열은 'ClassNames'로 지정된 클래스에 대응됩니다. 따라서, 첫 번째 열은 setosa에 대응되고, 두 번째 열은 versicolor에 대응되며, 세 번째 열은 virginica에 대응됩니다.

실제 클래스 레이블 species가 주어진 경우 어떤 관측값이 versicolor에 속한다는 예측에 대한 ROC 곡선을 계산합니다. 또한, 음성 서브클래스에 대한 최적 조작점과 y 값을 계산합니다. 음성 클래스의 이름을 반환합니다.

이는 다중클래스 문제이므로 score(:,2)를 단순히 perfcurve에 대한 입력값으로 제공할 수는 없습니다. 그렇게 하는 경우 perfcurve에 두 음성 클래스(setosa 및 virginica)에 대한 점수와 관련한 충분한 정보가 제공되지 않습니다. 이 문제는 한 클래스의 점수만 파악해도 다른 클래스의 점수를 충분히 판단할 수 있는 이진 분류 문제와는 다릅니다. 따라서, perfcurve에 두 음성 클래스의 점수를 고려하는 함수를 제공해야 합니다. 이러한 함수 중 하나는 score(:,2)-max(score(:,1),score(:,3))입니다.

diffscore = score(:,2) - max(score(:,1),score(:,3));
[X,Y,T,~,OPTROCPT,suby,subnames] = perfcurve(species,diffscore,'versicolor');

X는 기본적으로 거짓양성률(부적합률 또는 1-특이도)이고, Y는 기본적으로 참양성률(재현율 또는 민감도)입니다. 양성 클래스 레이블은 versicolor입니다. 음성 클래스가 정의되지 않은 경우 perfcurve는 양성 클래스에 속하지 않는 관측값들이 한 클래스 내에 있다고 가정합니다. 이 함수는 이를 음성 클래스로 받습니다.

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 array
    {'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에 음성 클래스의 점수를 고려하는 함수를 제공해야 합니다. 사용할 함수를 예로 들면 score(:,2)-score(:,3)입니다.

diffscore = score(:,2) - score(:,3);
[X,Y,~,~,OPTROCPT] = perfcurve(species,diffscore,'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

표본 데이터를 불러옵니다.

load fisheriris

열 벡터 species는 세 가지 붓꽃 종, setosa, versicolor, virginica로 구성됩니다. double형 행렬 meas는 꽃에 대한 네 가지 측정값 유형인 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비로 구성됩니다. 모든 측정값은 센티미터 단위입니다.

처음 두 특징만 예측 변수로 사용합니다. 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'perfcurve가 모든 점수에 대한 X 값, Y 값, T 값을 반환하도록 요청하고 세로 평균화를 사용하여 모든 X 값(거짓양성률)에서 Y 값(참양성률)의 평균을 구하도록 합니다. 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 값을 반환하고 분계점 평균화를 사용하여 XY에 대한 점별 신뢰한계를 계산합니다.

신뢰한계를 플로팅합니다.

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')

입력 인수

모두 축소

실제 클래스 레이블로, 숫자형 벡터, 논리형 벡터, 문자형 행렬, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 배열로 지정됩니다. 자세한 내용은 Grouping Variables 항목을 참조하십시오.

예: {'hi','mid','hi','low',...,'mid'}

예: ['H','M','H','L',...,'M']

데이터형: single | double | logical | char | string | cell | categorical

일부 표본 데이터에 대해 분류기에서 반환되는 점수로, 부동소수점으로 구성된 벡터로 지정됩니다. scoreslabels와 같은 개수의 요소를 가져야 합니다.

데이터형: single | double

양성 클래스 레이블로, 숫자형 스칼라, 논리형 스칼라, 문자형 벡터, string형 스칼라, 문자형 벡터를 포함하는 셀 또는 categorical형 스칼라로 지정됩니다. 양성 클래스는 입력 레이블의 일원이어야 합니다. 지정할 수 있는 posclass의 값은 labels의 값에 따라 다릅니다.

labelsposclass
숫자형 벡터숫자형 스칼라
논리형 벡터논리형 스칼라
문자형 행렬문자형 벡터
string형 배열string형 스칼라
문자형 벡터로 구성된 셀형 배열문자형 벡터 또는 문자형 벡터를 포함하는 셀
categorical형 벡터 categorical형 스칼라

예를 들어, 암 진단 문제에서 악성 종양이 양성 클래스이면 posclass'malignant'로 지정하십시오.

데이터형: single | double | logical | char | string | cell | categorical

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정할 수 있습니다. 여기서 Name은 인수 이름이고 Value는 이에 대응하는 값입니다. Name은 따옴표로 묶어야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 원하는 순서로 지정할 수 있습니다.

예: 'NegClass','versicolor','XCrit','fn','NBoot',1000,'BootType','per'는 versicolor 종을 음성 클래스로 지정하고, X 좌표에 대한 기준을 거짓음성으로 지정하고, 부트스트랩 표본의 개수를 1000으로 지정합니다. 또한, 점별(Pointwise) 신뢰한계가 백분위수 방법을 사용하여 계산된다고 지정합니다.

음성 클래스 목록으로, 'NegClass'와 함께 숫자형 배열, categorical형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다. 기본적으로, perfcurveNegClass'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는 2x2 정오분류표이고, scale은 클래스 스케일로 구성된 2x1 배열이며, cost는 2x2 오분류 비용 행렬입니다.

주의

이러한 기준 중 일부는 두 개의 특수 분계점 'reject all'이나 'accept all' 중 하나에서 NaN 값을 반환합니다.

예: 'XCrit','ecost'

Y 계산 기준으로, 'YCrit'와 함께 X의 경우와 동일한 기준 옵션 중 하나가 쉼표로 구분되어 지정됩니다. 이 기준은 양성 클래스 점수의 단조(monotone) 함수일 필요가 없습니다.

예: 'YCrit','ecost'

X 기준에 대한 값으로, 'XVals'와 함께 숫자형 배열이 쉼표로 구분되어 지정됩니다.

  • XVals를 지정하면 perfcurveXY를 계산하고 지정된 XVals에 대해서만 Y점별(Pointwise) 신뢰한계(해당되는 경우)를 계산합니다.

  • XVals를 지정하지 않으면 perfcurveXY와 함께 기본적으로 모든 점수에 대한 값을 계산합니다.

참고

XValsTVals를 동시에 설정할 수는 없습니다.

예: 'XVals',[0:0.05:1]

데이터형: single | double | char | string

양성 클래스 점수에 대한 분계점으로, 'TVals'와 함께 'all' 또는 숫자형 배열이 쉼표로 구분되어 지정됩니다.

  • TVals'all'로 설정되거나 아예 지정되지 않고 XVals가 지정되지 않은 경우, perfcurveX, Y와 함께 모든 점수에 대한 T 값을 반환하고 분계점 평균화를 사용하여 XY에 대한 점별 신뢰한계를 계산합니다.

  • TVals가 숫자형 배열로 설정된 경우, perfcurveX, Y를 반환하고 지정된 분계점에 대한 T 값을 반환하고 분계점 평균화를 사용하여 이러한 분계점에서 XY에 대한 점별 신뢰한계를 계산합니다.

참고

XValsTVals를 동시에 설정할 수는 없습니다.

예: 'TVals',[0:0.05:1]

데이터형: single | double | char | string

지정된 XVals 또는 TVals 대신 데이터에서 가장 가까운 값을 사용할지에 대한 표시자로, 'UseNearest'와 함께 'on' 또는 'off'가 쉼표로 구분되어 지정됩니다.

  • 숫자형 XVals를 지정하고 UseNearest'on'으로 설정하는 경우, perfcurve는 데이터에서 검색되는 가장 가깝고 고유한 X 값을 반환하고 YT에서 이에 대응되는 값을 반환합니다.

  • 숫자형 XVals를 지정하고 UseNearest'off'로 설정하는 경우, perfcurve는 정렬된 XVals를 반환합니다.

  • 교차 검증 또는 부트스트랩으로 신뢰한계를 계산하는 경우 이 파라미터는 항상 'off'입니다.

예: 'UseNearest','off'

NaN 점수를 처리하는 데 사용할 perfcurve 방법으로, 'ProcessNaN'과 함께 'ignore' 또는 'addtofalse'가 쉼표로 구분되어 지정됩니다.

  • ProcessNaN'ignore'이면 perfcurve는 데이터에서 NaN 점수를 갖는 관측값을 제거합니다.

  • ProcessNaN'addtofalse'이면 perfcurve는 각 클래스의 거짓 분류 개수에 NaN 점수를 갖는 인스턴스를 추가합니다. 즉, perfcurve는 양성 클래스의 인스턴스를 항상 거짓음성(FN)으로 계산하고 음성 클래스의 인스턴스를 항상 거짓양성(FP)으로 계산합니다.

예: 'ProcessNaN','addtofalse'

양성 클래스와 음성 클래스에 대한 사전 확률로, 'Prior'와 함께 'empirical', 'uniform' 또는 두 요소를 가진 배열이 쉼표로 구분되어 지정됩니다.

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)]을 포함하는 2x2 행렬이 쉼표로 구분되어 지정됩니다.

Cost(N|P)는 양성 클래스를 음성 클래스로 오분류하는 데 대한 비용입니다. Cost(P|N)은 음성 클래스를 양성 클래스로 오분류하는 데 대한 비용입니다. 일반적으로 Cost(P|P) = 0이고 Cost(N|N) = 0이지만, perfcurve에서는 올바른 분류에 0이 아닌 비용을 지정할 수도 있습니다.

예: 'Cost',[0 0.7;0.3 0]

데이터형: single | double

신뢰한계에 대한 유의수준으로, 'Alpha'와 함께 범위 0~1에 속하는 스칼라 값이 쉼표로 구분되어 지정됩니다. perfcurve는 신뢰수준 1 – α에 대해 X, Y, T, AUC에 대한 100*(1 – α)% 점별 신뢰한계를 계산합니다.

예: 'Alpha',0.01은 99% 신뢰한계를 지정합니다.

데이터형: single | double

관측값 가중치로, 'Weights'와 함께 음이 아닌 스칼라 값으로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 이 벡터는 scores 또는 labels와 같은 수의 요소를 가져야 합니다.

scoreslabels가 셀형 배열이고 Weights를 제공해야 하는 경우에는 Weights도 셀형 배열이어야 합니다. 이 경우, Weights의 모든 요소는 scores에서 대응되는 요소와 같은 개수의 요소를 갖는 숫자형 벡터여야 합니다. 예를 들면, numel(weights{1}) == numel(scores{1})입니다.

교차 검증을 사용하여 X, YT 또는 신뢰한계를 계산하는 경우 perfcurve는 관측값 도수 대신 이러한 관측값 가중치를 사용합니다.

부트스트랩을 사용하여 신뢰한계를 계산하는 경우 perfcurve는 이러한 가중치를 다항 표본추출 확률로 사용하여 N개의 관측값(전체 N개의 관측값 중)을 복원추출합니다.

디폴트 값은 1로 구성된 벡터 또는 각 요소가 1로 구성된 벡터인 셀형 배열입니다.

데이터형: single | double | cell

신뢰한계 계산에 사용할 부트스트랩 복제 개수로, 'NBoot'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 디폴트 값 0은 신뢰한계가 계산되지 않음을 의미합니다.

labelsscores가 셀형 배열인 경우, 이 파라미터는 0이어야 합니다. 그 이유는 perfcurve가 교차 검증 또는 부트스트랩을 사용하여 신뢰한계를 계산할 수 있기 때문입니다.

예: 'NBoot',500

데이터형: single | double

신뢰한계를 계산하는 데 사용할 bootci에 대한 신뢰구간 유형으로, 'BootType'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'bca' — 편향 수정된 가속 백분위수 방법

  • 'norm 또는 'normal' — 부트스트랩 편향 및 표준 오차를 갖는 정규 근사 구간

  • 'per' 또는 'percentile' — 백분위수 방법

  • 'cper' 또는 'corrected percentile' — 편향 수정된 백분위수 방법

  • 'stud' 또는 'student' — 스튜던트화 신뢰구간

예: 'BootType','cper'

신뢰한계를 계산할 bootci에 대한 선택적 입력 인수로, 'BootArg'와 함께 bootci의 이름-값 쌍의 인수 {'Nbootstd',nbootstd} 또는 {'Stderr',stderr}이 쉼표로 구분되어 지정됩니다.

스튜던트화 부트스트랩 신뢰구간('BootType''student'임)을 계산할 때에는 'BootArg'를 사용하여 bootci의 이름-값 쌍의 인수 'Nbootstd' 또는 'Stderr'을 추가로 지정할 수 있습니다.

  • 'BootArg',{'Nbootstd',nbootstd}nbootstd 데이터 표본에 부트스트랩을 사용하여 부트스트랩 통계량에 대한 표준 오차를 추정합니다. nbootstd는 양의 정수이고 디폴트 값은 100입니다.

  • 'BootArg',{'Stderr',stderr}[1:numel(scores)]'를 입력 인수로 받는 사용자 정의 함수 stderr을 기준으로 부트스트랩 통계량의 표준 오차를 계산합니다. stderr은 함수 핸들입니다.

예: 'BootArg',{'Nbootstd',nbootstd}

데이터형: cell

신뢰구간의 계산을 제어하는 옵션으로, 'Options'와 함께 statset에서 반환되는 구조체형 배열이 쉼표로 구분되어 지정됩니다. 이 옵션을 사용하려면 Parallel Computing Toolbox™가 필요합니다. perfcurve는 점별 신뢰한계를 계산하는 데에만 이 인수를 사용합니다. 이러한 한계를 계산하려면 labelsscores에 셀형 배열을 전달하거나 NBoot를 양의 정수로 설정해야 합니다.

다음 표에는 사용 가능한 옵션이 요약되어 있습니다.

옵션설명
'UseParallel'
  • false — 직렬 계산입니다(디폴트 값).

  • true — 병렬 계산입니다. 이 옵션이 작동하려면 Parallel Computing Toolbox가 필요합니다.

'UseSubstreams'
  • false — 각 반복에 대해 개별 서브스트림을 사용하지 않습니다(디폴트 값).

  • true — 각 반복에 대해 개별 서브스트림을 사용하여 재현 가능한 방식으로 병렬로 계산합니다. 재현 가능한 방식으로 계산하려면 Streams를 서브스트림을 허용하는 유형인 'mlfg6331_64' 또는 'mrg32k3a'로 설정하십시오.

'Streams'

RandStream 객체 또는 이러한 객체로 구성된 셀형 배열입니다. Streams를 지정하는 경우 다음에 해당하는 경우를 제외하고는 단일 객체를 사용하십시오.

  • UseParalleltrue입니다.

  • UseSubstreamsfalse입니다.

이 경우, 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오. 병렬 풀이 열려 있지 않은 경우 Streams가 단일 난수 스트림을 제공해야 합니다.

'UseParallel'true이고 'UseSubstreams'false이면 'Streams'의 길이는 perfcurve에서 사용하는 워커의 개수와 같아야 합니다. 병렬 풀이 이미 열려 있는 경우 'Streams'의 길이는 병렬 풀의 크기와 같습니다. 병렬 풀이 아직 열려 있지 않은 경우 MATLAB®이 설치 및 기본 설정에 따라 풀을 엽니다. 더욱 예측 가능한 결과를 얻으려면 perfcurve를 불러오고 'Options',statset('UseParallel',true)를 설정하기 전에, parpool을 사용하고 병렬 풀을 명시적으로 생성해야 합니다.

예: 'Options',statset('UseParallel',true)

데이터형: struct

출력 인수

모두 축소

성능 곡선의 x 좌표로, 벡터 또는 mx3 행렬로 반환됩니다. 기본적으로, X 값은 거짓양성률(FPR), 즉 부적합률 또는 1 – 특이도입니다. X를 변경하려면 XCrit 이름-값 쌍의 인수를 사용하십시오.

  • perfcurve점별 신뢰한계를 계산하지 않거나 세로 평균화(Vertical Averaging)를 사용하여 점별 신뢰한계를 계산하는 경우 X는 벡터입니다.

  • perfcurve가 분계점 평균화를 사용하여 신뢰한계를 계산하는 경우 X는 mx3 행렬이고, 여기서 m은 고정 분계점 값의 개수입니다. X의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다.

성능 곡선의 y 좌표로, 벡터 또는 mx3 행렬로 반환됩니다. 기본적으로, Y 값은 참양성률(TPR), 즉 재현율 또는 민감도입니다. Y를 변경하려면 YCrit 이름-값 쌍의 인수를 사용하십시오.

  • perfcurve점별 신뢰한계를 계산하지 않는 경우 Y는 벡터입니다.

  • perfcurve가 신뢰한계를 계산하는 경우 Y는 mx3 행렬이고, 여기서 m은 고정된 X 값 또는 분계점(T 값)의 개수입니다. Y의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다.

XY 계산 값에 대한 분류기 점수의 분계점으로, 벡터 또는 mx3 행렬로 반환됩니다.

  • perfcurve점별 신뢰한계를 계산하지 않거나 분계점 평균화를 사용하여 점별 신뢰한계를 계산하는 경우 T는 벡터입니다.

  • perfcurve가 세로 평균화를 사용하여 신뢰한계를 계산하는 경우 T는 mx3 행렬이고, 여기서 m은 고정된 X 값의 개수입니다. T의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다.

각 분계점에 대해 TP는 점수가 이 분계점보다 크거나 같은 참양성 관측값의 도수이고 FP는 점수가 이 분계점보다 크거나 같은 거짓양성 관측값의 도수입니다. perfcurve는 유사한 방식으로 음성 도수 TNFN을 정의합니다. 그런 다음 이 함수는 양성 도수의 오름차순에 대응되는 내림차순으로 분계점을 정렬합니다.

점수 배열에서 구한 m개의 다른 분계점에 대해 perfcurve는 m + 1개 행을 갖는 X 배열, Y 배열, T 배열을 반환합니다. perfcurve는 요소 T(2:m+1)을 개별 분계점으로 설정하고 T(1)T(2)를 복제합니다. 일반적으로 T(1)은 최고 'reject all' 분계점을 나타내고, perfcurveTP = 0이고 FP = 0이 되는 XY 값을 계산합니다. T(end) 값은 TN = 0이고 FN = 0이 되는 최저 'accept all' 분계점입니다.

XY 계산 값에 대한 곡선 아래 면적(AUC)으로, 스칼라 값 또는 3x1 벡터로 반환됩니다.

  • perfcurve점별 신뢰한계를 계산하지 않는 경우 AUC는 스칼라 값입니다.

  • perfcurve가 세로 평균화를 사용하여 신뢰한계를 계산하는 경우 AUC는 3x1 벡터입니다. AUC의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 신뢰한계의 하한과 상한을 포함합니다.

완벽한 분류기(perfect classifier)의 경우, AUC = 1입니다. 관측값을 클래스로 임의로 할당하는 분류기의 경우, AUC = 0.5입니다.

XVals'all'(디폴트 값)로 설정하는 경우, perfcurve는 반환되는 X 값과 Y 값을 사용하여 AUC를 계산합니다.

XVals가 숫자형 배열인 경우, perfcurveXVals의 최소 요소와 최대 요소에 의해 규정되는 구간에 속하는 모든 개별 점수에 대한 X 값과 Y 값을 사용하여 AUC를 계산합니다. 좀 더 정확히 설명하자면 perfcurveXVals가 마치 'all'로 설정된 것처럼 모든 개별 분계점에 대해 X 값을 구한 후 min(XVals)max(XVals) 사이에 있는 일부만을 사용하여(대응되는 Y 값과 함께) AUC를 계산합니다.

perfcurve는 사다리꼴 근사를 사용하여 면적을 추정합니다. X 또는 Y의 첫 번째 값이나 마지막 값이 NaN이면 perfcurve는 이 값을 제거하여 AUC의 계산을 수행합니다. 따라서, 양성예측도(PPV)나 음성예측도(NPV)의 경우처럼 특수 분계점 'reject all' 또는 'accept all'NaN이 되는 기준도 처리가 가능합니다.

ROC 곡선의 최적 조작점으로, ROC의 최적 조작점에 대한 거짓양성률(FPR) 값과 참양성률(TPR) 값을 갖는 1x2 배열로 반환됩니다.

perfcurve는 표준 ROC 곡선에 대해서만 OPTROCPT를 계산하고 그렇지 않은 경우에는 NaN으로 설정합니다. ROC 곡선의 최적 조작점을 구하기 위해 perfcurve는 먼저 다음을 사용하여 기울기 S를 구합니다.

S=Cost(P|N)Cost(N|N)Cost(N|P)Cost(P|P)*NP

  • Cost(N|P)는 양성 클래스를 음성 클래스로 오분류하는 데 대한 비용입니다. Cost(P|N)은 음성 클래스를 양성 클래스로 오분류하는 데 대한 비용입니다.

  • P = TP + FN이고 N = TN + FP입니다. 이들은 각각 양성 클래스와 음성 클래스의 총 인스턴스 개수입니다.

그런 다음 perfcurve는 기울기 S를 갖는 직선을 ROC 곡선과 교차할 때까지 ROC 플롯의 왼쪽 위 코너(FPR = 0, TPR = 1)에서 오른쪽 아래로 움직여 최적 조작점을 구합니다.

음성 서브클래스의 값으로, 배열로 반환됩니다.

  • 음성 클래스 하나만 지정하는 경우 SUBYY와 같습니다.

  • k개 음성 클래스를 지정하는 경우 SUBY는 크기가 mxk인 행렬이며, 여기서 m은 XY에 대해 반환되는 값의 개수이고 k는 음성 클래스의 개수입니다. perfcurve는 모든 음성 클래스에 대한 개수의 합을 구하여 Y 값을 계산합니다.

SUBY는 각각의 음성 클래스에 대한 Y 기준의 값을 개별적으로 제공합니다. 음성 클래스 각각에 대해 perfcurveSUBY에 새 열을 배치하고 이 클래스에 대해 계산된 참음성(TN) 및 거짓양성(FP)에 대한 Y 값으로 열을 채웁니다.

음성 클래스 이름으로, 셀형 배열로 반환됩니다.

  • 음성 클래스 이름으로 구성된 입력 배열 NegClass를 제공하면 perfcurve가 이름을 SUBYNAMES로 복사합니다.

  • NegClass를 제공하지 않으면 perfcurve가 입력 레이블에서 SUBYNAMES를 추출합니다. SUBYNAMES의 순서는 SUBY의 열의 순서와 같습니다. 즉, SUBY(:,1)은 음성 클래스 SUBYNAMES{1}에 대한 것이고, SUBY(:,2)는 음성 클래스 SUBYNAMES{2}에 대한 식입니다.

알고리즘

모두 축소

점별 신뢰한계

labelsscores에 대한 셀형 배열을 제공하거나 NBoot를 양의 정수로 설정하는 경우 perfcurveX, Y, T에 대한 점별 신뢰한계(Pointwise Confidence Bound)와 AUC를 반환합니다. labelsscores에 대한 셀형 배열을 제공하면서 동시에 NBoot를 양의 정수로 설정할 수는 없습니다.

perfcurve는 데이터를 재추출하여 교차 검증 또는 부트스트랩을 통해 신뢰한계를 계산합니다.

  • 교차 검증 — labelsscores에 대해 셀형 배열을 제공하면 perfcurve가 교차 검증을 사용하고 셀형 배열의 요소를 교차 검증 겹으로 처리합니다. labels는 숫자형 벡터로 구성된 셀형 배열, 논리형 벡터, 문자형 행렬, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터일 수 있습니다. labels의 모든 요소는 같은 유형을 가져야 합니다. scores는 숫자형 벡터로 구성된 셀형 배열일 수 있습니다. labelsscores의 셀형 배열은 같은 개수의 요소를 가져야 합니다. labels의 셀 j에 포함된 레이블 개수는 scores의 셀 j에 포함된 점수 개수와 같아야 합니다. 여기서, j는 1부터 scores의 총 요소 개수 사이의 값입니다.

  • 부트스트랩 — NBoot를 양의 정수 n으로 설정하면 perfcurve가 n개의 부트스트랩 복제를 생성하여 점별 신뢰한계를 계산합니다. XCrit 또는 YCrit를 사용하여 X 또는 Y의 기준을 익명 함수로 설정하는 경우 perfcurve는 부트스트랩만 사용하여 신뢰한계를 계산할 수 있습니다.

perfcurve는 다음 두 방법 중 하나를 사용하여 신뢰한계를 추정합니다.

  • 세로 평균화(VA, Vertical averaging) — perfcurveX의 고정된 값에서 YT에 대한 신뢰한계를 추정합니다. 즉, perfcurve는 고정된 X 값에 대한 ROC 곡선의 표본을 가져와서 대응되는 Y 값과 T 값의 평균을 구하고 표준 오차를 계산합니다. XVals 이름-값 쌍의 인수를 사용하여 신뢰한계를 계산하는 데 사용할 X 값을 고정할 수 있습니다. XVals를 지정하지 않으면 perfcurve가 모든 X 값에서 신뢰한계를 계산합니다.

  • 분계점 평균화(TA, Threshold averaging) — perfcurve는 양성 클래스 점수에 대한 고정된 분계점 T에서 ROC 곡선의 표본을 가져와서 대응되는 X 값과 Y 값의 평균을 구하고 신뢰한계를 추정합니다. TVals 이름-값 쌍의 인수를 사용하여 이 방법으로 신뢰한계를 계산할 수 있습니다. TVals'all'로 설정하거나 TVals 또는 XVals를 지정하지 않는 경우, perfcurve는 모든 점수에 대해 X 값, Y 값, T 값을 반환하고 분계점 평균화를 사용하여 YX에 대한 점별 신뢰한계를 계산합니다.

신뢰한계를 계산할 때 Y는 mx3 배열이고, 여기서 m은 고정된 X 값 또는 분계점(T 값)의 개수입니다. Y의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다. AUC는 동일한 규칙을 따르는 세 개 요소를 갖는 행 벡터입니다. perfcurve가 VA를 사용하여 신뢰한계를 계산하는 경우 T는 mx3 행렬이고, X는 열 벡터입니다. perfcurve가 TA를 사용하는 경우 X는 mx3 행렬이고 T는 열 벡터입니다.

perfcurve는 점별 신뢰한계를 반환합니다. 전체 곡선에 대한 동시 신뢰 띠(simultaneous confidence band)는 반환하지 않습니다.

참고 문헌

[1] T. Fawcett. “ROC Graphs: Notes and Practical Considerations for Researchers”, 2004.

[2] Zweig, M., and G. Campbell. “Receiver-Operating Characteristic (ROC) Plots: A Fundamental Evaluation Tool in Clinical Medicine.” Clin. Chem. 1993, 39/4, pp. 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., and M. Pepe. “Quantifying and comparing the predictive accuracy of continuous prognostic factors for binary outcomes.” Biostatistics, 2004, 5, pp. 113–127.

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

[6] Briggs, W., and R. Zaretzki. “The Skill Plot: A Graphical Technique for Evaluating Continuous Diagnostic Tests.” Biometrics, 2008, 63, pp. 250 – 261.

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

확장 기능

참고 항목

| | | | | |

도움말 항목

R2009a에 개발됨