kfoldLoss

Потеря классификации для перекрестной подтвержденной модели ECOC ядра

Синтаксис

loss = kfoldLoss(CVMdl)
loss = kfoldLoss(CVMdl,Name,Value)

Описание

пример

loss = kfoldLoss(CVMdl) возвращает потерю классификации, полученную перекрестной подтвержденной моделью ECOC ядра (ClassificationPartitionedKernelECOC) CVMdl. Для каждого сгиба kfoldLoss вычисляет потерю классификации для наблюдений сгиба валидации с помощью модели, обученной на наблюдениях учебного сгиба. kfoldLoss применяет те же данные, используемые, чтобы создать CVMdl (см. fitcecoc).

По умолчанию kfoldLoss возвращает ошибку классификации.

пример

loss = kfoldLoss(CVMdl,Name,Value) возвращает потерю классификации с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, задайте функцию потерь классификации, количество сгибов, декодируя схему или уровень многословия.

Примеры

свернуть все

Загрузите ирисовый набор данных Фишера. X содержит цветочные измерения, и Y содержит имена цветочных разновидностей.

load fisheriris
X = meas;
Y = species;

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

CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedKernelECOC
    CrossValidatedModel: 'KernelECOC'
           ResponseName: 'Y'
        NumObservations: 150
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'setosa'  'versicolor'  'virginica'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является моделью ClassificationPartitionedKernelECOC. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы задать различное количество сгибов, используйте аргумент пары "имя-значение" 'KFold' вместо 'Crossval'.

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

loss = kfoldLoss(CVMdl)
loss = 0.0333

Также можно получить ошибки классификации на сгиб путем определения пары "имя-значение" 'Mode','individual' в kfoldLoss.

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

Загрузите ирисовый набор данных Фишера. X содержит цветочные измерения, и Y содержит имена цветочных разновидностей.

load fisheriris
X = meas;
Y = species;

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

rng(1) % For reproducibility
CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedKernelECOC
    CrossValidatedModel: 'KernelECOC'
           ResponseName: 'Y'
        NumObservations: 150
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'setosa'  'versicolor'  'virginica'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является моделью ClassificationPartitionedKernelECOC. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы задать различное количество сгибов, используйте аргумент пары "имя-значение" 'KFold' вместо 'Crossval'.

Создайте пользовательскую функцию, которая терпит минимальные убытки для каждого наблюдения, затем составляет в среднем минимальные потери для всех наблюдений. S соответствует NegLoss вывод kfoldPredict.

lossfun = @(~,S,~,~)mean(min(-S,[],2));

Вычислите перекрестную подтвержденную пользовательскую потерю.

kfoldLoss(CVMdl,'LossFun',lossfun)
ans = 0.0199

Средняя минимальная бинарная потеря для наблюдений сгиба валидации - приблизительно 0,02.

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

свернуть все

Перекрестная подтвержденная модель ECOC ядра, заданная как модель ClassificationPartitionedKernelECOC. Можно создать модель ClassificationPartitionedKernelECOC по образованию модель ECOC с помощью fitcecoc и задав эти аргументы пары "имя-значение":

  • 'Learners' – Установите значение к 'kernel', объект шаблона, возвращенный templateKernel или массивом ячеек таких объектов шаблона.

  • Один из аргументов 'CrossVal', 'CVPartition', 'Holdout', 'KFold' или 'Leaveout'.

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

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

Пример: kfoldLoss(CVMdl,'Folds',[1 3 5]) задает, чтобы использовать только первые, третьи, и пятые сгибы, чтобы вычислить потерю классификации.

Бинарная функция потерь ученика, заданная как пара, разделенная запятой, состоящая из 'BinaryLoss' и встроенного имени функции потерь или указателя на функцию.

  • Эта таблица содержит имена и описания встроенных функций, где yj является меткой класса для конкретного бинарного ученика (в наборе {-1,1,0}), sj является счетом к наблюдению j, и g (yj, sj) является бинарной формулой потерь.

    ЗначениеОписаниеОбласть счетаg (yj, sj)
    'binodeviance'Биномиальное отклонение(–∞,∞)журнал [1 + exp (–2yjsj)] / [2log (2)]
    'exponential'Экспоненциал(–∞,∞)exp (–yjsj)/2
    'hamming'Хэмминг[0,1] или (– ∞, ∞)[1 – знак (yjsj)]/2
    'hinge'Стержень(–∞,∞)макс. (0,1 – yjsj)/2
    'linear'Линейный(–∞,∞)(1 – yjsj)/2
    'logit'Логистический(–∞,∞)журнал [1 + exp (–yjsj)] / [2log (2)]
    'quadratic'Квадратичный[0,1][1 – yj (2sj – 1)] 2/2

    Программное обеспечение нормирует бинарные потери, таким образом, что потеря 0.5 когда yj = 0. Кроме того, программное обеспечение вычисляет среднюю бинарную потерю для каждого класса.

  • Для пользовательской бинарной функции потерь, например, customFunction, задают его указатель на функцию 'BinaryLoss',@customFunction.

    customFunction имеет эту форму:

    bLoss = customFunction(M,s)
    где:

    • M является K-by-L кодирующий матрицу, сохраненную в Mdl.CodingMatrix.

    • s является 1 L вектором - строкой из очков классификации.

    • bLoss является потерей классификации. Этот скаляр агрегировал бинарные потери для каждого ученика в конкретном классе. Например, можно использовать среднюю бинарную потерю, чтобы агрегировать потерю по ученикам для каждого класса.

    • K является количеством классов.

    • L является количеством бинарных учеников.

По умолчанию, если все бинарные ученики являются моделями классификации ядер с помощью SVM, то BinaryLoss является 'hinge'. Если все бинарные ученики являются моделями классификации ядер с помощью логистической регрессии, то BinaryLoss является 'quadratic'.

Пример: 'BinaryLoss','binodeviance'

Типы данных: char | string | function_handle

Схема Decoding, которая агрегировала бинарные потери, заданные как пара, разделенная запятой, состоящая из 'Decoding' и 'lossweighted' или 'lossbased'. Для получения дополнительной информации смотрите Бинарную Потерю.

Пример: 'Decoding','lossbased'

Сверните индексы для прогноза, заданного как пара, разделенная запятой, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должны быть в диапазоне от 1 до CVMdl.KFold.

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

Пример: 'Folds',[1 4 10]

Типы данных: single | double

Функция потерь, заданная как пара, разделенная запятой, состоящая из 'LossFun' и 'classiferror' или указателя на функцию.

  • Задайте встроенную функцию 'classiferror'. В этом случае функция потерь является ошибкой классификации.

  • Или, задайте свою собственную функцию с помощью обозначения указателя на функцию.

    Примите, что n является количеством наблюдений в данных тренировки (CVMdl.NumObservations), и K является количеством классов (numel(CVMdl.ClassNames)). Для вашей функции нужна подпись lossvalue = lossfun(C,S,W,Cost), где:

    • Выходным аргументом lossvalue является скаляр.

    • Вы задаете имя функции (lossfun).

    • C является n-by-K логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение. Порядок следования столбцов соответствует порядку класса в CVMdl.ClassNames.

      Создайте C установкой C(p,q) = 1, если наблюдение p находится в классе q для каждой строки. Установите каждый элемент строки p к 0.

    • S является n-by-K числовая матрица отрицаемых значений потерь для классов. Каждая строка соответствует наблюдению. Порядок следования столбцов соответствует порядку класса в CVMdl.ClassNames. Вход S напоминает выходной аргумент NegLoss kfoldPredict.

    • W является n-by-1 числовой вектор весов наблюдения. Если вы передаете W, программное обеспечение нормирует свои элементы, чтобы суммировать к 1.

    • Cost является K-by-K числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K) задает стоимость 0 для правильной классификации и 1 для misclassification.

    Задайте свою функцию с помощью 'LossFun',@lossfun.

Типы данных: char | string | function_handle

Уровень агрегации для вывода, заданного как пара, разделенная запятой, состоящая из 'Mode' и 'average' или 'individual'.

Эта таблица описывает значения.

ЗначениеОписание
'average'Вывод является скалярным средним значением по всем сгибам.
'individual'Вывод является вектором длины k, содержащий одно значение на сгиб, где k является количеством сгибов.

Пример: 'Mode','individual'

Опции оценки, заданные как пара, разделенная запятой, состоящая из 'Options' и массива структур, возвращенного statset.

Вызвать параллельные вычисления:

  • Вам нужна лицензия Parallel Computing Toolbox™.

  • Задайте 'Options',statset('UseParallel',true).

Уровень многословия, заданный как пара, разделенная запятой, состоящая из 'Verbose' и 0 или 1. Verbose управляет количеством диагностических сообщений, что программное обеспечение отображается в Командном окне.

Если Verbose является 0, то программное обеспечение не отображает диагностические сообщения. В противном случае программное обеспечение отображает диагностические сообщения.

Пример: 'Verbose',1

Типы данных: single | double

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

свернуть все

Потеря классификации, возвращенная в виде числа или числового вектор-столбца.

Если Mode является 'average', то loss является средней потерей классификации по всем сгибам. В противном случае loss является k-by-1 числовой вектор-столбец, содержащий потерю классификации для каждого сгиба, где k является количеством сгибов.

Больше о

свернуть все

Ошибка классификации

classification error является бинарной ошибочной мерой по классификации, которая имеет форму

L=j=1nwjejj=1nwj,

где:

  • wj является весом для наблюдения j. Программное обеспечение повторно нормирует веса, чтобы суммировать к 1.

  • ej = 1, если предсказанный класс наблюдения j отличается от своего истинного класса, и 0 в противном случае.

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

Бинарная потеря

binary loss является функцией класса и счета классификации, который определяет, как хорошо бинарный ученик классифицирует наблюдение в класс.

Предположим следующее:

  • mkj является элементом (k, j) проекта кодирования матричный M (то есть, код, соответствующий классу k бинарного ученика j).

  • sj является счетом бинарного ученика j для наблюдения.

  • g является бинарной функцией потерь.

  • k^ предсказанный класс для наблюдения.

В loss-based decoding [Escalera и др.], класс, производящий минимальную сумму бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,

k^=argminkj=1L|mkj|g(mkj,sj).

В loss-weighted decoding [Escalera и др.], класс, производящий минимальное среднее значение бинарных потерь по бинарным ученикам, определяет предсказанный класс наблюдения, то есть,

k^=argminkj=1L|mkj|g(mkj,sj)j=1L|mkj|.

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

Эта таблица суммирует поддерживаемые функции потерь, где yj является меткой класса для конкретного бинарного ученика (в наборе {-1,1,0}), sj является счетом к наблюдению j и g (yj, sj).

ЗначениеОписаниеОбласть счетаg (yj, sj)
'binodeviance'Биномиальное отклонение(–∞,∞)журнал [1 + exp (–2yjsj)] / [2log (2)]
'exponential'Экспоненциал(–∞,∞)exp (–yjsj)/2
'hamming'Хэмминг[0,1] или (– ∞, ∞)[1 – знак (yjsj)]/2
'hinge'Стержень(–∞,∞)макс. (0,1 – yjsj)/2
'linear'Линейный(–∞,∞)(1 – yjsj)/2
'logit'Логистический(–∞,∞)журнал [1 + exp (–yjsj)] / [2log (2)]
'quadratic'Квадратичный[0,1][1 – yj (2sj – 1)] 2/2

Программное обеспечение нормирует бинарные потери, таким образом, что потеря 0.5, когда yj = 0, и агрегировал использование среднего значения бинарных учеников [Allwein и др.].

Не путайте бинарную потерю с полной потерей классификации (заданный аргументом пары "имя-значение" 'LossFun' функций объекта loss и predict), который измеряется, как хорошо классификатор ECOC выполняет в целом.

Ссылки

[1] Allwein, E., Р. Шапайр и И. Зингер. “Уменьшая мультикласс до двоичного файла: подход объединения для поля classifiers”. Журнал Исследования Машинного обучения. Издание 1, 2000, стр 113–141.

[2] Escalera, S., О. Пуджол и П. Радева. “На процессе декодирования в троичных выходных кодах с коррекцией ошибок”. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту. Издание 32, Выпуск 7, 2010, стр 120–134.

[3] Escalera, S., О. Пуджол и П. Радева. “Отделимость троичных кодов для разреженных проектов выходных кодов с коррекцией ошибок”. Шаблон Recogn. Издание 30, Выпуск 3, 2009, стр 285–297.

Смотрите также

|

Введенный в R2018b