ClassificationECOC

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

Описание

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

Создание

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

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

Свойства

расширить все

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

Свойства 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' аргумент имя-значение как положительный целочисленный скаляр при обучении модели с учениками дерева. The 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 значения NaNс.

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

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

Типы данных: 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 если его класс true 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'журнал (x/( 1 - x))
    'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
    'logit'1/(1 + ex)
    'none' или 'identity'x (без преобразования)
    'sign'-1 для x < 0
    0 для x = 0
    1 для x > 0
    'symmetric'2 x – 1
    'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
    'symmetriclogit'2/(1 + ex) – 1

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

    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Значения 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] Фюрнкранц, Йоханнес. Round Robin Classification (неопр.) (недоступная ссылка). Journal of Машинное Обучение Research, Vol. 2, 2002, pp. 721-747.

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

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

.
Введенный в R2014b