confusionmat

분류 문제에 대한 정오분류표 계산

설명

예제

C = confusionmat(group,grouphat)는 알려진 그룹 group과 예측된 그룹 grouphat에 의해 결정된 정오분류표 C를 반환합니다.

예제

C = confusionmat(group,grouphat,'Order',grouporder)grouporder를 사용하여 C의 행과 열의 순서를 지정합니다.

예제

[C,order] = confusionmat(___)는 또한 위에 열거된 구문에 나와 있는 입력 인수를 사용하여 C의 행과 열 순서를 변수 order에 반환합니다.

예제

모두 축소

두 개의 오분류와 한 개의 누락된 분류가 있는 데이터에 대한 정오분류표를 표시합니다.

알려진 그룹과 예측된 그룹에 대한 벡터를 생성합니다.

g1 = [3 2 2 3 1 1]';	% Known groups
g2 = [4 2 3 NaN 1 1]';	% Predicted groups

정오분류표를 반환합니다.

C = confusionmat(g1,g2)
C = 4×4

     2     0     0     0
     0     1     1     0
     0     0     0     1
     0     0     0     0

정오분류표 C의 행과 열에 대한 인덱스는 동일하며, 기본적으로 [g1;g2]의 정렬된 순서, 즉 (1,2,3,4)로 정렬됩니다.

이 정오분류표는 그룹 1에 속하는 것으로 알려진 두 개의 데이터 점이 올바르게 분류되었음을 보여줍니다. 그룹 2의 경우, 데이터 점 중 하나가 그룹 3으로 오분류되었습니다. 또한, 그룹 3에 속하는 것으로 알려진 데이터 점 중 하나가 그룹 4로 오분류되었습니다. confusionmat는 그룹화 변수 g2에 있는 NaN 값을 결측값으로 처리하여 C의 행과 열에 포함시키지 않습니다.

confusionchart를 사용하여 정오분류표를 정오분류표 차트로 플로팅합니다.

confusionchart(C);

정오분류표를 먼저 계산한 후 플로팅할 필요가 없습니다. 대신 confusionchart를 사용하여 실제 레이블과 예측 레이블에서 직접 정오분류표 차트를 플로팅할 수 있습니다.

cm = confusionchart(g1,g2)

cm = 
  ConfusionMatrixChart with properties:

    NormalizedValues: [4x4 double]
         ClassLabels: [4x1 double]

  Show all properties

ConfusionMatrixChart 객체는 NormalizedValues 속성에 숫자형 정오분류표를 저장하고 ClassLabels 속성에 클래스를 저장합니다. 점 표기법을 사용하여 이러한 속성을 표시합니다.

cm.NormalizedValues
ans = 4×4

     2     0     0     0
     0     1     1     0
     0     0     0     1
     0     0     0     0

cm.ClassLabels
ans = 4×1

     1
     2
     3
     4

두 개의 오분류와 한 개의 누락된 분류가 있는 데이터에 대한 정오분류표를 표시하고 그룹 순서를 지정합니다.

알려진 그룹과 예측된 그룹에 대한 벡터를 생성합니다.

g1 = [3 2 2 3 1 1]';	% Known groups
g2 = [4 2 3 NaN 1 1]';	% Predicted groups

그룹 순서를 지정하고 정오분류표를 반환합니다.

C = confusionmat(g1,g2,'Order',[4 3 2 1])
C = 4×4

     0     0     0     0
     1     0     0     0
     0     1     1     0
     0     0     0     2

정오분류표 C의 행과 열에 대한 인덱스는 동일하며, 그룹 순서로 지정된 순서, 즉 (4,3,2,1)로 정렬됩니다.

정오분류표 C의 두 번째 행은 그룹 3에 속하는 것으로 알려진 데이터 점 중 하나가 그룹 4로 오분류되었음을 보여줍니다. C의 세 번째 행은 그룹 2에 속하는 데이터 점 중 하나가 그룹 3으로 오분류되었음을 보여주고, 네 번째 행은 그룹 1에 속하는 것으로 알려진 두 개의 데이터 점이 올바르게 분류되었음을 보여줍니다. confusionmat는 그룹화 변수 g2에 있는 NaN 값을 결측값으로 처리하여 C의 행과 열에 포함시키지 않습니다.

fisheriris 데이터 세트의 표본에 대해 분류를 수행하고 결과로 생성되는 분류에 대한 정오분류표를 표시합니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

load fisheriris

데이터에서 측정값과 그룹을 임의화합니다.

rng(0,'twister'); % For reproducibility
numObs = length(species);
p = randperm(numObs);
meas = meas(p,:);
species = species(p);

데이터의 첫 번째 절반에 포함된 측정값을 사용하여 판별분석 분류기를 훈련시킵니다.

half = floor(numObs/2);
training = meas(1:half,:);
trainingSpecies = species(1:half);
Mdl = fitcdiscr(training,trainingSpecies);

훈련된 분류기를 사용하여 데이터의 나머지 절반에 포함된 측정값에 대한 레이블을 예측합니다.

sample = meas(half+1:end,:);
grouphat = predict(Mdl,sample);

그룹 순서를 지정하고 결과로 생성된 분류에 대한 정오분류표를 표시합니다.

group = species(half+1:end);
[C,order] = confusionmat(group,grouphat,'Order',{'setosa','versicolor','virginica'})
C = 3×3

    29     0     0
     0    22     2
     0     0    22

order = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

이 정오분류표는 setosa 및 virginica에 속하는 측정값이 올바르게 분류되었지만 versicolor에 속하는 측정값 중 두 개가 virginica로 오분류되었음을 보여줍니다. 출력값 order는 그룹 순서 {'setosa','versicolor','virginica'}로 지정된 순서로 정오분류표의 행과 열의 순서를 포함합니다.

fisheriris 데이터 세트로 구성된 tall형 배열에 대해 분류를 수행하고, confusionmat 함수를 사용하여 알려진 tall형 레이블 및 예측된 tall형 레이블에 대한 정오분류표를 계산한 후 confusionchart 함수를 사용하여 정오분류표를 플로팅합니다.

tall형 배열에 대한 계산을 수행할 때 MATLAB®은 병렬 풀(Parallel Computing Toolbox™를 사용할 경우 디폴트 값) 또는 로컬 MATLAB 세션을 사용합니다. Parallel Computing Toolbox가 있는 상태에서 로컬 MATLAB 세션을 사용하여 예제를 실행하려는 경우 mapreducer 함수를 사용하여 전역 실행 환경을 변경하면 됩니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

load fisheriris

메모리 내 배열 measspecies를 tall형 배열로 변환합니다.

tx = tall(meas);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 4).
ty = tall(species);

tall형 배열에 포함된 관측값 개수를 구합니다.

numObs = gather(length(ty));   % gather collects tall array into memory
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.46 sec

재현이 가능하도록 rngtallrng를 사용하여 난수 생성기의 시드값을 설정하고, 훈련 표본을 무작위로 선택합니다. 결과는 워커의 개수 및 tall형 배열의 실행 환경에 따라 다를 수 있습니다. 자세한 내용은 Control Where Your Code Runs (MATLAB) 항목을 참조하십시오.

rng('default') 
tallrng('default')
numTrain = floor(numObs/2);
[txTrain,trIdx] = datasample(tx,numTrain,'Replace',false);
tyTrain = ty(trIdx); 

훈련 표본에 대해 결정 트리 분류기 모델을 피팅합니다.

mdl = fitctree(txTrain,tyTrain); 
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 2: Completed in 3.4 sec
- Pass 2 of 2: Completed in 2.2 sec
Evaluation completed in 8.5 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 1.7 sec
- Pass 2 of 4: Completed in 2 sec
- Pass 3 of 4: Completed in 3.6 sec
- Pass 4 of 4: Completed in 2.9 sec
Evaluation completed in 13 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 1.3 sec
- Pass 2 of 4: Completed in 1.7 sec
- Pass 3 of 4: Completed in 3.2 sec
- Pass 4 of 4: Completed in 3.2 sec
Evaluation completed in 13 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 1.3 sec
- Pass 2 of 4: Completed in 2 sec
- Pass 3 of 4: Completed in 3.7 sec
- Pass 4 of 4: Completed in 2.4 sec
Evaluation completed in 12 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 0.72 sec
- Pass 2 of 4: Completed in 1.9 sec
- Pass 3 of 4: Completed in 2.9 sec
- Pass 4 of 4: Completed in 3.7 sec
Evaluation completed in 12 sec

훈련된 모델을 사용하여 검정 표본에 대한 레이블을 예측합니다.

txTest = tx(~trIdx,:);
label = predict(mdl,txTest);

결과로 생성된 분류에 대한 정오분류표를 계산합니다.

tyTest = ty(~trIdx);
[C,order] = confusionmat(tyTest,label)
C =

  MxNx... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :


order =

  MxNx... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

gather 함수를 사용하여 보류했던 계산을 수행하고 confusionmat의 결과를 메모리에 반환합니다.

gather(C)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.9 sec
Evaluation completed in 3 sec
ans = 3×3

    20     0     0
     1    25     5
     0     0    24

gather(order)
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.039 sec
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

이 정오분류표는 versicolor 클래스에 속하는 측정값 세 개가 오분류되었음을 보여줍니다. setosa 및 virginica에 속하는 모든 측정값은 올바르게 분류되었습니다.

정오분류표를 계산하고 플로팅하려면 대신 confusionchart를 사용하십시오.

cm = confusionchart(tyTest,label)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.2 sec
Evaluation completed in 2.1 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.1 sec
Evaluation completed in 2 sec

cm = 
  ConfusionMatrixChart with properties:

    NormalizedValues: [3x3 double]
         ClassLabels: {3x1 cell}

  Show all properties

입력 인수

모두 축소

관측값을 분류하는 데 사용되는 알려진 그룹으로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.

groupgrouphat과 같은 유형의 그룹화 변수입니다. group 인수는 grouphat과 관측값 개수가 같아야 합니다(Grouping Variables의 설명 참조). confusionmat 함수는 문자형 배열과 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다. 또한, confusionmatgroup에 있는 NaN 값, 빈 값, 'undefined' 값을 결측값으로 처리하고 고유한 그룹 또는 범주로 간주하지 않습니다.

예: {'Male','Female','Female','Male','Female'}

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

관측값을 분류하는 데 사용되는 예측된 그룹으로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.

grouphatgroup과 같은 유형의 그룹화 변수입니다. grouphat 인수는 group과 관측값 개수가 같아야 합니다(Grouping Variables의 설명 참조). confusionmat 함수는 문자형 배열과 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다. 또한, confusionmatgrouphat에 있는 NaN 값, 빈 값, 'undefined' 값을 결측값으로 처리하고 고유한 그룹 또는 범주로 간주하지 않습니다.

예: [1 0 0 1 0]

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

그룹 순서로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.

groupordergroupgrouphat에 있는 모든 고유한 요소를 포함하는 그룹화 변수입니다. grouporder를 지정하여 C의 행과 열의 순서를 정의할 수 있습니다. groupordergroup이나 grouphat에 속하지 않는 요소가 포함된 경우 이에 대응하는 C의 요소는 0이 됩니다.

기본적으로, 그룹 순서는 s = [group;grouphat]의 데이터형에 따라 결정됩니다.

  • 숫자형 벡터와 논리형 벡터의 경우, s의 정렬된 순서로 표시됩니다.

  • categorical형 벡터의 경우, categories(s)가 반환한 순서로 표시됩니다.

  • 기타 데이터형의 경우, s에 처음 나타난 순서로 표시됩니다.

예: 'order',{'setosa','versicolor','virginica'}

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

출력 인수

모두 축소

정오분류표로, group 인수와 grouphat 인수에 포함된 고유한 요소의 총 개수와 크기가 같은 정사각 행렬로 반환됩니다. C(i,j)는 그룹 i에 속하는 것으로 알려졌지만 그룹 j에 속하는 것으로 예측된 관측값의 개수입니다.

C의 행과 열은 동일한 그룹 인덱스와 순서가 같습니다. 기본적으로, 그룹 순서는 s = [group;grouphat]의 데이터형에 따라 결정됩니다.

  • 숫자형 벡터와 논리형 벡터의 경우, s의 정렬된 순서로 표시됩니다.

  • categorical형 벡터의 경우, categories(s)가 반환한 순서로 표시됩니다.

  • 기타 데이터형의 경우, s에 처음 나타난 순서로 표시됩니다.

순서를 변경하려면 grouporder를 지정하십시오.

confusionmat 함수는 그룹화 변수에 있는 NaN 값, 빈 값, 'undefined' 값을 결측값으로 처리하고 C의 행과 열에 포함시키지 않습니다.

C에 포함된 행과 열의 순서로, 숫자형 벡터, 논리형 벡터, categorical형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 반환됩니다. groupgrouphat이 문자형 배열, string형 배열, 또는 문자형 벡터로 구성된 셀형 배열인 경우 변수 order는 문자형 벡터로 구성된 셀형 배열입니다. 그렇지 않은 경우 ordergroupgrouphat과 동일한 유형입니다.

대체 기능

  • confusionchart를 사용하여 정오분류표를 계산하고 플로팅할 수 있습니다. 또한, confusionchart는 데이터에 대한 요약 통계량을 표시하고 클래스별 정밀도(양성예측도), 클래스별 재현율(참양성률) 또는 올바르게 분류된 관측값의 총 개수에 따라 정오분류표의 클래스를 분류합니다.

확장 기능

참고 항목

| |

도움말 항목

R2008b에 개발됨