perfcurve
분류기 출력값에 대한 ROC(수신자 조작 특성) 곡선 또는 기타 성능 곡선
구문
설명
[___] = perfcurve(
는 하나 이상의 labels
,scores
,posclass
,Name,Value
)Name,Value
쌍 인수로 지정된 추가 옵션을 사용하여 ROC 곡선의 좌표와 함께 위에 열거된 구문에 나와 있는 다른 출력 인수를 반환합니다.
예를 들어, 음성 클래스 목록을 제공하거나, X
또는 Y
기준을 변경하거나, 교차 검증 또는 부트스트랩을 사용하여 점별(Pointwise) 신뢰한계를 계산하거나, 오분류 비용을 지정하거나, 신뢰한계를 병렬로 계산할 수 있습니다.
예제
로지스틱 회귀 분류에 대한 ROC 곡선 플로팅하기
표본 데이터를 불러옵니다.
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')
rocmetrics
객체를 생성하고 plot
객체 함수를 사용하여 ROC 곡선을 계산하고 플로팅할 수 있습니다.
rocObj = rocmetrics(species(51:end,:),scores,'virginica');
plot(rocObj)
plot
함수가 채워진 원을 모델 동작점에 표시하며 곡선에 대한 클래스 이름 및 AUC 값을 범례에 표시합니다.
ROC 곡선을 사용하여 분류 방법 비교하기
표본 데이터를 불러옵니다.
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 분류기 훈련시키기 항목을 참조하십시오.
분류 트리에 대한 ROC 곡선 플로팅하기
표본 데이터를 불러옵니다.
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
에 두 음성 클래스의 점수를 고려하는 함수를 제공해야 합니다. 이러한 함수 중 하나는 이며, 이는 일대전부(OVA) 코딩 설계에 대응합니다.
diffscore1 = score(:,2) - max(score(:,1),score(:,3));
diffscore
의 값은 이진 문제에 대한 분류 점수로, 두 번째 클래스를 양성 클래스로 처리하고 나머지를 음성 클래스로 처리합니다.
[X,Y,T,~,OPTROCPT,suby,subnames] = perfcurve(species,diffscore1,'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
{'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
는 일대전부(OVA) 코딩 설계를 사용하여 다중클래스 분류 문제를 지원하며, 해당 설계는 다중클래스 문제를 이진 문제의 집합으로 축소합니다. 각 클래스에 대한 일대전부(OVA) ROC 곡선을 플로팅하여 각 클래스에 대한 다중클래스 문제의 성능을 검토할 수 있습니다.
rocmetrics
객체를 생성하여 성능 메트릭을 계산합니다. 실제 레이블, 분류 점수 및 클래스 이름을 지정합니다.
rocObj = rocmetrics(species,score,Model.ClassNames);
rocmetrics
의 plot
함수를 사용하여 각 클래스에 대한 ROC 곡선을 플로팅합니다.
figure plot(rocObj)
plot
함수가 채워진 원을 각 클래스에 대한 모델 동작점에 표시하며, 각 곡선에 대한 클래스 이름 및 AUC 값을 범례에 표시합니다. rocmetrics
객체 rocObj
에 저장된 속성을 사용하여 최적의 동작점을 찾을 수 있습니다. 예제는 Find Model Operating Point and Optimal Operating Point 항목을 참조하십시오.
ROC 곡선에 대한 점별(Pointwise) 신뢰구간 계산하기
표본 데이터를 불러옵니다.
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
값을 반환하고 분계점 평균화를 사용하여 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
— 실제 클래스 레이블
숫자형 벡터 | 논리형 벡터 | 문자형 행렬 | string형 배열 | 문자형 벡터로 구성된 셀형 배열 | categorical형 배열
실제 클래스 레이블로, 숫자형 벡터, 논리형 벡터, 문자형 행렬, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 배열로 지정됩니다. 자세한 내용은 그룹화 변수 항목을 참조하십시오.
예: {'hi','mid','hi','low',...,'mid'}
예: ['H','M','H','L',...,'M']
데이터형: single
| double
| logical
| char
| string
| cell
| categorical
scores
— 분류기에서 반환되는 점수
부동소수점으로 구성된 벡터
일부 표본 데이터에 대해 분류기에서 반환되는 점수로, 부동소수점으로 구성된 벡터로 지정됩니다. scores
는 labels
와 같은 개수의 요소를 가져야 합니다.
데이터형: single
| double
posclass
— 양성 클래스 레이블
숫자형 스칼라 | 논리형 스칼라 | 문자형 벡터 | string형 스칼라 | 문자형 벡터를 포함하는 셀 | categorical형 스칼라
양성 클래스 레이블로, 숫자형 스칼라, 논리형 스칼라, 문자형 벡터, string형 스칼라, 문자형 벡터를 포함하는 셀 또는 categorical형 스칼라로 지정됩니다. 양성 클래스는 입력 레이블의 일원이어야 합니다. 지정할 수 있는 posclass
의 값은 labels
의 값에 따라 다릅니다.
labels 값 | posclass 값 |
---|---|
숫자형 벡터 | 숫자형 스칼라 |
논리형 벡터 | 논리형 스칼라 |
문자형 행렬 | 문자형 벡터 |
string형 배열 | string형 스칼라 |
문자형 벡터로 구성된 셀형 배열 | 문자형 벡터 또는 문자형 벡터를 포함하는 셀 |
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으로 지정합니다. 또한, 점별(Pointwise) 신뢰한계가 백분위수 방법을 사용하여 계산된다고 지정합니다.
NegClass
— 음성 클래스 목록
'all'
(디폴트 값) | 숫자형 배열 | categorical형 배열 | string형 배열 | 문자형 벡터로 구성된 셀형 배열
음성 클래스 목록으로, 'NegClass'
와 함께 숫자형 배열, categorical형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다. 기본적으로, 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 오분류 비용 행렬입니다. |
주의
이러한 기준 중 일부는 두 개의 특수 분계점 'reject all'
이나 'accept all'
중 하나에서 NaN
값을 반환합니다.
예: 'XCrit','ecost'
XVals
— X
기준에 대한 값
'all'
(디폴트 값) | 숫자형 배열
X
기준에 대한 값으로, 'XVals'
와 함께 숫자형 배열이 쉼표로 구분되어 지정됩니다.
XVals
를 지정하면perfcurve
는X
및Y
를 계산하고 지정된XVals
에 대해서만Y
의 점별(Pointwise) 신뢰한계(해당되는 경우)를 계산합니다.XVals
를 지정하지 않으면perfcurve
는X
및Y
와 함께 기본적으로 모든 점수에 대한 값을 계산합니다.
참고
XVals
와 TVals
를 동시에 설정할 수는 없습니다.
예: 'XVals',[0:0.05:1]
데이터형: single
| double
| char
| string
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
— NaN
점수를 처리하는 데 사용할 perfcurve
방법
'ignore'
(디폴트 값) | 'addtofalse'
NaN
점수를 처리하는 데 사용할 perfcurve
방법으로, 'ProcessNaN'
과 함께 'ignore'
또는 'addtofalse'
가 쉼표로 구분되어 지정됩니다.
ProcessNaN
이'ignore'
이면perfcurve
는 데이터에서NaN
점수를 갖는 관측값을 제거합니다.ProcessNaN
이'addtofalse'
이면perfcurve
는 각 클래스의 거짓 분류 개수에NaN
점수를 갖는 인스턴스를 추가합니다. 즉,perfcurve
는 양성 클래스의 인스턴스를 항상 거짓음성(FN)으로 계산하고 음성 클래스의 인스턴스를 항상 거짓양성(FP)으로 계산합니다.
예: 'ProcessNaN','addtofalse'
Prior
— 양성 클래스와 음성 클래스에 대한 사전 확률
'empirical'
(디폴트 값) | 'uniform'
| 두 요소를 가진 배열
양성 클래스와 음성 클래스에 대한 사전 확률로, 'Prior'
와 함께 'empirical'
, 'uniform'
또는 두 요소를 가진 배열이 쉼표로 구분되어 지정됩니다.
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
에서는 올바른 분류에 0이 아닌 비용을 지정할 수도 있습니다.
예: 'Cost',[0 0.7;0.3 0]
데이터형: single
| double
Weights
— 관측값 가중치
음이 아닌 스칼라 값으로 구성된 벡터 | 음이 아닌 스칼라 값으로 구성된 벡터로 구성된 셀형 배열
관측값 가중치로, 'Weights'
와 함께 음이 아닌 스칼라 값으로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 이 벡터는 scores
또는 labels
와 같은 수의 요소를 가져야 합니다.
scores
및 labels
가 셀형 배열이고 Weights
를 제공해야 하는 경우에는 Weights도 셀형 배열이어야 합니다. 이 경우, Weights
의 모든 요소는 scores
에서 대응되는 요소와 같은 개수의 요소를 갖는 숫자형 벡터여야 합니다. 예를 들면, numel(weights{1}) == numel(scores{1})
입니다.
교차 검증을 사용하여 X
, Y
및 T
또는 신뢰한계를 계산하는 경우 perfcurve
는 관측값 도수 대신 이러한 관측값 가중치를 사용합니다.
부트스트랩을 사용하여 신뢰한계를 계산하는 경우 perfcurve
는 이러한 가중치를 다항 표본추출 확률로 사용하여 N개의 관측값(전체 N개의 관측값 중)을 복원추출합니다.
디폴트 값은 1로 구성된 벡터 또는 각 요소가 1로 구성된 벡터인 셀형 배열입니다.
데이터형: single
| double
| cell
BootType
— bootci
에 대한 신뢰구간 유형
'bca'
(디폴트 값) | 'norm
| 'per'
| 'cper'
| 'stud'
신뢰구간을 계산하는 데 사용할 bootci
에 대한 신뢰구간 유형으로, 'BootType'
과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
'bca'
— 편향 수정된 가속 백분위수 방법'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
에 셀형 배열을 전달하거나 NBoot
를 양의 정수로 설정해야 합니다.
다음 표에는 사용 가능한 옵션이 요약되어 있습니다.
옵션 | 설명 |
---|---|
'UseParallel' |
|
'UseSubstreams' |
|
'Streams' |
이 경우, 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오. 병렬 풀이 열려 있지 않은 경우 |
'UseParallel'
이 true
이고 'UseSubstreams'
가 false
이면 'Streams'
의 길이는 perfcurve
에서 사용하는 워커의 개수와 같아야 합니다. 병렬 풀이 이미 열려 있는 경우 'Streams'
의 길이는 병렬 풀의 크기와 같습니다. 병렬 풀이 아직 열려 있지 않은 경우 MATLAB®이 설치 및 기본 설정에 따라 풀을 엽니다. 더욱 예측 가능한 결과를 얻으려면 perfcurve
를 불러오고 'Options',statset('UseParallel',true)
를 설정하기 전에, parpool
(Parallel Computing Toolbox)을 사용하고 병렬 풀을 명시적으로 생성해야 합니다.
예: 'Options',statset('UseParallel',true)
데이터형: struct
출력 인수
X
— 성능 곡선의 x 좌표
벡터, fpr
(디폴트 값) | m×3 행렬
성능 곡선의 x 좌표로, 벡터 또는 m×3 행렬로 반환됩니다. 기본적으로, X
값은 거짓양성률(FPR), 즉 부적합률 또는 1 – 특이도입니다. X
를 변경하려면 XCrit
이름-값 쌍의 인수를 사용하십시오.
perfcurve
가 점별 신뢰한계를 계산하지 않거나 세로 평균화(Vertical Averaging)를 사용하여 점별 신뢰한계를 계산하는 경우X
는 벡터입니다.perfcurve
가 분계점 평균화를 사용하여 신뢰한계를 계산하는 경우X
는 m×3 행렬이고, 여기서 m은 고정 분계점 값의 개수입니다.X
의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다.
Y
— 성능 곡선의 y 좌표
벡터, tpr
(디폴트 값) | m×3 행렬
T
— 분류기 점수에 대한 분계점
벡터 | m×3 행렬
X
및 Y
계산 값에 대한 분류기 점수의 분계점으로, 벡터 또는 m×3 행렬로 반환됩니다.
perfcurve
가 점별 신뢰한계를 계산하지 않거나 분계점 평균화를 사용하여 점별 신뢰한계를 계산하는 경우T
는 벡터입니다.perfcurve
가 세로 평균화를 사용하여 신뢰한계를 계산하는 경우T
는 m×3 행렬이고, 여기서 m은 고정된X
값의 개수입니다.T
의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다.
각 분계점에 대해 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
는 TP = 0
이고 FP = 0
이 되는 X
및 Y
값을 계산합니다. T(end)
값은 TN = 0
이고 FN = 0
이 되는 최저 'accept all'
분계점입니다.
AUC
— 곡선 아래 면적
스칼라 값 | 3×1 벡터
X
및 Y
계산 값에 대한 곡선 아래 면적(AUC
)으로, 스칼라 값 또는 3×1 벡터로 반환됩니다.
perfcurve
가 점별 신뢰한계를 계산하지 않는 경우AUC
는 스칼라 값입니다.perfcurve
가 세로 평균화를 사용하여 신뢰한계를 계산하는 경우AUC
는 3×1 벡터입니다.AUC
의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 신뢰한계의 하한과 상한을 포함합니다.
완벽한 분류기(perfect classifier)의 경우, 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
의 계산을 수행합니다. 따라서, 양성예측도(PPV)나 음성예측도(NPV)의 경우처럼 특수 분계점 'reject all'
또는 'accept all'
이 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
에 대한 셀형 배열을 제공하거나 NBoot
를 양의 정수로 설정하는 경우 perfcurve
는 X
, Y
, T
에 대한 점별 신뢰한계(Pointwise Confidence Bound)와 AUC
를 반환합니다. labels
및 scores
에 대한 셀형 배열을 제공하면서 동시에 NBoot
를 양의 정수로 설정할 수는 없습니다.
perfcurve
는 데이터를 재추출하여 교차 검증 또는 부트스트랩을 통해 신뢰한계를 계산합니다.
교차 검증 —
labels
및scores
에 대해 셀형 배열을 제공하면perfcurve
가 교차 검증을 사용하고 셀형 배열의 요소를 교차 검증 겹으로 처리합니다.labels
는 숫자형 벡터로 구성된 셀형 배열, 논리형 벡터, 문자형 행렬, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터일 수 있습니다.labels
의 모든 요소는 같은 유형을 가져야 합니다.scores
는 숫자형 벡터로 구성된 셀형 배열일 수 있습니다.labels
및scores
의 셀형 배열은 같은 개수의 요소를 가져야 합니다.labels
의 셀 j에 포함된 레이블 개수는scores
의 셀 j에 포함된 점수 개수와 같아야 합니다. 여기서, j는 1부터scores
의 총 요소 개수 사이의 값입니다.부트스트랩 —
NBoot
를 양의 정수 n으로 설정하면perfcurve
가 n개의 부트스트랩 복제를 생성하여 점별 신뢰한계를 계산합니다.XCrit
또는YCrit
를 사용하여X
또는Y
의 기준을 익명 함수로 설정하는 경우perfcurve
는 부트스트랩만 사용하여 신뢰한계를 계산할 수 있습니다.
perfcurve
는 다음 두 방법 중 하나를 사용하여 신뢰한계를 추정합니다.
세로 평균화(VA, Vertical averaging) —
perfcurve
는X
의 고정된 값에서Y
및T
에 대한 신뢰한계를 추정합니다. 즉,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
값을 반환하고 분계점 평균화를 사용하여Y
와X
에 대한 점별 신뢰한계를 계산합니다.
신뢰한계를 계산할 때 Y
는 m×3 배열이고, 여기서 m은 고정된 X
값 또는 분계점(T
값)의 개수입니다. Y
의 첫 번째 열은 평균값을 포함합니다. 두 번째 열과 세 번째 열은 각각 점별 신뢰한계의 하한과 상한을 포함합니다. AUC
는 동일한 규칙을 따르는 세 개 요소를 갖는 행 벡터입니다. perfcurve
가 VA를 사용하여 신뢰한계를 계산하는 경우 T
는 m×3 행렬이고, X
는 열 벡터입니다. perfcurve
가 TA를 사용하는 경우 X
는 m×3 행렬이고 T
는 열 벡터입니다.
perfcurve
는 점별 신뢰한계를 반환합니다. 전체 곡선에 대한 동시 신뢰 띠(simultaneous confidence band)는 반환하지 않습니다.
대체 기능
rocmetrics
객체를 생성하여 ROC 곡선과 다른 성능 곡선에 대한 성능 메트릭을 계산할 수 있습니다.rocmetrics
는 이진 분류 문제와 다중클래스 분류 문제를 모두 지원합니다. 분류 모델 객체의predict
함수(예:ClassificationTree
객체의predict
함수)가 반환하는 분류 점수는 점수를 다중클래스 모델에 맞게 조정하지 않고rocmetrics
객체에 전달할 수 있습니다.rocmetrics
는 ROC 곡선을 플로팅하는 객체 함수(plot
), 다중클래스 문제에 대한 평균 ROC 곡선을 찾는 객체 함수(average
) 및 객체를 생성한 후 추가적인 메트릭을 계산하는 객체 함수(addMetrics
)를 제공합니다. 자세한 내용은 도움말 페이지와 ROC Curve and Performance Metrics 항목을 참조하십시오.
참고 문헌
[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
을 사용하여 options 구조체의 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 명령 창에 입력하십시오. 웹 브라우저는 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)