classperf

Оцените эффективность классификатора

Описание

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