ドキュメンテーション

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

confusionchart

分類問題用の混同行列チャートの作成

説明

cm = confusionchart(trueLabels,predictedLabels) は、真のラベル trueLabels および予測ラベル predictedLabels から混同行列チャートを作成し、ConfusionMatrixChart オブジェクトを返します。混同行列の行は真のクラスに、列は予測クラスに対応します。対角線上のセルは正しく分類された観測値に、対角線外のセルは誤分類された観測値に対応します。作成後に混同行列チャートを変更するには、cm を使用します。プロパティの一覧については、ConfusionMatrixChart のプロパティを参照してください。

cm = confusionchart(m) は、数値混同行列 m から混同行列チャートを作成します。既に数値混同行列がワークスペースにある場合は、この構文を使用します。

cm = confusionchart(m,classLabels) は、x 軸と y 軸に沿って表示するクラス ラベルを指定します。既に数値混同行列とクラス ラベルがワークスペースにある場合は、この構文を使用します。

cm = confusionchart(parent,___) は、parent で指定された Figure、パネル、またはタブに混同チャートを作成します。

cm = confusionchart(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して ConfusionMatrixChart の追加プロパティを指定します。プロパティは、他のすべての入力引数の後で指定します。プロパティの一覧については、ConfusionMatrixChart のプロパティを参照してください。

すべて折りたたむ

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

load fisheriris
X = meas;
Y = species;

X は、150 本のアヤメについて 4 つの花弁の測定値が含まれている数値行列です。Y は、対応するアヤメの種類が含まれている文字ベクトルの cell 配列です。

k 最近傍 (KNN) 分類器に学習をさせます。ここで、予測子の最近傍の個数 (k) は 5 です。数値予測子データを標準化することをお勧めします。

Mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1);

学習データのラベルを予測します。

predictedY = resubPredict(Mdl);

真のラベル Y と予測ラベル predictedY から混同行列チャートを作成します。

cm = confusionchart(Y,predictedY);

混同行列では、観測値の総数が各セルに表示されます。混同行列の行は真のクラスに、列は予測クラスに対応します。対角線上のセルは正しく分類された観測値に、対角線外のセルは誤分類された観測値に対応します。

既定では、confusionchartsort によって定義される自然な順序にクラスを並べ替えます。この例では、クラス ラベルが文字ベクトルなので、confusionchart はクラスをアルファベット順に並べ替えます。指定した順序または混同行列の値でクラスを並べ替えるには、sortClasses を使用します。

NormalizedValues プロパティには、混同行列の値が格納されています。ドット表記を使用して、これらの値を表示します。

cm.NormalizedValues
ans = 3×3

    50     0     0
     0    47     3
     0     4    46

プロパティ値を変更して、混同行列チャートの外観と動作を変更します。タイトルを追加します。

cm.Title = 'Iris Flower Classification Using KNN';

列と行の要約を追加します。

cm.RowSummary = 'row-normalized';
cm.ColumnSummary = 'column-normalized';

行正規化による行要約では、真のクラスのそれぞれについて、正しく分類された観測値と誤分類された観測値の割合が表示されます。列正規化による列要約では、各予測クラスについて、正しく分類された観測値と誤分類された観測値の割合が表示されます。

混同行列チャートを作成し、クラス単位の真陽性率 (再現率) またはクラス単位の陽性の予測値 (精度) に従ってチャートのクラスを並べ替えます。

arrhythmia データセットを読み込み検証します。

load arrhythmia
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

不整脈のさまざまな段階を表す 16 個の異なるラベルがデータに含まれていますが、応答 (Y) には 13 個の異なるラベルのみが含まれています。

分類木に学習をさせ、木の再代入応答を予測します。

Mdl = fitctree(X,Y);
predictedY = resubPredict(Mdl);

真のラベル Y と予測ラベル predictedY から混同行列チャートを作成します。真陽性率と偽陽性率を行要約に表示するため、'RowSummary' として 'row-normalized' を指定します。また、陽性の予測値と偽発見率を列要約に表示するため、'ColumnSummary' として 'column-normalized' を指定します。

fig = figure;
cm = confusionchart(Y,predictedY,'RowSummary','row-normalized','ColumnSummary','column-normalized');

混同チャートのコンテナーのサイズを変更して、パーセントが行要約に表示されるようにします。

fig_Position = fig.Position;
fig_Position(3) = fig_Position(3)*1.5;
fig.Position = fig_Position;

真陽性率に従って混同行列を並べ替えるため、Normalization プロパティを 'row-normalized' に設定することにより各行でセルの値を正規化してから、sortClasses を使用します。並べ替えた後で、観測値の総数を各セルに表示するため、Normalization プロパティを 'absolute' にリセットします。

cm.Normalization = 'row-normalized'; 
sortClasses(cm,'descending-diagonal')
cm.Normalization = 'absolute'; 

陽性の予測値に従って混同行列を並べ替えるため、Normalization プロパティを 'column-normalized' に設定することにより各列でセルの値を正規化してから、sortClasses を使用します。並べ替えた後で、観測値の総数を各セルに表示するため、Normalization プロパティを 'absolute' にリセットします。

cm.Normalization = 'column-normalized';
sortClasses(cm,'descending-diagonal')
cm.Normalization = 'absolute';  

フィッシャーのアヤメのデータセットの tall 配列に対して分類を実行します。関数 confusionchart を使用して、既知の tall ラベルと予測した tall ラベルに対する混同行列チャートを計算します。

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.45 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 1.2 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 1.6 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.66 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.48 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.52 sec

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

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

生成された分類について混同行列チャートを作成します。

tyTest = ty(~trIdx);
cm = confusionchart(tyTest,label)
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.2 sec
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 1.4 sec

cm = 
  ConfusionMatrixChart with properties:

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

  Show all properties

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

入力引数

すべて折りたたむ

分類問題の真のラベル。categorical ベクトル、数値ベクトル、string ベクトル、文字配列、文字ベクトルの cell 配列、または logical ベクトルを指定します。trueLabels がベクトルである場合、各要素は 1 つの観測値に対応します。trueLabels が文字配列である場合、各行が 1 つの観測値のラベルに対応する 2 次元配列でなければなりません。

分類問題の予測ラベル。categorical ベクトル、数値ベクトル、string ベクトル、文字配列、文字ベクトルの cell 配列、または logical ベクトルを指定します。predictedLabels がベクトルである場合、各要素は 1 つの観測値に対応します。predictedLabels が文字配列である場合、各行が 1 つの観測値のラベルに対応する 2 次元配列でなければなりません。

混同行列。行列を指定します。m は正方行列でなければならず、その要素は正の整数でなければなりません。要素 m(i,j) は、i 番目の真のクラスに属する観測値が j 番目のクラスのものであると予測された回数です。混同行列チャートの色付きの各セルは、混同行列 m の 1 つの要素に対応します。

混同行列チャートのクラス ラベル。categorical ベクトル、数値ベクトル、string ベクトル、文字配列、文字ベクトルの cell 配列、または logical ベクトルを指定します。classLabels がベクトルである場合、要素数は混同行列の行数および列数と同じでなければなりません。classLabels が文字配列である場合、各行が 1 つのクラスのラベルに対応する 2 次元配列でなければなりません。

プロットの親コンテナー。FigurePanel、または Tab オブジェクトを指定します。

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: cm = confusionchart(trueLabels,predictedLabels,'Title','My Title Text','ColumnSummary','column-normalized')

メモ

ここでは、プロパティの一部だけを紹介しています。完全な一覧については、ConfusionMatrixChart のプロパティ を参照してください。

混同行列チャートのタイトル。文字ベクトルまたは string スカラーを指定します。

例: cm = confusionchart(__,'Title','My Title Text')

例: cm.Title = 'My Title Text'

混同行列チャートの列の要約。以下のいずれかを指定します。

オプション説明
'off'列の要約を表示しません。
'absolute'各予測クラスについて、正しく分類された観測値と誤分類された観測値の総数を表示します。
'column-normalized'各予測クラスについて、正しく分類された観測値と誤分類された観測値の個数を、対応する予測クラスの観測値数に対する割合で表示します。正しく分類された観測値の割合は、クラス単位の精度 (または陽性の予測値) であると考えることができます。
'total-normalized'各予測クラスについて、正しく分類された観測値と誤分類された観測値の個数を、観測値の総数に対する割合で表示します。

例: cm = confusionchart(__,'ColumnSummary','column-normalized')

例: cm.ColumnSummary = 'column-normalized'

混同行列チャートの行の要約。次のいずれかを指定します。

オプション説明
'off'行の要約を表示しません。
'absolute'真のクラスのそれぞれについて、正しく分類された観測値と誤分類された観測値の総数を表示します。
'row-normalized'真のクラスのそれぞれについて、正しく分類された観測値と誤分類された観測値の個数を、対応する予測クラスの観測値数に対する割合で表示します。正しく分類された観測値の割合は、クラス単位の再現率 (つまり真陽性率) であると考えることができます。
'total-normalized'真のクラスのそれぞれについて、正しく分類された観測値と誤分類された観測値の個数を、観測値の総数に対する割合で表示します。

例: cm = confusionchart(__,'RowSummary','row-normalized')

例: cm.RowSummary = 'row-normalized'

セルの値の正規化。次のいずれかを指定します。

オプション説明
'absolute'観測値の総数を各セルに表示します。
'column-normalized'予測クラスが同じである観測値の個数によって各セルの値を正規化します。
'row-normalized'真のクラスが同じである観測値の個数によって各セルの値を正規化します。
'total-normalized'観測値の総数によって各セルの値を正規化します。

セルの値の正規化を変更すると、セルの色も変更されます。

例: cm = confusionchart(__,'Normalization','total-normalized')

例: cm.Normalization = 'total-normalized'

拡張機能

R2018b で導入