exponenta event banner

ClassificationECOC

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

Описание

ClassificationECOC - классификатор выходных кодов с исправлением ошибок (ECOC) для многоклассового обучения, где классификатор состоит из нескольких двоичных учеников, таких как вспомогательные векторные машины (SVM). Обученный 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-by-L матрица, где L - число двоичных учеников (length(Mdl.BinaryLearners)).

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

СтоимостьНазначение класса Dichotomous
–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).

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

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

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

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

Двоичные веса учащихся, определяемые как числовой вектор строки. Длина LearnerWeights равно количеству двоичных учеников (length(Mdl.BinaryLearners)).

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

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

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

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

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

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

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

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

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

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

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

fitcecoc включает в себя затраты на неправильную классификацию различных типов двоичных учеников.

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

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

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

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

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

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

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

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

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

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

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

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

fitcecoc включает в себя затраты на неправильную классификацию различных типов двоичных учеников.

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

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

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

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

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

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

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

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

    Mdl.ScoreTransform = 'function';

    СтоимостьОписание
    'doublelogit'1/( 1 + e-2x)
    'invlogit'log (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 элементы.

Программное обеспечение нормализует веса, используемые для обучения, так, чтобы sum(W,'omitnan') является 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'Таблица используемых гиперпараметров, наблюдаемые значения целевой функции (потеря перекрестной проверки) и ранг наблюдений от самого низкого (лучший) до самого высокого (худший)

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

compactУменьшение размера модели многоклассовых выходных кодов с исправлением ошибок (ECOC)
compareHoldoutСравнение точности двух классификационных моделей с использованием новых данных
crossvalМодель многоклассовых кодов вывода с исправлением ошибок (ECOC)
discardSupportVectorsОтбрасывать векторы поддержки линейных двоичных учеников SVM в модели ECOC
edgeКрай классификации для многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
lossПотеря классификации для многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
marginПоля классификации для многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
partialDependenceВычислить частичную зависимость
plotPartialDependenceСоздание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE)
predictКлассификация наблюдений с использованием многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
resubEdgeКрай классификации повторного замещения для модели многоклассовых выходных кодов с исправлением ошибок (ECOC)
limeЛокальные интерпретируемые модели-агностические объяснения (LIME)
resubLossПотеря классификации повторного замещения для модели многоклассовых выходных кодов с исправлением ошибок (ECOC)
resubMarginПоля классификации повторного замещения для модели многоклассовых выходных кодов с исправлением ошибок (ECOC)
resubPredictКлассификация наблюдений в многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
shapleyЗначения Шапли
testckfoldСравнение точности двух классификационных моделей с помощью повторной перекрестной проверки

Примеры

свернуть все

Обучение модели многоклассных выходных кодов с исправлением ошибок (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
    {'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 = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: 'none'
                     Beta: [4x1 double]
                     Bias: 1.4492
         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
    {'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'.

Доступ к свойствам SVM с использованием подстрочного индекса соты и точечной нотации. Сохраните стандартизированные векторы поддержки каждого 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 является массивом ячеек матриц, содержащих нестандартные векторы поддержки для SVM.

Постройте график данных и определите векторы поддержки.

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

Figure contains an axes. The axes with title Fisher's Iris -- ECOC Support Vectors contains 6 objects of type line. These objects represent setosa, versicolor, virginica, Support vectors - SVM 1, Support vectors - SVM 2, Support vectors - SVM 3.

Вы можете пройти 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] Фюрнкранц, Йоханнес. «Циклическая классификация». Журнал исследований машинного обучения, том 2, 2002, стр. 721-747.

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

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

.
Представлен в R2014b