Main Content

plotconfusion

분류 혼동행렬 플로팅

설명

예제

plotconfusion(targets,outputs)는 실제 레이블 targets와 예측 레이블 outputs의 혼동행렬을 플로팅합니다. 레이블을 categorical형 벡터로 지정하거나 1-of-N(one-hot) 형식으로 지정합니다.

plotconfusion은 categorical형 레이블에는 권장되지 않습니다. confusionchart를 대신 사용하십시오.

혼동행렬 플롯에서 행은 예측 클래스(출력 클래스)에 해당하고 열은 실제 클래스(목표 클래스)에 해당합니다. 주대각선 상에 있는 셀은 올바르게 분류된 관측값에 해당합니다. 주대각선 바깥의 셀은 오분류된 관측값에 해당합니다. 각 셀에는 관측값의 개수와 관측값의 총 개수의 비율이 모두 표시됩니다.

플롯의 오른쪽 끝에 있는 열에는 각각의 클래스에 속한다고 예측된 표본 중 바르게 분류된 예와 오분류된 예의 백분율이 표시됩니다. 이러한 메트릭들을 각각 정밀도(양성예측도)와 오발견율이라고 부릅니다. 플롯 하단에 있는 행에는 올바르게 분류된 클래스와 잘못 분류된 클래스에 속하는 모든 표본의 백분율이 표시됩니다. 이러한 메트릭들은 각각 재현율(참양성률) 그리고 거짓음성률이라고 부릅니다. 플롯 오른쪽 하단에 있는 셀에는 전반적인 정확도가 표시됩니다.

plotconfusion(targets,outputs,name)은 혼동행렬을 플로팅하고 플롯 제목 시작 부분에 name을 추가합니다.

plotconfusion(targets1,outputs1,name1,targets2,outputs2,name2,...,targetsn,outputsn,namen)은 Figure 1개에 여러 개의 혼동행렬을 플로팅하고 각 플롯의 제목 시작 부분에 name 인수를 추가합니다.

예제

모두 축소

손으로 쓴 숫자를 나타내는 합성 영상으로 구성된 데이터를 불러옵니다. XTrain은 영상으로 구성된 28×28×1×5,000 배열이고, YTrain은 영상 레이블을 포함하는 categorical형 벡터입니다.

load DigitsDataTrain
classNames = categories(labelsTrain);

컨벌루션 신경망의 아키텍처를 정의합니다.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer    
    convolution2dLayer(3,16,'Padding','same','Stride',2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,'Padding','same','Stride',2)
    batchNormalizationLayer
    reluLayer
    
    fullyConnectedLayer(10)
    softmaxLayer];

훈련 옵션을 지정하고 신경망을 훈련시킵니다.

options = trainingOptions('sgdm', ...
    'MaxEpochs',5, ...
    'Verbose',false, ...
    'Plots','training-progress', ...
    'Metrics','accuracy');
net = trainnet(XTrain,labelsTrain,layers,"crossentropy",options);

테스트 데이터를 불러오고 훈련된 신경망을 사용하여 분류합니다.

load digitsDataTest
scores = minibatchpredict(net,XTest)
scores = 5000×10 single matrix

    0.9979    0.0005    0.0005    0.0001    0.0001    0.0000    0.0004    0.0000    0.0002    0.0002
    0.9297    0.0000    0.0320    0.0003    0.0000    0.0001    0.0017    0.0005    0.0004    0.0353
    0.9996    0.0000    0.0001    0.0000    0.0000    0.0000    0.0001    0.0000    0.0000    0.0002
    0.9195    0.0000    0.0004    0.0001    0.0002    0.0000    0.0147    0.0000    0.0016    0.0635
    0.9429    0.0006    0.0032    0.0003    0.0000    0.0021    0.0040    0.0021    0.0447    0.0002
    0.9906    0.0003    0.0001    0.0000    0.0000    0.0000    0.0003    0.0000    0.0002    0.0085
    0.9938    0.0000    0.0004    0.0000    0.0000    0.0000    0.0011    0.0000    0.0041    0.0006
    0.9998    0.0000    0.0000    0.0000    0.0000    0.0000    0.0001    0.0000    0.0000    0.0000
    0.6722    0.0001    0.0028    0.0002    0.0013    0.0022    0.0007    0.0001    0.0035    0.3168
    0.8069    0.0020    0.1340    0.0041    0.0009    0.0015    0.0173    0.0010    0.0034    0.0288
      ⋮

YTest = scores2label(scores,classNames);

실제 테스트 레이블 YTest와 예측 레이블 YPredicted의 혼동행렬을 플로팅합니다.

plotconfusion(YTest,YTest)

행은 예측 클래스(출력 클래스)에 해당하고, 열은 실제 클래스(목표 클래스)에 해당합니다. 주대각선 상에 있는 셀은 올바르게 분류된 관측값에 해당합니다. 주대각선 바깥의 셀은 오분류된 관측값에 해당합니다. 각 셀에는 관측값의 개수와 관측값의 총 개수의 비율이 모두 표시됩니다.

플롯의 오른쪽 끝에 있는 열에는 각각의 클래스에 속한다고 예측된 표본 중 바르게 분류된 예와 오분류된 예의 백분율이 표시됩니다. 이러한 메트릭들을 각각 정밀도(양성예측도)와 오발견율이라고 부릅니다. 플롯 하단에 있는 행에는 올바르게 분류된 클래스와 잘못 분류된 클래스에 속하는 모든 표본의 백분율이 표시됩니다. 이러한 메트릭들은 각각 재현율(참양성률) 그리고 거짓음성률이라고 부릅니다. 플롯 오른쪽 하단에 있는 셀에는 전반적인 정확도가 표시됩니다.

모든 Figure를 닫습니다.

close(findall(groot,'Type','figure'))

cancer_dataset 함수를 사용하여 표본 데이터를 불러옵니다. XTrain은 669건의 조직 검사의 9가지 특성을 정의하는 9×699 행렬입니다. YTrain은 각 열이 이에 대응하는 관측값의 올바른 범주를 나타내는 2×699 행렬입니다. YTrain의 각 열에는 첫 번째 행이나 두 번째 행에 값이 1인 요소가 하나 있습니다. 첫 번째 행은 양성 종양에, 두 번째 행은 악성 종양에 해당합니다. 이 데이터셋에 대한 자세한 내용을 보려면 명령줄에 help cancer_dataset을 입력하십시오.

rng default
[XTrain,YTrain] = cancer_dataset;
YTrain(:,1:10)
ans = 2×10

     1     1     1     0     1     1     0     0     0     1
     0     0     0     1     0     0     1     1     1     0

패턴 인식 신경망을 만들고 표본 데이터를 사용하여 훈련시킵니다.

net = patternnet(10);
net = train(net,XTrain,YTrain);

훈련된 신경망을 사용하여 종양 상태를 추정합니다. 행렬 YPredicted의 각 열에는 각 관측값이 각각 첫 번째 클래스와 두 번째 클래스에 속하는지 나타내는 예측 확률이 들어 있습니다.

YPredicted = net(XTrain);
YPredicted(:,1:10)
ans = 2×10

    0.9980    0.9979    0.9894    0.0578    0.9614    0.9960    0.0026    0.0023    0.0084    0.9944
    0.0020    0.0021    0.0106    0.9422    0.0386    0.0040    0.9974    0.9977    0.9916    0.0056

혼동행렬을 플로팅합니다. plotconfusion은 가장 높은 클래스 확률에 따라 각 관측값에 레이블을 지정하여 플롯을 만듭니다.

plotconfusion(YTrain,YPredicted)

이 Figure에서 처음 2개의 대각선 셀에는 훈련된 신경망이 올바르게 분류한 개수와 비율이 표시되어 있습니다. 예를 들어, 446건의 조직 검사가 양성으로 올바르게 분류되었습니다. 이는 총 699건의 조직 검사 중 63.8%에 해당합니다. 마찬가지로, 조직 검사 236건이 악성으로 올바르게 분류되었습니다. 이것은 전체 조직 검사의 33.8%에 해당합니다.

악성으로 분류된 조직 검사 결과 중 5건이 양성으로 잘못 분류되었으며, 이는 데이터에 있는 총 699건의 조직 검사 중 0.7%에 해당합니다. 마찬가지로, 양성으로 분류된 조직 검사 결과 중 12건이 악성으로 잘못 분류되었는데, 이는 모든 데이터의 1.7%에 해당합니다.

451건의 양성 예측 중에서 98.9%가 올바르게 분류되었고 1.1%가 잘못 분류되었습니다. 248건의 악성 예측 중에서 95.2%가 올바르게 분류되었고 4.8%가 잘못 분류되었습니다. 458건의 양성 결과 중에서 97.4%가 양성으로 올바르게 예측되었고 2.6%가 악성으로 예측되었습니다. 241건의 악성 결과 중에서 97.9%가 악성으로 올바르게 분류되었고 2.1%가 양성으로 분류되었습니다.

전체적으로 예측의 97.6%가 올바르고 2.4%가 잘못되었습니다.

입력 인수

모두 축소

실제 클래스 레이블로, 다음 중 하나로 지정됩니다.

  • 각 요소가 한 관측값의 클래스 레이블인 categorical형 벡터. outputstargets 인수는 요소 개수가 같아야 합니다. categorical형 벡터가 기본 클래스를 정의하는 경우, plotconfusion 함수는 일부 기본 클래스의 관측값이 없어도 모든 기본 클래스를 표시합니다. 두 인수가 순서형 categorical형 벡터인 경우, 두 인수 모두 동일한 기본 범주를 동일한 순서로 정의해야 합니다.

  • N은 클래스의 개수이고 M은 관측값의 개수를 나타내는 N×M 행렬. 행렬의 각 열은 실제 레이블을 나타내는 값이 1인 요소가 하나이고 다른 모든 요소가 0인 1-of-N(one-hot) 형식이 되어야 합니다.

예측 클래스 레이블로, 다음 중 하나로 지정됩니다.

  • 각 요소가 한 관측값의 클래스 레이블인 categorical형 벡터. outputstargets 인수는 요소 개수가 같아야 합니다. categorical형 벡터가 기본 클래스를 정의하는 경우, plotconfusion 함수는 일부 기본 클래스의 관측값이 없어도 모든 기본 클래스를 표시합니다. 두 인수가 순서형 categorical형 벡터인 경우, 두 인수 모두 동일한 기본 범주를 동일한 순서로 정의해야 합니다.

  • N은 클래스의 개수이고 M은 관측값의 개수를 나타내는 N×M 행렬. 행렬의 각 열은 예측 레이블을 나타내는 값이 1인 요소가 하나인 1-of-N(one-hot) 형식이나 총합이 1인 확률 값의 형식이 될 수 있습니다.

혼동행렬 이름으로, 문자형 배열로 지정됩니다. plotconfusion 함수는 플롯 제목의 시작 부분에 지정된 name을 추가합니다.

데이터형: char

버전 내역

R2008a에 개발됨