Main Content

confusionchart

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

説明

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

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

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

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

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

cm = confusionchart(___) は、ConfusionMatrixChart オブジェクトを返します。チャートのプロパティを作成した後にこのプロパティを変更するには、cm を使用します。プロパティの一覧については、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);

Figure contains an object of type ConfusionMatrixChart.

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

既定では、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';

Figure contains an object of type ConfusionMatrixChart. The chart of type ConfusionMatrixChart has title Iris Flower Classification Using KNN.

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

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

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;

Figure contains an object of type ConfusionMatrixChart.

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

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

Figure contains an object of type ConfusionMatrixChart.

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

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

Figure contains an object of type ConfusionMatrixChart.

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

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

mapreducer(0)

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

load fisheriris

インメモリ配列 meas および species を tall 配列に変換します。

tx = tall(meas);
ty = tall(species);

tall 配列内の観測値の個数を求めます。

numObs = gather(length(ty));   % gather collects tall array into memory

再現性を得るために rngtallrng を使用して乱数発生器のシードを設定し、学習標本を無作為に選択します。tall 配列の場合、ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については、コードの実行場所の制御を参照してください。

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 Local MATLAB Session:
- Pass 1 of 2: Completed in 1.1 sec
- Pass 2 of 2: Completed in 0.93 sec
Evaluation completed in 3 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.44 sec
- Pass 2 of 4: Completed in 0.56 sec
- Pass 3 of 4: Completed in 0.73 sec
- Pass 4 of 4: Completed in 0.89 sec
Evaluation completed in 3.5 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.24 sec
- Pass 2 of 4: Completed in 0.2 sec
- Pass 3 of 4: Completed in 0.39 sec
- Pass 4 of 4: Completed in 0.42 sec
Evaluation completed in 1.7 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.23 sec
- Pass 2 of 4: Completed in 0.26 sec
- Pass 3 of 4: Completed in 0.43 sec
- Pass 4 of 4: Completed in 0.37 sec
Evaluation completed in 1.8 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.16 sec
- Pass 2 of 4: Completed in 0.26 sec
- Pass 3 of 4: Completed in 0.3 sec
- Pass 4 of 4: Completed in 0.28 sec
Evaluation completed in 1.3 sec

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

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

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

tyTest = ty(~trIdx);
cm = confusionchart(tyTest,label)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.086 sec
Evaluation completed in 0.32 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.38 sec
Evaluation completed in 0.64 sec

Figure contains an object of type ConfusionMatrixChart.

cm = 
  ConfusionMatrixChart with properties:

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

  Use GET to show all properties

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

入力引数

すべて折りたたむ

分類問題の真のラベル。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 次元配列でなければなりません。

親コンテナー。FigurePanelTabTiledChartLayoutGridLayout のいずれかのオブジェクトとして指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 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'

出力引数

すべて折りたたむ

ConfusionMatrixChart オブジェクト。スタンドアロンの可視化です。cm を使用して、混同行列チャートの作成後にそのプロパティを設定します。

制限

  • ConfusionMatrixChart オブジェクトでは MATLAB® コードの生成はサポートされていません。

詳細

すべて折りたたむ

スタンドアロンの可視化

スタンドアロンの可視化は、他のグラフから独立して機能する特別な目的のために設計されたチャートです。plotsurf などの他のチャートとは異なり、スタンドアロンの可視化には事前設定された組み込みの axes オブジェクトがあり、利用できないカスタマイズ項目があります。スタンドアロンの可視化には、次の特性もあります。

  • ライン、パッチ、表面などの他のグラフィックス要素と組み合わせることができません。したがって、hold コマンドはサポートされていません。

  • 関数 gca は、現在の軸座標としてチャート オブジェクトを返すことができます。

  • 入力引数として axes オブジェクトを受け入れる多くの MATLAB 関数に、チャート オブジェクトを渡すことができます。たとえば、関数 title にチャート オブジェクトを渡すことができます。

拡張機能

バージョン履歴

R2018b で導入