confusionmat

Вычислите матрицу беспорядка для проблемы классификации

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

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)

Вы не должны вычислять матрицу беспорядка сначала и затем строить ее. Вместо этого постройте матричный график беспорядка непосредственно от истины и предсказанных меток при помощи 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

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

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

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 содержит порядок строк и столбцов матрицы беспорядка в последовательности, заданной группой order {'setosa','versicolor','virginica'}.

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

Когда вы выполняете вычисления на длинных массивах, MATLAB® использует любого параллельный пул (значение по умолчанию, если у вас есть Parallel Computing Toolbox™), или локальный сеанс работы с 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: 12).
ty = tall(species);

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

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

Установите 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':
- Pass 1 of 2: Completed in 3.1 sec
- Pass 2 of 2: Completed in 2 sec
Evaluation completed in 7.9 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 1.8 sec
- Pass 2 of 4: Completed in 2.4 sec
- Pass 3 of 4: Completed in 5.9 sec
- Pass 4 of 4: Completed in 4.7 sec
Evaluation completed in 18 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 0.71 sec
- Pass 2 of 4: Completed in 1.7 sec
- Pass 3 of 4: Completed in 5 sec
- Pass 4 of 4: Completed in 4.3 sec
Evaluation completed in 14 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 0.72 sec
- Pass 2 of 4: Completed in 2 sec
- Pass 3 of 4: Completed in 5 sec
- Pass 4 of 4: Completed in 4.2 sec
Evaluation completed in 14 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 0.93 sec
- Pass 2 of 4: Completed in 1.5 sec
- Pass 3 of 4: Completed in 4.8 sec
- Pass 4 of 4: Completed in 4.5 sec
Evaluation completed in 14 sec

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

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

Вычислите матрицу беспорядка для получившейся классификации.

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

  MxNx... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :


order =

  MxNx... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Используйте gather функция, чтобы выполнить задержанное вычисление и возвратить результат confusionmat в памяти.

gather(C)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.4 sec
Evaluation completed in 2.5 sec
ans = 3×3

    25     0     0
     1    24     3
     0     0    22

gather(order)
Evaluating tall expression using the Parallel Pool 'local':
Evaluation completed in 0.044 sec
ans = 3x1 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.71 sec
Evaluation completed in 1.7 sec
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 0.9 sec
Evaluation completed in 1.3 sec

cm = 
  ConfusionMatrixChart with properties:

    NormalizedValues: [3x3 double]
         ClassLabels: {3x1 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.

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

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

Пример: 'order',{'setosa','versicolor','virginica'}

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

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

свернуть все

Матрица беспорядка, возвращенная как квадратная матрица с размером, равняется общему количеству отличных элементов в group и grouphat аргументы. C(i,j) количество наблюдений, которые, как известно, были в группе i но предсказанный, чтобы быть в группе j.

Строки и столбцы C имейте идентичное упорядоченное расположение тех же индексов группы. По умолчанию порядок группы зависит от типа данных s = [group;grouphat]:

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

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

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

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

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

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

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

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

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

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