exponenta event banner

kfoldMargin

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

Описание

пример

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

margin = kfoldMargin(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'.

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

m = kfoldMargin(CVMdl);
size(m)
ans = 1×2

   150     1

m является вектором 150 на 1. m(j) - классификационный запас для наблюдения j.

Постройте график k-кратных полей с помощью боксплота.

boxplot(m,'Labels','All Observations')
title('Distribution of Margins')

Figure contains an axes. The axes with title Distribution of Margins contains 7 objects of type line.

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

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

load fisheriris
X = meas;
Y = species;

Случайным образом выберите половину переменных предиктора.

rng(1); % For reproducibility
p = size(X,2); % Number of predictors
idxPart = randsample(p,ceil(0.5*p));

Перекрестная проверка двух моделей ECOC, состоящих из моделей классификации ядра: одна использует все предикторы, а другая - половину предикторов.

CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on');
PCVMdl = fitcecoc(X(:,idxPart),Y,'Learners','kernel','CrossVal','on');

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

Оцените k-кратные поля для каждого классификатора.

fullMargins = kfoldMargin(CVMdl);
partMargins = kfoldMargin(PCVMdl);

Постройте график распределения наборов полей с помощью оконных графиков.

boxplot([fullMargins partMargins], ...
    'Labels',{'All Predictors','Half of the Predictors'});
title('Distribution of Margins')

Figure contains an axes. The axes with title Distribution of Margins contains 14 objects of type line.

PCVMdl распределение маржи аналогично CVMdl распределение маржи.

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

свернуть все

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

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

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

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

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

Пример: kfoldMargin(CVMdl,'Verbose',1) определяет отображение диагностических сообщений в окне команд.

Двоичная функция потери ученика, заданная как разделенная запятыми пара, состоящая из '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'

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

Для вызова параллельных вычислений:

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

  • Определить 'Options',statset('UseParallel',true).

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

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

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

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

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

свернуть все

Поля классификации, возвращаемые в виде числового вектора. margin является вектором n-by-1, где каждая строка является полем соответствующего наблюдения, а n - числом наблюдений (size(CVMdl.Y,1)).

Подробнее

свернуть все

Маржа классификации

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

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

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

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

  • 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