ClassificationECOC

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

Описание

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

Создание

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

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

Свойства

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

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

Свойства ECOC

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

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

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

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

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

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

Бинарные метки класса ученика, заданные как числовая матрица. BinaryY NumObservations- 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 содержит NaNs, затем соответствующий Xbinned значениями является NaNs.

Типы данных: 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