exponenta event banner

classperf

Оценка производительности классификатора

Описание

classperf без входных аргументов отображает свойства classperformance объект. Дополнительные сведения см. в разделе Свойства производительности классов.

пример

cp = classperf(groundTruth) создает пустой classperformance объект cp использование истинных меток groundTruth для каждого наблюдения в наборе данных.

cp = classperf(groundTruth,classifierOutput) создает classperformance объект cp использование истинных меток groundTruth, а затем обновляет свойства объекта на основе результатов классификатора classifierOutput. Этот синтаксис используется для получения сведений о производительности классификатора в одном прогоне проверки.

пример

classperf(cp,classifierOutput) обновляет classperformance объект cp с результатами классификатора classifierOutput. Используйте этот синтаксис для итеративного обновления производительности классификатора, например, внутри for цикл для нескольких запусков перекрестной проверки.

пример

classperf(cp,classifierOutput,testIdx) использование testIdx сравнение результатов классификатора с истинными метками и обновление объекта cp. testIdx представляет подмножество истинных меток (истинность основания) в текущей проверке.

classperf(___,Name,Value) указывает дополнительные параметры с одним или несколькими Name,Value аргументы пары. Укажите эти параметры после всех других входных аргументов.

Примеры

свернуть все

Создайте индексы для 10-кратной перекрестной проверки и классифицируйте данные измерений для набора данных радужки Фишера. Набор данных радужки Фишера содержит измерения ширины и длины лепестков и чашелистиков от трёх видов ирисов.

Загрузите набор данных.

load fisheriris

Создайте индексы для 10-кратной перекрестной проверки.

indices = crossvalind('Kfold',species,10);

Инициализируйте объект для измерения производительности классификатора.

cp = classperf(species);

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

for i = 1:10
    test = (indices == i); 
    train = ~test;
    class = classify(meas(test,:),meas(train,:),species(train,:));
    classperf(cp,class,test);
end
cp.ErrorRate
ans = 0.0200

Предположим, что вы хотите использовать данные наблюдения из setosa и virginica только виды и исключить versicolor виды из перекрестной проверки.

labels = {'setosa','virginica'};
indices = crossvalind('Kfold',species,10,'Classes',labels);

indices теперь содержит нули для строк, которые принадлежат versicolor виды.

Выполните классификацию еще раз.

for i = 1:10
    test = (indices == i); 
    train = ~test;
    class = classify(meas(test,:),meas(train,:),species(train,:));
    classperf(cp,class,test);
end
cp.ErrorRate
ans = 0.0160

Загрузите набор данных.

load fisheriris
X = meas;
Y = species;

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

Инициализируйте classperformance с использованием истинных меток.

cp = classperf(Y)
                        Label: ''
                  Description: ''
                  ClassLabels: {3x1 cell}
                  GroundTruth: [150x1 double]
         NumberOfObservations: 150
               ControlClasses: [2x1 double]
                TargetClasses: 1
            ValidationCounter: 0
           SampleDistribution: [150x1 double]
            ErrorDistribution: [150x1 double]
    SampleDistributionByClass: [3x1 double]
     ErrorDistributionByClass: [3x1 double]
               CountingMatrix: [4x3 double]
                  CorrectRate: NaN
                    ErrorRate: NaN
              LastCorrectRate: 0
                LastErrorRate: 0
             InconclusiveRate: NaN
               ClassifiedRate: NaN
                  Sensitivity: NaN
                  Specificity: NaN
      PositivePredictiveValue: NaN
      NegativePredictiveValue: NaN
           PositiveLikelihood: NaN
           NegativeLikelihood: NaN
                   Prevalence: NaN
              DiagnosticTable: [2x2 double]

Выполните классификацию с помощью k-ближайшего классификатора соседей. Перекрестная проверка модели 10 раз с использованием 145 образцов в качестве обучающего набора и 5 образцов в качестве тестового набора. После каждого выполнения перекрестной проверки обновите результаты объекта производительности классификатора.

for i = 1:10
    [train,test] = crossvalind('LeaveMOut',Y,5);
    mdl = fitcknn(X(train,:),Y(train),'NumNeighbors',3);
    predictions = predict(mdl,X(test,:));
    classperf(cp,predictions,test);
end

Сообщите коэффициент ошибок классификации, который представляет собой отношение числа неправильно классифицированных проб, деленное на общее количество классифицированных проб.

cp.ErrorRate
ans = 0.0467

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

свернуть все

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

Классификация является результатом классификатора, определяемого как вектор целых чисел, логический вектор, строковый вектор или клеточный массив символьных векторов. Когда classifierOutput - клеточный массив символьных векторов или строковых векторов, пустой символьный вектор или строка представляет неубедительный результат. Для вектора целых чисел, NaN представляет собой неубедительный результат.

  • Если не указать testIdx, classifierOutput должен быть того же размера и типа данных, что и groundTruth.

  • При указании testIdx как вектор целых чисел, classifierOutput должно иметь то же количество элементов, что и testIdx. Если testIdx - логический вектор, количество элементов в classifierOutput должны равняться sum(testIdx).

Информация о производительности классификатора, указанная как classperformance объект. Дополнительные сведения см. в разделе Свойства производительности классов.

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

  • Если testIdx является логическим вектором, его длина должна равняться общему числу наблюдений (cp.NumberOfObservations).

  • Если testIdx является вектором целых чисел, он не может содержать повторяющиеся целые числа, и каждое целое число должно быть больше 0 но меньше или равно общему числу наблюдений.

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: cp = classperf(groundTruth,classifierOutput,'Positive',[1 2 3]) указывает метки для целевых (больных) классов.

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

  • Если groundTruth - вектор целых чисел, положительная метка и отрицательная метка (заданная 'Negative' аргумент пары имя-значение) должны быть векторами целых чисел.

  • Если groundTruth - строковый вектор или клеточный массив символьных векторов, положительная метка и отрицательная метка могут быть строковыми векторами, клеточными массивами символьных векторов или векторами положительных целых чисел. Записи должны быть подмножеством grp2idx(groundTruth).

По умолчанию положительная метка соответствует первому классу, возвращаемому grp2idx(groundTruth) и отрицательная метка соответствует всем другим классам.

Функция использует положительную метку для установки TargetClasses имущества cp объект.

Положительные и отрицательные метки являются непересекающимися подмножествами unique(groundTruth). Например, предположим, что у вас есть набор данных, который содержит данные от шести пациентов. У пяти пациентов рак яичников, легких, простаты, кожи или мозга, и у одного пациента нет рака. Тогда ClassLabels = {'Ovarian', 'Lung', 'Prostate', 'Skin', 'Brain', 'Healthy'}. Вы можете проверить классификатор на рак легких, только установив положительную метку [2] и отрицательная метка для [1 3 4 5 6]. Кроме того, вы можете проверить на любой тип рака, установив положительную метку [1 2 3 4 5] и отрицательная метка для [6].

В клинических тестах функция подсчитывает неубедительные значения (пустой вектор символов '' или NaN) в качестве ложных негативов для расчета специфичности и в качестве ложных срабатываний для расчета чувствительности. Функциональная доза не считает ни одно проверенное наблюдение с его истинным классом не в пределах объединения положительной метки и отрицательной метки. Однако, если истинный класс проверенного наблюдения находится в пределах союза, но его прогнозируемый класс не покрывается groundTruthфункция считает это наблюдение неубедительным.

Пример: 'Positive',[1 2]

Метки для классов элементов управления, указанные как разделенная запятыми пара, состоящая из 'Negative' и вектор целых чисел, логический вектор, строковый вектор или клеточный массив символьных векторов.

  • Если groundTruth - вектор целых чисел, положительная метка и отрицательная метка (заданная 'Negative' аргумент пары имя-значение) должны быть векторами целых чисел.

  • Если groundTruth - строковый вектор или клеточный массив символьных векторов, положительная метка и отрицательная метка могут быть строковыми векторами, клеточными массивами символьных векторов или векторами положительных целых чисел. Записи должны быть подмножеством grp2idx(groundTruth).

По умолчанию положительная метка соответствует первому классу, возвращаемому grp2idx(groundTruth) и отрицательная метка соответствует всем другим классам.

Функция использует отрицательную метку для установки ControlClasses имущества cp объект. Дополнительные сведения о том, как функция использует положительные и отрицательные метки, см. в разделе «Положительные».

Пример: 'Negative',[3]

Представлен до R2006a