ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

confusionmat

分類問題用の混同行列の計算

説明

C = confusionmat(group,grouphat) は、既知のグループ group と予測されたグループ grouphat によって決定される混同行列 C を返します。

C = confusionmat(group,grouphat,'Order',grouporder) は、grouporder を使用して C の行と列の順序を設定します。

[C,order] = confusionmat(___) は、前の構文の入力引数のいずれかを使用して、変数 orderC の行と列の順序も返します。

すべて折りたたむ

2 つの誤分類と 1 つの欠損分類が含まれているデータについて混同行列を表示します。

既知のグループと予測されたグループについてベクトルを作成します。

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 つのデータ点が正しく分類されたことを示しています。グループ 2 については、1 つのデータ点がグループ 3 として誤分類されています。また、グループ 3 に属することがわかっているデータ点の 1 つがグループ 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

2 つの誤分類と 1 つの欠損分類が含まれているデータについて混同行列を表示し、グループの順序を指定します。

既知のグループと予測されたグループについてベクトルを作成します。

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 の 2 行目は、グループ 3 に属することがわかっているデータ点の 1 つがグループ 4 として誤分類されたことを示しています。C の 3 行目は、グループ 2 に属しているデータ点の 1 つがグループ 3 として誤分類されたことを示し、4 行目は、グループ 1 に属することがわかっている 2 つのデータ点が正しく分類されたことを示しています。confusionmat は、グループ化変数 g2 内の NaN 値を欠損値として処理し、C の行と列には含めません。

fisheriris データセットの標本に対して分類を実行し、生成された結果について混同行列を表示します。

フィッシャーのアヤメのデータセットを読み込みます。

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 に属している測定値の 2 つが virginica として誤分類されたことを示しています。出力 order には、グループ順序 {'setosa','versicolor','virginica'} で指定された順序で混同行列の行と列の順序が格納されます。

fisheriris データセットの tall 配列に対して分類を実行し、関数 confusionmat を使用して既知および予測 tall ラベルについて混同行列を計算し、関数 confusionchart を使用して混同行列をプロットします。

tall 配列の計算を実行する場合、既定の実行環境ではローカルの MATLAB セッションまたは (Parallel Computing Toolbox™ がある場合は) ローカルの並列プールが使用されます。関数 mapreducer を使用して実行環境を変更できます。

フィッシャーのアヤメのデータセットを読み込みます。

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
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.065 sec

再現性を得るために rngtallrng を使用して乱数発生器のシードを設定し、学習標本を無作為に選択します。tall 配列の場合、ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については、コードの実行場所の制御 (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':
Evaluation completed in 0.19 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.51 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.46 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.44 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.43 sec

学習済みのモデルを使用して、検定標本のラベルを予測します。

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

生成された分類について混同行列を計算します。

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

  3×3 tall double matrix

    23     0     0
     0    23     3
     0     1    25


order =

  3×1 tall cell array

    {'setosa'    }
    {'versicolor'}
    {'virginica' }

この混同行列は、versicolor クラスの測定値の 3 つが virginica として誤分類され、virginica クラスの測定値の 1 つが versicolor として誤分類されたことを示しています。setosa に属している測定は、すべて正しく分類されています。

混同行列の計算とプロットを行うため、代わりに confusionchart を使用します。

cm = confusionchart(tyTest,label)
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.11 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.1 sec

cm = 
  ConfusionMatrixChart with properties:

    NormalizedValues: [3×3 double]
         ClassLabels: {3×1 cell}

  Show all properties

入力引数

すべて折りたたむ

観測値を分類するための既知のグループ。数値ベクトル、logical ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルを指定します。

group は、grouphat と同じ型のグループ化変数です。グループ化変数で説明されているように、引数 group には grouphat と同じ個数の観測値が含まれていなければなりません。関数 confusionmat は、文字配列および string 配列を文字ベクトルの cell 配列として処理します。さらに confusionmat は、group 内の NaN、空および 'undefined' 値を欠損値として処理し、個別のグループまたはカテゴリとしてはカウントしません。

例: {'Male','Female','Female','Male','Female'}

データ型: single | double | logical | char | string | cell | カテゴリカル

観測値を分類するための予測されたグループ。数値ベクトル、logical ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルを指定します。

grouphat は、group と同じ型のグループ化変数です。グループ化変数で説明されているように、引数 grouphat には group と同じ個数の観測値が含まれていなければなりません。関数 confusionmat は、文字配列および string 配列を文字ベクトルの cell 配列として処理します。さらに confusionmat は、grouphat 内の NaN、空および 'undefined' 値を欠損値として処理し、個別のグループまたはカテゴリとしてはカウントしません。

例: [1 0 0 1 0]

データ型: single | double | logical | char | string | cell | カテゴリカル

グループの順序。数値ベクトル、logical ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルを指定します。

grouporder は、group および grouphat 内の異なる要素がすべて含まれているグループ化変数です。C の行と列の順序を定義するには、grouporder を指定します。group にも grouphat にもない要素が grouporder に含まれている場合、C の対応するエントリは 0 になります。

既定では、グループの順序は s = [group;grouphat] のデータ型によって変化します。

  • 数値および logical ベクトルの場合、s の並べ替え順序になります。

  • categorical ベクトルの場合、categories(s) によって返される順序になります。

  • 他のデータ型の場合、s に最初に現れた順序になります。

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

データ型: single | double | logical | char | string | cell | カテゴリカル

出力引数

すべて折りたたむ

混同行列。引数 group および grouphat 内の異なる要素の総数に等しいサイズをもつ正方行列として返されます。C(i,j) は、グループ i に属することがわかっているがグループ j に属すると予測された観測値の個数です。

C の行と列は、同じグループ インデックスについて同じ順序になります。既定では、グループの順序は s = [group;grouphat] のデータ型によって変化します。

  • 数値および logical ベクトルの場合、s の並べ替え順序になります。

  • categorical ベクトルの場合、categories(s) によって返される順序になります。

  • 他のデータ型の場合、s に最初に現れた順序になります。

順序を変更するには、grouporder を指定します。

関数 confusionmat は、グループ化変数内の NaN、空および 'undefined' 値を欠損値として処理し、C の行と列には含めません。

C の行と列の順序。数値ベクトル、logical ベクトル、categorical ベクトル、または文字ベクトルの cell 配列として返されます。group および grouphat が文字配列、string 配列、または文字ベクトルの cell 配列である場合、変数 order は文字ベクトルの cell 配列になります。それ以外の場合、ordergroup および grouphat と同じ型になります。

代替機能

  • 混同行列の計算とプロットを行うには、confusionchart を使用します。さらに confusionchart は、データに関する要約統計を表示し、クラス単位の精度 (陽性の予測値)、クラス単位の再現率 (真陽性率)、または正しく分類された観測値の総数に従って混同行列のクラスを並べ替えます。

拡張機能

R2008b で導入