exponenta event banner

confusionmat

Вычислить матрицу путаницы для задачи классификации

Описание

пример

C = confusionmat(group,grouphat) возвращает матрицу путаницы C определяется известными и прогнозируемыми группами в group и grouphatсоответственно.

пример

C = confusionmat(group,grouphat,'Order',grouporder) использование grouporder для упорядочения строк и столбцов C.

пример

[C,order] = confusionmat(___) также возвращает порядок строк и столбцов C в переменной order с использованием любого из входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Отображение матрицы путаницы для данных с двумя ошибочными классификациями и одной отсутствующей классификацией.

Создайте векторы для известных и прогнозируемых групп.

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 обрабатывает NaN значение в переменной группировки g2 как отсутствующее значение и не включает его в строки и столбцы C.

Постройте график матрицы путаницы в виде таблицы матрицы путаницы с помощью confusionchart.

confusionchart(C)

Figure contains an object of type ConfusionMatrixChart.

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

cm = confusionchart(g1,g2)

Figure contains an object of type ConfusionMatrixChart.

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

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

Создайте векторы для известных и прогнозируемых групп.

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 обрабатывает NaN значение в переменной группировки g2 как отсутствующее значение и не включает его в строки и столбцы 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
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Матрица путаницы показывает, что измерения, принадлежащие setosa и virginica, классифицированы правильно, в то время как два измерения, принадлежащие versicolor, неправильно классифицированы как virginica. Продукция order содержит порядок строк и столбцов матрицы путаницы в последовательности, заданной порядком группы {'setosa','versicolor','virginica'}.

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

При выполнении вычислений в массивах TALL MATLAB ® использует либо параллельный пул (по умолчанию при наличии Toolbox™ Parallel Computing), либо локальный сеанс MATLAB. Если требуется выполнить пример с использованием локального сеанса 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

Установка начальных значений генераторов случайных чисел с помощью rng и tallrng для воспроизводимости и случайного выбора обучающих образцов. Результаты могут варьироваться в зависимости от количества работников и среды выполнения для массивов 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 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

Входные аргументы

свернуть все

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

group является переменной группирования того же типа, что и grouphat. group аргумент должен иметь то же количество замечаний, что и grouphat, как описано в разделе Группирование переменных. confusionmat функция обрабатывает массивы символов и строковые массивы как массивы ячеек векторов символов. Дополнительно, confusionmat удовольствия NaN, пусто, и 'undefined' значения в group как отсутствующие значения и не считает их как отдельные группы или категории.

Пример: {'Male','Female','Female','Male','Female'}

Типы данных: single | double | logical | char | string | cell | categorical

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

grouphat является переменной группирования того же типа, что и group. grouphat аргумент должен иметь то же количество замечаний, что и group, как описано в разделе Группирование переменных. confusionmat функция обрабатывает массивы символов и строковые массивы как массивы ячеек векторов символов. Дополнительно, confusionmat удовольствия NaN, пусто, и 'undefined' значения в grouphat как отсутствующие значения и не считает их как отдельные группы или категории.

Пример: [1 0 0 1 0]

Типы данных: single | double | logical | char | string | cell | categorical

Порядок групп, заданный как числовой вектор, логический вектор, символьный массив, строковый массив, массив ячеек символьных векторов или категориальный вектор.

grouporder является переменной группирования, содержащей все отдельные элементы в group и grouphat. Определить grouporder для определения порядка строк и столбцов C. Если grouporder содержит элементы, отсутствующие в group или grouphat, соответствующие записи в C являются 0.

По умолчанию порядок групп зависит от типа данных s = [group;grouphat]:

  • Для числовых и логических векторов порядком является отсортированный порядок s.

  • Для категориальных векторов порядком является порядок, возвращаемый 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.

  • Для категориальных векторов порядком является порядок, возвращаемый categories(s).

  • Для других типов данных порядок - это порядок первого появления в s.

Чтобы изменить порядок, укажите grouporder,

confusionmat функция обрабатывает NaN, пусто, и 'undefined' значения в переменных группировки как отсутствующие значения и не включают их в строки и столбцы C.

Порядок строк и столбцов в C, возвращаемый как числовой вектор, логический вектор, категориальный вектор или клеточный массив символьных векторов. Если group и grouphat символьные массивы, строковые массивы или массивы ячеек символьных векторов, затем переменная order является массивом ячеек символьных векторов. В противном случае order имеет тот же тип, что и group и grouphat.

Альтернативная функциональность

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

Расширенные возможности

Представлен в R2008b