ClassificationECOC

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

Описание

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

Создание

Создайте объект ClassificationECOC при помощи fitcecoc.

Если вы задаете линейный или двоичные ученики ядра, не задавая опции перекрестной проверки, то fitcecoc возвращает объект CompactClassificationECOC вместо этого.

Свойства

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

После того, как вы создадите объект модели ClassificationECOC, можно использовать запись через точку, чтобы получить доступ к ее свойствам. Для примера см., что Модель Мультикласса Train Использует Учеников SVM.

Свойства ECOC

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

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

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

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

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

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

Бинарные метки класса ученика, заданные как числовая матрица. BinaryY является NumObservations-by-L матрица, где L является количеством бинарных учеников (length(Mdl.BinaryLearners)).

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

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

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

Ребра интервала для числовых предикторов, заданных как массив ячеек p числовые векторы, где p является количеством предикторов. Каждый вектор включает ребра интервала для числового предиктора. Элемент в массиве ячеек для категориального предиктора пуст, потому что программное обеспечение не делает интервала категориальные предикторы.

Числовые предикторы интервалов программного обеспечения, только если вы задаете аргумент пары "имя-значение" 'NumBins' как положительный целочисленный скаляр когда обучение модель с древовидными учениками. Свойство BinEdges пусто, если значение 'NumBins' пусто (значение по умолчанию).

Можно воспроизвести сгруппированные данные о предикторе Xbinned при помощи свойства BinEdges обученной модели mdl.

X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x) 
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]); 
    Xbinned(:,j) = xbinned;
end
Xbinned содержит индексы интервала, в пределах от 1 к количеству интервалов, для числовых предикторов. значения Xbinned 0 для категориальных предикторов. Если X содержит NaN s, то соответствующими значениями Xbinned является NaN s.

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

Коды присвоения класса для бинарных учеников, заданных как числовая матрица. 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

Кодирование имени проекта, заданного как вектор символов. Для получения дополнительной информации см. Проект Кодирования.

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

Бинарные веса ученика, заданные как числовой вектор - строка. Длина 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.

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

Значения параметров, такие как значения аргумента пары "имя-значение", используемые, чтобы обучить классификатор ECOC, заданный как объект. ModelParameters не содержит оцененные параметры.

Доступ к свойствам ModelParameters с помощью записи через точку. Например, перечислите шаблоны, содержащие параметры бинарных учеников при помощи Mdl.ModelParameters.BinaryLearner.

Количество наблюдений в данных тренировки, заданных в виде положительного числа.

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

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

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

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

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

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

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

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

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

Строки исходных данных X, используемый в подборе кривой модели ClassificationECOC, заданной как логический вектор. Это свойство пусто, если все строки используются.

Типы данных: логический

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

Изменить функцию преобразования счета на 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

Веса наблюдения раньше обучали классификатор ECOC, заданный как числовой вектор. W имеет элементы NumObservations.

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

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

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

Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

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

Наблюдаемые метки класса раньше обучали классификатор ECOC, заданный как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов. Y имеет элементы NumObservations и имеет совпадающий тип данных как входной параметр Y fitcecoc. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)

Каждая строка Y представляет наблюдаемую классификацию соответствующей строки X.

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

Свойства гипероптимизации параметров управления

Описание оптимизации перекрестной проверки гиперпараметров, заданных как объект BayesianOptimization или таблица гиперпараметров и присваиваемых значений. Это свойство непусто, если аргумент пары "имя-значение" 'OptimizeHyperparameters' непуст, когда вы создаете модель. Значение HyperparameterOptimizationResults зависит от установки поля Optimizer в структуре HyperparameterOptimizationOptions, когда вы создаете модель, как описано в этой таблице.

Значение поля OptimizerЗначение HyperparameterOptimizationResults
'bayesopt' (значение по умолчанию)Объект класса BayesianOptimization
'gridsearch' или 'randomsearch'Таблица гиперпараметров используемые, наблюдаемые значения целевой функции (потеря перекрестной проверки), и ранг наблюдений от самого низкого (лучше всего) к (худшему) самому высокому

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

compareHoldoutСравните точность двух моделей классификации с помощью новых данных
compactУменьшайте размер модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
crossvalПерекрестный подтвердите модель выходных кодов с коррекцией ошибок (ECOC) мультикласса
discardSupportVectorsОтбросьте векторы поддержки линейных бинарных учеников SVM в модели ECOC
edgeРебро классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
lossПотеря классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
marginПоля классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
predictКлассифицируйте наблюдения с помощью модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
resubEdgeРебро классификации перезамены для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
resubLossПотеря классификации перезамены для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
resubMarginПоля классификации перезамены для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса
resubPredictКлассифицируйте наблюдения на модель выходных кодов с коррекцией ошибок (ECOC) мультикласса

Примеры

свернуть все

Обучите модель выходных кодов с коррекцией ошибок (ECOC) мультикласса использование двоичных учеников машины вектора поддержки (SVM).

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

load fisheriris
X = meas;
Y = species;

Обучите мультикласс модель ECOC с помощью опций по умолчанию.

Mdl = fitcecoc(X,Y)
Mdl = 
  ClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
               CodingName: 'onevsone'


  Properties, Methods

Mdl является моделью ClassificationECOC. По умолчанию fitcecoc использует бинарных учеников SVM и один по сравнению с один кодирующий проект. Можно получить доступ к свойствам Mdl с помощью записи через точку.

Отобразите имена классов и матрицу проекта кодирования.

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

Один по сравнению с один кодирующий проект для трех классов приводит к трем бинарным ученикам. Столбцы CodingMat соответствуют ученикам, и строки соответствуют классам. Порядок класса совпадает с порядком в Mdl.ClassNames. Например, CodingMat(:,1) является [1; –1; 0] и указывает, что программное обеспечение обучает первого бинарного ученика SVM, использующего все наблюдения, классифицированные как 'setosa' и 'versicolor'. Поскольку 'setosa' соответствует 1, это - положительный класс; 'versicolor' соответствует –1, таким образом, это - отрицательный класс.

Можно получить доступ к каждой бинарной индексации ячейки использования ученика и записи через точку.

Mdl.BinaryLearners{1}   % The first binary learner
ans = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: 'none'
                     Beta: [4x1 double]
                     Bias: 1.4505
         KernelParameters: [1x1 struct]


  Properties, Methods

Вычислите ошибку классификации перезамены.

error = resubLoss(Mdl)
error = 0.0067

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

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

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

load fisheriris
X = meas(:,3:4);
Y = species;

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

t = templateSVM('Standardize',true,'SaveSupportVectors',true);
predictorNames = {'petalLength','petalWidth'};
responseName = 'irisSpecies';
classNames = {'setosa','versicolor','virginica'}; % Specify class order
Mdl = fitcecoc(X,Y,'Learners',t,'ResponseName',responseName,...
    'PredictorNames',predictorNames,'ClassNames',classNames)
Mdl = 
  ClassificationECOC
           PredictorNames: {'petalLength'  'petalWidth'}
             ResponseName: 'irisSpecies'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
               CodingName: 'onevsone'


  Properties, Methods

t является объектом шаблона, который содержит опции для классификации SVM. Функциональный fitcecoc использует значения по умолчанию для пустых свойств ([]). Mdl является классификатором ClassificationECOC. Можно получить доступ к свойствам Mdl с помощью записи через точку.

Отобразите имена классов и матрицу проекта кодирования.

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.CodingMatrix
ans = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

Столбцы соответствуют бинарным ученикам SVM, и строки соответствуют отличным классам. Порядок строк совпадает с порядком в свойстве ClassNames Mdl. Для каждого столбца:

  • 1 указывает, что fitcecoc обучает SVM использование наблюдений в соответствующем классе как члены положительной группы.

  • –1 указывает, что fitcecoc обучает SVM использование наблюдений в соответствующем классе как члены отрицательной группы.

  • 0 указывает, что SVM не использует наблюдения в соответствующем классе.

В первом SVM, например, fitcecoc присваивает все наблюдения 'setosa' или 'versicolor', но не 'virginica'.

Доступ к свойствам SVMs использование индексирования ячейки и записи через точку. Сохраните стандартизированные векторы поддержки каждого SVM. Не стандартизируйте векторы поддержки.

L = size(Mdl.CodingMatrix,2); % Number of SVMs
sv = cell(L,1); % Preallocate for support vector indices
for j = 1:L
    SVM = Mdl.BinaryLearners{j};
    sv{j} = SVM.SupportVectors;
    sv{j} = sv{j}.*SVM.Sigma + SVM.Mu;
end

sv является массивом ячеек матриц, содержащих нестандартизированные векторы поддержки для SVMs.

Отобразите данные на графике и идентифицируйте векторы поддержки.

figure
gscatter(X(:,1),X(:,2),Y);
hold on
markers = {'ko','ro','bo'}; % Should be of length L
for j = 1:L
    svs = sv{j};
    plot(svs(:,1),svs(:,2),markers{j},...
        'MarkerSize',10 + (j - 1)*3);
end
title('Fisher''s Iris -- ECOC Support Vectors')
xlabel(predictorNames{1})
ylabel(predictorNames{2})
legend([classNames,{'Support vectors - SVM 1',...
    'Support vectors - SVM 2','Support vectors - SVM 3'}],...
    'Location','Best')
hold off

Можно передать Mdl этим функциям:

  • predict, чтобы классифицировать новые наблюдения

  • resubLoss, чтобы оценить ошибку классификации на данных тренировки

  • crossval, чтобы выполнить 10-кратную перекрестную проверку

Перекрестный подтвердите классификатор ECOC с бинарными учениками SVM и оцените обобщенную ошибку классификации.

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

load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility

Создайте шаблон SVM и стандартизируйте предикторы.

t = templateSVM('Standardize',true)
t = 
Fit template for classification SVM.

                     Alpha: [0x1 double]
             BoxConstraint: []
                 CacheSize: []
             CachingMethod: ''
                ClipAlphas: []
    DeltaGradientTolerance: []
                   Epsilon: []
              GapTolerance: []
              KKTTolerance: []
            IterationLimit: []
            KernelFunction: ''
               KernelScale: []
              KernelOffset: []
     KernelPolynomialOrder: []
                  NumPrint: []
                        Nu: []
           OutlierFraction: []
          RemoveDuplicates: []
           ShrinkagePeriod: []
                    Solver: ''
           StandardizeData: 1
        SaveSupportVectors: []
            VerbosityLevel: []
                   Version: 2
                    Method: 'SVM'
                      Type: 'classification'

t является шаблоном SVM. Большинство свойств объекта шаблона пусто. Когда обучение классификатор ECOC, программное обеспечение устанавливает применимые свойства на их значения по умолчанию.

Обучите классификатор ECOC и задайте порядок класса.

Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

Mdl является классификатором ClassificationECOC. Можно получить доступ к его свойствам с помощью записи через точку.

Перекрестный подтвердите Mdl с помощью 10-кратной перекрестной проверки.

CVMdl = crossval(Mdl);

CVMdl является ClassificationPartitionedECOC перекрестный подтвержденный классификатор ECOC.

Оцените обобщенную ошибку классификации.

genError = kfoldLoss(CVMdl)
genError = 0.0400

Обобщенная ошибка классификации составляет 4%, который указывает, что классификатор ECOC делает вывод довольно хорошо.

Больше о

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

Алгоритмы

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

Альтернативная функциональность

Можно использовать эти альтернативные алгоритмы, чтобы обучить модель мультикласса:

Ссылки

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

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

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

Введенный в R2014b