confusionchart

Создайте матричный график беспорядка для проблемы классификации

Синтаксис

cm = confusionchart(trueLabels,predictedLabels)
cm = confusionchart(m)
cm = confusionchart(m,classLabels)
cm = confusionchart(parent,___)
cm = confusionchart(___,Name,Value)

Описание

пример

cm = confusionchart(trueLabels,predictedLabels) создает матричный график беспорядка от истины, маркирует trueLabels, и предсказанный маркирует predictedLabels и возвращает объект ConfusionMatrixChart. Строки матрицы беспорядка соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Диагональные и недиагональные ячейки соответствуют правильно и неправильно классифицированные наблюдения, соответственно. Используйте cm, чтобы изменить матричный график беспорядка после того, как это будет создано. Для списка свойств смотрите ConfusionMatrixChart Properties.

cm = confusionchart(m) создает матричный график беспорядка из числовой матрицы беспорядка m. Используйте этот синтаксис, если у вас уже есть числовая матрица беспорядка в рабочей области.

cm = confusionchart(m,classLabels) задает метки класса, которые появляются вдоль оси X и оси Y. Используйте этот синтаксис, если у вас уже есть числовая матрица беспорядка и метки класса в рабочей области.

cm = confusionchart(parent,___) создает график беспорядка в фигуре, панели или вкладке, заданной parent.

пример

cm = confusionchart(___,Name,Value) задает дополнительные свойства ConfusionMatrixChart с помощью одного или нескольких аргументов пары "имя-значение". Задайте свойства после всех других входных параметров. Для списка свойств смотрите ConfusionMatrixChart Properties.

Примеры

свернуть все

Загрузите ирисовый набор данных Фишера.

load fisheriris
X = meas;
Y = species;

X является числовой матрицей, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Y является массивом ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

Обучите классификатор соседа k-nearest (KNN), где количество самых близких соседей в предикторах (k) равняется 5. Хорошая практика должна стандартизировать числовые данные о предикторе.

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

Предскажите метки данных тренировки.

predictedY = resubPredict(Mdl);

Создайте матричный график беспорядка от истины, маркирует Y, и предсказанный маркирует predictedY.

cm = confusionchart(Y,predictedY);

Матрица беспорядка отображает общее количество наблюдений в каждой ячейке. Строки матрицы беспорядка соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Диагональные и недиагональные ячейки соответствуют правильно и неправильно классифицированные наблюдения, соответственно.

По умолчанию confusionchart сортирует классы в их естественный порядок, как задано sort. В этом примере метки класса являются векторами символов, таким образом, 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';  

Выполните классификацию на длинном массиве ирисового набора данных Фишера. Вычислите матричный график беспорядка для известного, и предсказал высокие метки при помощи функции confusionchart.

Когда вы выполняете вычисления на длинных массивах, среда выполнения по умолчанию использует или локальный сеанс работы с MATLAB или локальный параллельный пул (если у вас есть Parallel Computing Toolbox™). Можно использовать функцию mapreducer, чтобы изменить среду выполнения.

Загрузите ирисовый набор данных Фишера.

load fisheriris

Преобразуйте массивы в оперативной памяти meas и species к длинным массивам.

tx = tall(meas);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
ty = tall(species);

Найдите количество наблюдений в длинном массиве.

numObs = gather(length(ty));   % gather collects tall array into memory
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.45 sec

Установите seed генераторов случайных чисел с помощью rng и tallrng для воспроизводимости, и случайным образом выберите учебные выборки. Результаты могут отличаться в зависимости от количества рабочих и среды выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление Где Ваши Выполнения Кода (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 классе неправильно классифицируются как virginica, и одно измерение в virginica классе неправильно классифицируется как versicolor. Все измерения, принадлежащие setosa, классифицируются правильно.

Входные параметры

свернуть все

Истинные метки проблемы классификации, заданной как категориальный вектор, числовой вектор, представляют в виде строки вектор, символьный массив, массив ячеек из символьных векторов или логический вектор. Если trueLabels является вектором, то каждый элемент соответствует одному наблюдению. Если trueLabels является символьным массивом, то это должно быть двумерно с каждой строкой, соответствующей метке одного наблюдения.

Предсказанные метки проблемы классификации, заданной как категориальный вектор, числовой вектор, представляют в виде строки вектор, символьный массив, массив ячеек из символьных векторов или логический вектор. Если predictedLabels является вектором, то каждый элемент соответствует одному наблюдению. Если predictedLabels является символьным массивом, то это должно быть двумерно с каждой строкой, соответствующей метке одного наблюдения.

Матрица беспорядка, заданная как матрица. m должен быть квадратным, и его элементы должны быть положительными целыми числами. Элемент m(i,j) является числом раз наблюдение за i th истинный класс, был предсказан, чтобы быть j th классом. Каждая цветная ячейка матричного графика беспорядка соответствует одному элементу матрицы беспорядка m.

Метки класса матричного графика беспорядка, заданного как категориальный вектор, числовой вектор, представляют в виде строки вектор, символьный массив, массив ячеек из символьных векторов или логический вектор. Если classLabels является вектором, то он должен иметь то же число элементов, как матрица беспорядка имеет строки и столбцы. Если classLabels является символьным массивом, то это должно быть двумерно с каждой строкой, соответствующей метке одного класса.

Родительский контейнер, в котором можно построить, заданный как Figure, Panel или объект Tab.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: cm = confusionchart(trueLabels,predictedLabels,'Title','My Title Text','ColumnSummary','column-normalized')

Примечание

Перечисленные здесь свойства являются только подмножеством. Для полного списка смотрите ConfusionMatrixChart Properties.

Заголовок матричного графика беспорядка, заданного как вектор символов или скаляр строки.

Пример: 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