exponenta event banner

kfoldLoss

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

Описание

пример

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 = 
  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 = 
  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 является именем аргумента и 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'Стержень(–∞,∞)max (0,1 - yjsj )/2
    'linear'Линейный(–∞,∞)(1 - yjsj )/2
    'logit'Логистический(–∞,∞)log [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-by-L строк классификационных баллов.

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

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

    • L - количество двоичных учеников.

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

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

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

Схема декодирования, которая агрегирует двоичные потери, заданная как разделенная запятыми пара, состоящая из '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-на-1 числовым вектором весов наблюдения. Если вы проходите W, программное обеспечение нормализует свои элементы для суммирования 1.

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

    Укажите свою функцию с помощью '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 - количество складок.

Подробнее

свернуть все

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

Ошибка классификации - это двоичная мера ошибки классификации, имеющая вид

L=∑j=1nwjej∑j=1nwj,

где:

  • wj - вес для наблюдения j. Программа перенормирует весовые коэффициенты до 1.

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

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

Двоичные потери

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

Предположим, что:

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

  • sj - оценка двоичного ученика j для наблюдения.

  • g - функция двоичных потерь.

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

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

k^=argmink∑j=1L'mkj'g (mkj, sj).

При декодировании со взвешенными потерями [Escalera et al.] класс, производящий минимальное среднее двоичных потерь по двоичным ученикам, определяет прогнозируемый класс наблюдения, то есть

k^=argmink∑j=1L'mkj'g (mkj, sj) ∑j=1L'mkj|.

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

Эта таблица суммирует поддерживаемые функции потерь, где 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'Стержень(–∞,∞)max (0,1 - yjsj )/2
'linear'Линейный(–∞,∞)(1 - yjsj )/2
'logit'Логистический(–∞,∞)log [1 + exp (-yjsj) ]/[ 2log (2)]
'quadratic'Квадратный[0,1][1-yj (2sj-1)] 2/2

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

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

Ссылки

[1] Allwein, E., R. Schapire и Y. Singer. «Сокращение мультиклассов до двоичных: унифицирующий подход к classifiers маржи». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.

[2] Эскалера, С., О. Пужоль и П. Радева. «Процесс декодирования в выходных кодах с тройной коррекцией ошибок». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Том 32, выпуск 7, 2010, стр. 120-134.

[3] Эскалера, С., О. Пужоль и П. Радева. «Разделяемость троичных кодов для разреженных конструкций выходных кодов с исправлением ошибок». Повторная запись шаблона. Том 30, выпуск 3, 2009, стр. 285-297.

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