CompactClassificationECOC

Компактная модель мультикласса для машин вектора поддержки (SVMs) и других классификаторов

Описание

CompactClassificationECOC является компактной версией модели выходных кодов с коррекцией ошибок (ECOC) мультикласса. Компактный классификатор не включает данные, используемые для обучения мультикласс модель ECOC. Поэтому вы не можете выполнить определенные задачи, такие как перекрестная проверка, с помощью компактного классификатора. Используйте компактный мультикласс модель ECOC для задач, таких как классификация новых данных (predict).

Создание

Можно создать модель CompactClassificationECOC двумя способами:

  • Создайте компактную модель ECOC из обученной модели ClassificationECOC при помощи функции объекта compact.

  • Создайте компактную модель ECOC при помощи функции fitcecoc и определения аргумента пары "имя-значение" 'Learners' как 'linear', 'kernel', объект templateLinear или templateKernel или массив ячеек таких объектов.

Свойства

развернуть все

После того, как вы создадите объект модели CompactClassificationECOC, можно использовать запись через точку, чтобы получить доступ к ее свойствам. Для примера смотрите Train и перекрестный Подтвердите Классификатор ECOC.

Свойства ECOC

Обученные бинарные ученики, заданные как вектор ячейки объектов модели. Количество бинарных учеников зависит от количества классов в Y и проекте кодирования.

Программное обеспечение обучает BinaryLearner{j} согласно бинарной проблеме, заданной CodingMatrix (:,j). Например, для изучения мультикласса с помощью учеников SVM, каждый элемент BinaryLearners является классификатором CompactClassificationSVM.

Типы данных: cell

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

Если вы обучаете использующих бинарных учеников, которые используют различные функции потерь, то программное обеспечение устанавливает BinaryLoss на 'hamming'. Чтобы потенциально увеличить точность, задайте бинарную функцию потерь кроме значения по умолчанию во время прогноза или вычисления потерь при помощи аргумента пары "имя-значение" 'BinaryLoss' predict или loss.

Типы данных: char

Коды присвоения класса для бинарных учеников, заданных как числовая матрица. CodingMatrix является K-by-L матрица, где K является количеством классов, и L является количеством бинарных учеников.

Элементами CodingMatrix является –1, 0 или 1, и значения соответствуют дихотомическим присвоениям класса. Эта таблица описывает, как ученик j присваивает наблюдения в классе i к дихотомическому классу, соответствующему значению CodingMatrix(i,j).

ЗначениеДихотомическое присвоение класса
–1Ученик j присваивает наблюдения в классе i к отрицательному классу.
0Перед обучением ученик j удаляет наблюдения в классе i от набора данных.
1Ученик j присваивает наблюдения в классе i к положительному классу.

Типы данных: double | single | int8 | int16 | int32 | int64

Бинарные веса ученика, заданные как числовой вектор - строка. Длина LeanerWeights равна количеству бинарных учеников (length(Mdl.BinaryLearners)).

LearnerWeights(j) является суммой весов наблюдения что бинарный ученик использование j, чтобы обучить его классификатор.

Программное обеспечение использует LearnerWeights, чтобы соответствовать апостериорным вероятностям путем минимизации расхождения Kullback-Leibler. Программное обеспечение игнорирует LearnerWeights, когда это использует метод квадратичного программирования оценки апостериорных вероятностей.

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

Другие свойства классификации

Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors содержит индексные значения, соответствующие столбцам данных о предикторе, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пусто ([]).

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

Уникальные метки класса используются в обучении, заданном как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames имеет совпадающий тип данных, когда класс маркирует Y. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.) ClassNames также определяет порядок класса.

Типы данных: categorical | char | logical | single | double | cell

Это свойство доступно только для чтения.

Затраты Misclassification, заданные как квадратная числовая матрица. Cost имеет строки и столбцы K, где K является количеством классов.

Cost(i,j) является стоимостью классификации точки в класс j, если его истинным классом является i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

fitcecoc включает затраты misclassification по-другому среди различных типов бинарных учеников.

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

Расширенные имена предиктора, заданные как массив ячеек из символьных векторов.

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

Предиктор называет в порядке их внешнего вида в данных о предикторе X, заданный как массив ячеек из символьных векторов. Длина PredictorNames равна количеству столбцов в X.

Типы данных: cell

Это свойство доступно только для чтения.

Предшествующие вероятности класса, заданные как числовой вектор. Prior имеет столько же элементов сколько количество классов в ClassNames, и порядок элементов соответствует порядку классов в ClassNames.

fitcecoc включает затраты misclassification по-другому среди различных типов бинарных учеников.

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

Имя переменной отклика, заданное как вектор символов.

Типы данных: char

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

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

  • Для встроенной функции введите этот код и замените function на значение в таблице.

    Mdl.ScoreTransform = 'function';

    ЗначениеОписание
    'doublelogit'1/(1 + e –2x)
    'invlogit'журнал (x / (1 – x))
    'ismax'Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к 0
    'logit'1/(1 + e x)
    'none' или 'identity'x (никакое преобразование)
    'sign'– 1 для x <0
    0 для x = 0
    1 для x> 0
    'symmetric'2x – 1
    'symmetricismax'Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1
    'symmetriclogit'2/(1 + e x) – 1

  • Для функции MATLAB® или функции, которую вы задаете, введите ее указатель на функцию.

    Mdl.ScoreTransform = @function;

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

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

Функции объекта

compareHoldoutСравните точность двух моделей классификации с помощью новых данных
discardSupportVectorsОтбросьте векторы поддержки линейных бинарных учеников SVM в модели ECOC
edgeРебро классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
lossПотеря классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
marginПоля классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
predictКлассифицируйте наблюдения с помощью модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
selectModelsВыберите подмножество мультикласса модели ECOC, состоявшие из бинарных учеников ClassificationLinear
updateОбновите параметры модели для генерации кода

Примеры

свернуть все

Уменьшайте размер полной модели ECOC путем удаления данных тренировки. Полные модели ECOC (модели ClassificationECOC) содержат данные тренировки. Чтобы повысить эффективность, используйте меньший классификатор.

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

load fisheriris
X = meas;
Y = categorical(species);
classOrder = unique(Y);

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

t = templateSVM('Standardize',true);
Mdl = fitcecoc(X,Y,'Learners',t,'ClassNames',classOrder);

Mdl является моделью ClassificationECOC.

Уменьшайте размер модели ECOC.

CompactMdl = compact(Mdl)
CompactMdl = 
  classreg.learning.classif.CompactClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [setosa    versicolor    virginica]
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
             CodingMatrix: [3x3 double]


  Properties, Methods

CompactMdl является моделью CompactClassificationECOC. CompactMdl не хранит все свойства, которые хранит Mdl. В частности, это не хранит данные тренировки.

Отобразите объем памяти каждый классификатор использование.

whos('CompactMdl','Mdl')
  Name            Size            Bytes  Class                                                  Attributes

  CompactMdl      1x1             14364  classreg.learning.classif.CompactClassificationECOC              
  Mdl             1x1             27439  ClassificationECOC                                               

Полная модель ECOC (Mdl) приблизительно удваивает размер компактной модели ECOC (CompactMdl).

Чтобы маркировать новые наблюдения эффективно, можно удалить Mdl из MATLAB® Workspace, и затем передать CompactMdl и новые значения предиктора к predict.

Обучите и перекрестный подтвердите классификатор ECOC с помощью различных бинарных учеников и one-all, кодирующего проект.

Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе X и данные об ответе Y. Определите имена классов и количество классов.

load fisheriris
X = meas;
Y = species;
classNames = unique(species(~strcmp(species,''))) % Remove empty classes 
classNames = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

K = numel(classNames) % Number of classes
K = 3

Можно использовать classNames, чтобы задать порядок классов во время обучения.

Для one-all, кодирующего проект, этот пример имеет K = 3 бинарных ученика. Задайте шаблоны для бинарных учеников, таким образом что:

  • Бинарный ученик 1 и 2 является наивными классификаторами Байеса. По умолчанию каждый предиктор условно, нормально распределен, учитывая свою метку.

  • Бинарный ученик 3 является классификатором SVM. Задайте, чтобы использовать Гауссово ядро.

rng(1);  % For reproducibility
tNB = templateNaiveBayes();
tSVM = templateSVM('KernelFunction','gaussian');
tLearners = {tNB tNB tSVM};

tNB и tSVM являются объектами шаблона для наивного Бейеса и изучения SVM, соответственно. Объекты указывают который опции использовать во время обучения. Большинство их свойств пусто, кроме заданных аргументами пары "имя-значение". Во время обучения программное обеспечение заполняет пустые свойства с их значениями по умолчанию.

Обучите и перекрестный подтвердите классификатор ECOC с помощью бинарных шаблонов ученика и one-all, кодирующего проект. Задайте порядок классов. По умолчанию наивные классификаторы Байеса используют апостериорные вероятности в качестве очков, тогда как классификаторы SVM используют расстояния от контура решения. Поэтому, чтобы агрегировать бинарных учеников, необходимо задать, чтобы соответствовать апостериорным вероятностям.

CVMdl = fitcecoc(X,Y,'ClassNames',classNames,'CrossVal','on',...
    'Learners',tLearners,'FitPosterior',true);

CVMdl является ClassificationPartitionedECOC перекрестная подтвержденная модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Очки через бинарных учеников имеют ту же форму (то есть, они - апостериорные вероятности), таким образом, программное обеспечение может агрегировать результаты бинарных классификаций правильно.

Осмотрите один из обученных сгибов с помощью записи через точку.

CVMdl.Trained{1}
ans = 
  classreg.learning.classif.CompactClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
             CodingMatrix: [3x3 double]


  Properties, Methods

Каждый сгиб является моделью CompactClassificationECOC, обученной на 90% данных.

Можно получить доступ к результатам бинарных учеников, использующих индексация ячейки и запись через точку. Отобразите обученный классификатор SVM (третий бинарный ученик) в первом сгибе.

CVMdl.Trained{1}.BinaryLearners{3}
ans = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: '@(S)sigmoid(S,-4.016735e+00,-3.243073e-01)'
                    Alpha: [33x1 double]
                     Bias: -0.1345
         KernelParameters: [1x1 struct]
           SupportVectors: [33x4 double]
      SupportVectorLabels: [33x1 double]


  Properties, Methods

Оцените ошибку обобщения.

genError = kfoldLoss(CVMdl)
genError = 0.0333

В среднем ошибка обобщения составляет приблизительно 3%.

Алгоритмы

развернуть все

Ссылки

[1] Fürnkranz, Иоганнес. “Круговая Классификация”. Журнал Исследования Машинного обучения, Издания 2, 2002, стр 721–747.

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

Расширенные возможности

Введенный в R2014b