confusionmat
분류 문제에 대한 혼동행렬 계산
구문
설명
예제
두 개의 오분류와 한 개의 누락된 분류가 있는 데이터에 대한 혼동행렬을 표시합니다.
알려진 그룹과 예측된 그룹에 대한 벡터를 생성합니다.
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: [4×4 double] ClassLabels: [4×1 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
의 행과 열에 포함시키지 않습니다.
한 그룹에서 다른 그룹으로 관측값을 분류하는 것과 관련된 오분류 개수를 찾습니다. 그룹 순서를 사용하여 혼동행렬의 요소를 참조합니다.
10대 자동차의 실제 원산지와 예측된 원산지에 대한 벡터를 만듭니다.
trueOrigin = ["USA","USA","USA","USA","Germany", ... "Japan","USA","USA","USA","USA"]; predictedOrigin = ["USA","USA","Germany","Germany","Germany", ... "Japan","USA","USA","USA","USA"];
혼동행렬과 자동차 원산지의 순서를 반환합니다. 그런 다음, 혼동행렬을 올바른 행 이름과 열 이름을 가진 테이블로 변환합니다. 행 이름은 실제 원산지 그룹에 대응되고 열 이름은 예측된 원산지 그룹에 대응됩니다.
[C,order] = confusionmat(trueOrigin,predictedOrigin)
C = 3×3
6 2 0
0 1 0
0 0 1
order = 3×1 string
"USA"
"Germany"
"Japan"
T = array2table(C,RowNames=order,VariableNames=order)
T=3×3 table
USA Germany Japan
___ _______ _____
USA 6 2 0
Germany 0 1 0
Japan 0 0 1
혼동행렬 C
에서 독일산으로 오분류된 미국산 자동차 개수를 구합니다.
idxUSA = strcmp(order,"USA"); idxGermany = strcmp(order,"Germany"); numC = C(idxUSA,idxGermany)
numC = 2
USA
자동차 중 2대가 Germany
자동차로 잘못 분류되어 있습니다.
또는 테이블 T
에서 numC
와 동일한 값을 구합니다.
numT = T{"USA","Germany"}
numT = 2
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 = 3×1 cell
{'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
메모리 내 배열 meas
및 species
를 tall형 배열로 변환합니다.
tx = tall(meas);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
ty = tall(species);
tall형 배열에 포함된 관측값 개수를 구합니다.
numObs = gather(length(ty)); % gather collects tall array into memory
재현이 가능하도록 rng
및 tallrng
를 사용하여 난수 생성기의 시드값을 설정하고, 훈련 표본을 무작위로 선택합니다. 결과는 워커의 개수 및 tall형 배열의 실행 환경에 따라 다를 수 있습니다. 자세한 내용은 Control Where Your Code Runs 항목을 참조하십시오.
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.9 sec - Pass 2 of 2: Completed in 1.5 sec Evaluation completed in 7.3 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 0.88 sec - Pass 2 of 4: Completed in 1.6 sec - Pass 3 of 4: Completed in 4 sec - Pass 4 of 4: Completed in 2.7 sec Evaluation completed in 11 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 0.54 sec - Pass 2 of 4: Completed in 1.2 sec - Pass 3 of 4: Completed in 3 sec - Pass 4 of 4: Completed in 2 sec Evaluation completed in 7.6 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 0.51 sec - Pass 2 of 4: Completed in 1.3 sec - Pass 3 of 4: Completed in 3.1 sec - Pass 4 of 4: Completed in 2.5 sec Evaluation completed in 8.5 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 4: Completed in 0.42 sec - Pass 2 of 4: Completed in 1.2 sec - Pass 3 of 4: Completed in 3 sec - Pass 4 of 4: Completed in 2.1 sec Evaluation completed in 7.6 sec
훈련된 모델을 사용하여 검정 표본에 대한 레이블을 예측합니다.
txTest = tx(~trIdx,:); label = predict(mdl,txTest);
결과로 생성된 분류에 대한 혼동행렬을 계산합니다.
tyTest = ty(~trIdx); [C,order] = confusionmat(tyTest,label)
C = M×N×... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : Preview deferred. Learn more. order = M×N×... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : Preview deferred. Learn more.
gather
함수를 사용하여 보류했던 계산을 수행하고 confusionmat
의 결과를 메모리에 반환합니다.
gather(C)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1.9 sec Evaluation completed in 2.3 sec
ans = 3×3
20 0 0
1 30 2
0 0 22
gather(order)
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.032 sec
ans = 3×1 cell
{'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 0.34 sec Evaluation completed in 0.6 sec Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 0.48 sec Evaluation completed in 0.67 sec
cm = ConfusionMatrixChart with properties: NormalizedValues: [3×3 double] ClassLabels: {3×1 cell} Show all properties
confusionmat
함수를 사용하여 tall형 테이블의 열에 나열된 공항 사이를 오가는 운항편수를 보여주는 행렬을 생성합니다.
tall형 배열에 대한 계산을 수행할 때 MATLAB®은 병렬 풀(Parallel Computing Toolbox™를 사용할 경우 디폴트 값) 또는 로컬 MATLAB 세션을 사용합니다. Parallel Computing Toolbox가 있는 상태에서 로컬 MATLAB 세션을 사용하여 예제를 실행하려면 mapreducer
함수를 사용하여 전역 실행 환경을 변경하십시오.
mapreducer(0)
airlinesmall.csv
데이터 세트에 대한 데이터저장소를 생성합니다. 'NA'
값을 누락된 데이터로 처리하여, NaN
값으로 대체되도록 합니다. 데이터저장소에 포함할 변수 Origin
과 Dest
를 선택합니다.
varnames = {'Origin','Dest'}; ds = datastore('airlinesmall.csv','TreatAsMissing','NA', ... 'SelectedVariableNames',varnames);
데이터저장소에 있는 데이터에 대한 tall형 배열을 생성합니다. ds
에 있는 데이터는 테이블 형식이므로 결과는 tall형 테이블입니다. 데이터가 테이블 형식이 아니면 tall
은 대신 tall형 셀형 배열을 생성합니다.
T = tall(ds)
T = M×2 tall table Origin Dest _______ _______ {'LAX'} {'SJC'} {'SJC'} {'BUR'} {'SAN'} {'SMF'} {'BUR'} {'SJC'} {'SMF'} {'LAX'} {'LAX'} {'SJC'} {'SAN'} {'SFO'} {'SEA'} {'LAX'} : : : :
표시된 tall형 테이블은 데이터의 행 개수를 알 수 없다는 것을 나타냅니다.
열 T.Origin
과 T.Dest
사이의 운항편수를 보여주는 행렬을 생성합니다. 이 행렬의 두 열에는 알려진 값과 분류로 예측된 값이 들어 있지 않으므로 혼동행렬이 아닙니다. 그러나 confusionmat
함수를 사용하여 도수 행렬을 생성할 수 있습니다.
[ta,tb] = confusionmat(T.Origin,T.Dest)
ta = M×N×... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : Preview deferred. Learn more. tb = M×N×... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : Preview deferred. Learn more.
gather
함수를 사용하여 보류했던 계산을 수행하고 confusionmat
의 결과를 메모리에 반환합니다.
[freqMatrix,airportOrder] = gather(ta,tb);
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.2 sec Evaluation completed in 1.6 sec
행렬 freqMatrix
의 처음 5개 행을 표시하고, 해당하는 행과 열의 순서 airportOrder
를 표시합니다.
freqMatrix(1:5,:)
ans = 5×323
0 153 169 0 91 161 322 0 44 6 56 24 0 0 23 180 122 20 150 20 63 77 134 37 10 0 3 51 0 1 311 0 15 0 32 81 30 53 0 9 2 15 12 293 20 38 1 73 0 41
168 0 75 59 5 76 0 6 14 79 0 1 0 0 0 54 60 0 5 0 1 5 51 0 0 0 0 1 0 0 55 0 0 0 8 67 50 0 0 0 0 18 1 59 1 0 0 11 0 4
187 87 0 0 78 39 120 0 14 1 18 19 0 0 0 98 95 2 19 3 14 14 72 0 0 0 0 0 0 0 108 0 1 0 1 31 4 14 0 1 0 3 9 172 5 13 0 21 0 10
0 58 0 0 61 25 83 3 2 1 0 0 0 0 0 0 23 0 5 0 0 0 21 0 0 0 0 0 0 0 87 0 0 0 0 13 0 0 0 0 0 0 0 67 0 0 0 1 0 0
114 1 88 73 0 70 20 5 4 47 1 3 0 0 0 40 39 0 1 0 0 3 57 0 0 0 0 0 0 0 50 0 1 0 1 28 1 0 0 0 0 0 2 58 5 0 0 21 0 0
airportOrder(1:5)
ans = 5×1 cell
{'LAX'}
{'SJC'}
{'SAN'}
{'BUR'}
{'SMF'}
행렬 freqMatrix
는 출발지 공항(행)에서 목적지 공항(열)까지의 운항편수를 표시합니다. 예를 들어, 총 168
편이 SJC
에서 출발하여 LAX
에 도착합니다(freqMatrix(2,1)
에 표시됨). 마찬가지로, 88
편이 SMF
에서 출발하여 SAN
에 도착합니다(freqMatrix(5,3)
에 표시됨). 앞서 언급했듯이, freqMatrix
는 혼동행렬이 아니며, 공항 간 운항편수를 표시합니다. 예상할 수 있듯이 출발지 공항과 목적지 공항은 항상 다르므로 대각선 요소는 모두 0입니다.
입력 인수
관측값을 분류하는 데 사용되는 알려진 그룹으로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.
group
은 grouphat
과 같은 유형의 그룹화 변수입니다. group
인수는 grouphat
과 관측값 개수가 같아야 합니다(그룹화 변수 참조). confusionmat
함수는 문자형 배열과 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다. 또한 confusionmat
는 group
에 있는 NaN
값, 빈 값, 'undefined'
값을 누락값으로 처리하여 이러한 값을 고유한 그룹이나 범주로 간주하지 않습니다.
예: {'Male','Female','Female','Male','Female'}
데이터형: single
| double
| logical
| char
| string
| cell
| categorical
관측값을 분류하는 데 사용되는 예측된 그룹으로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.
grouphat
은 group
과 같은 유형의 그룹화 변수입니다. grouphat
인수는 group
과 관측값 개수가 같아야 합니다(그룹화 변수 참조). confusionmat
함수는 문자형 배열과 string형 배열을 문자형 벡터로 구성된 셀형 배열로 처리합니다. 또한 confusionmat
는 grouphat
에 있는 NaN
값, 빈 값, 'undefined'
값을 누락값으로 처리하여 이러한 값을 고유한 그룹이나 범주로 간주하지 않습니다.
예: [1 0 0 1 0]
데이터형: single
| double
| logical
| char
| string
| cell
| categorical
그룹 순서로, 숫자형 벡터, 논리형 벡터, 문자형 배열, string형 배열, 문자형 벡터로 구성된 셀형 배열 또는 categorical형 벡터로 지정됩니다.
grouporder
는 group
과 grouphat
에 있는 모든 고유한 요소를 포함하는 그룹화 변수입니다. grouporder
를 지정하여 C
의 행과 열의 순서를 정의할 수 있습니다. grouporder
에 group
또는 grouphat
에 속하지 않는 요소가 포함된 경우 이에 대응하는 C
의 요소는 0
이 됩니다.
기본적으로 그룹 순서는 s = [group;grouphat]
의 데이터형에 따라 달라집니다.
숫자형 벡터의 경우
s
의 고유한 값의 정렬된 순서로 표시됩니다.논리형 벡터의 경우
false
(0
)가 먼저 오고, 그다음에true
(1
)가 표시됩니다.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
의 고유한 값의 정렬된 순서로 표시됩니다.논리형 벡터의 경우
false
(0
)가 먼저 오고, 그다음에true
(1
)가 표시됩니다.categorical형 벡터의 경우
에서 반환하는 순서로 표시됩니다.categories
(s)기타 데이터형의 경우
s
에 처음 나타난 순서로 표시됩니다.
순서를 변경하려면 grouporder
를 지정하십시오.
confusionmat
함수는 그룹화 변수에 있는 NaN
값, 빈 값, 'undefined'
값을 누락값으로 처리하며, 이러한 값을 C
의 행과 열에 포함하지 않습니다.
C
에 포함된 행과 열의 순서로, 숫자형 벡터, 논리형 벡터, categorical형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 반환됩니다. group
과 grouphat
이 문자형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열인 경우 변수 order
는 문자형 벡터로 구성된 셀형 배열입니다. 그 외의 경우 order
는 group
및 grouphat
과 동일한 유형입니다.
대체 기능
confusionchart
를 사용하여 혼동행렬을 계산하고 플로팅할 수 있습니다. 또한,confusionchart
는 데이터에 대한 요약 통계량을 표시하고 클래스별 정밀도(양성예측도), 클래스별 재현율(참양성률) 또는 올바르게 분류된 관측값의 총 개수에 따라 혼동행렬의 클래스를 분류합니다.
버전 내역
R2008b에 개발됨하나의 logical
형 관측값만 사용하여 혼동행렬을 만들 경우 confusionmat
함수는 스칼라 값 대신 행렬을 반환합니다. 행과 열의 디폴트 순서는 false
(0
) 다음에 true
(1
)가 오는 순서입니다.
confusionmat(true,true)
ans = 0 0 0 1
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)