ClassificationPartitionedECOC

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

Описание

ClassificationPartitionedECOC является набором моделей выходных кодов с коррекцией ошибок (ECOC), обученных на перекрестных подтвержденных сгибах. Оцените качество перекрестной подтвержденной классификации при помощи одной или нескольких функций “kfold”: kfoldPredict, kfoldLoss, kfoldMargin, kfoldEdge и kfoldfun.

Каждые “kfold” модели использования метода, обученные на учебном сгибе, (окутывают) наблюдения, чтобы предсказать ответ для сгиба валидации наблюдения (из сгиба). Например, предположите, что вы перекрестный подтверждаете использование пяти сгибов. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение в пять групп равного размера (примерно). training fold содержит четыре из групп (примерно 4/5 данных), и validation fold содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка продолжает можно следующим образом:

  1. Программное обеспечение обучает первую модель (сохраненный в CVMdl.Trained{1}) при помощи наблюдений в последних четырех группах и резервирует наблюдения в первой группе для валидации.

  2. Программное обеспечение обучает вторую модель (сохраненный в CVMdl.Trained{2}) при помощи наблюдений в первой группе и последних трех группах. Программное обеспечение резервирует наблюдения во второй группе для валидации.

  3. Программное обеспечение продолжает подобным способом для третьих, четвертых, и пятых моделей.

Если вы подтверждаете при помощи kfoldPredict, программное обеспечение вычисляет прогнозы для наблюдений в группе i при помощи i th модель. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения при помощи модели, обученной без того наблюдения.

Создание

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

  • Создайте перекрестную подтвержденную модель ECOC из модели ECOC при помощи функции объекта crossval.

  • Создайте перекрестную подтвержденную модель ECOC при помощи функции fitcecoc и определения одного из аргументов пары "имя-значение" 'CrossVal', 'CVPartition', 'Holdout', 'KFold' или 'Leaveout'.

Свойства

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

Свойства перекрестной проверки

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

Например, 'ECOC' задает перекрестную подтвержденную модель ECOC.

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

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

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

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

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

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

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

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

Компактные классификаторы обучены на сгибах перекрестной проверки, заданных как массив ячеек моделей CompactClassificationECOC. Trained имеет ячейки k, где k является количеством сгибов.

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

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

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

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

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

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

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

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

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

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

Свойства ECOC

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

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

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

Бинарные метки класса ученика, заданные как числовая матрица или [].

  • Если матрица кодирования является тем же самым через все сгибы, то BinaryY является NumObservations-by-L матрица, где L является количеством бинарных учеников (size(CodingMatrix,2)).

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

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

  • Если матрица кодирования отличается через сгибы, то BinaryY пуст ([]).

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

Коды, задающие присвоения класса для бинарных учеников, заданных как числовая матрица или [].

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

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

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

  • Если матрица кодирования отличается через сгибы, то CodingMatrix пуст ([]). Можно получить матрицу кодирования для каждого сгиба при помощи свойства Trained. Например, CVMdl.Trained{1}.CodingMatrix является матрицей кодирования в первом сгибе перекрестной подтвержденной модели ECOC CVMdl.

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

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

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

Предиктор называет в порядке их внешнего вида в данных о предикторе 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

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

kfoldEdgeРебро классификации для перекрестной подтвержденной модели ECOC
kfoldLossПотеря классификации для перекрестной подтвержденной модели ECOC
kfoldMarginПоля классификации для перекрестной подтвержденной модели ECOC
kfoldPredictКлассифицируйте наблюдения на перекрестную подтвержденную модель ECOC
kfoldfunПерекрестный подтвердите функцию с помощью перекрестной подтвержденной модели ECOC

Примеры

свернуть все

Перекрестный подтвердите классификатор 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 делает вывод довольно хорошо.

Обучите one-all ECOC классификатор с помощью ансамбля GentleBoost деревьев решений с суррогатными разделениями. Ускорять обучение, интервал числовые предикторы и использовать параллельные вычисления. Раскладывание допустимо только, когда fitcecoc использует древовидного ученика. После обучения оцените ошибку классификации 10-кратная перекрестная проверка. Обратите внимание на то, что параллельные вычисления требуют Parallel Computing Toolbox™.

Загрузка демонстрационных данных

Загрузите и осмотрите набор данных arrhythmia.

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

Набор данных содержит предикторы 279, и объем выборки 452 является относительно маленьким. Из 16 отличных меток только 13 представлены в ответе (Y). Каждая метка описывает различные степени аритмии, и 54,20% наблюдений находится в классе 1.

Обучите One-All ECOC классификатор

Создайте шаблон ансамбля. Необходимо задать по крайней мере три аргумента: метод, много учеников и тип ученика. В данном примере задайте 'GentleBoost' для метода, 100 для количества учеников и шаблон дерева решений, который использует суррогатные разделения, потому что там пропускают наблюдения.

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble является объектом шаблона. Большинство его свойств пусто, но программное обеспечение заполняет их с их значениями по умолчанию во время обучения.

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

  • Раскладывание ('NumBins',50) — Когда у вас есть большой обучающий набор данных, можно ускорить обучение (потенциальное уменьшение в точности) при помощи аргумента пары "имя-значение" 'NumBins'. Этот аргумент допустим только, когда fitcecoc использует древовидного ученика. Если вы задаете значение 'NumBins', то интервалы программного обеспечения каждый числовой предиктор в конкретное количество равновероятных интервалов, и затем выращивает деревья на индексах интервала вместо исходных данных. Можно попробовать 'NumBins',50 сначала, и затем изменить значение 'NumBins' в зависимости от точности и учебной скорости.

  • Параллельные вычисления ('Options',statset('UseParallel',true)) — С лицензией Parallel Computing Toolbox, можно ускорить вычисление при помощи параллельных вычислений, которые отправляют каждого бинарного ученика рабочему в пуле. Количество рабочих зависит от вашей конфигурации системы. Когда вы используете деревья решений для бинарных учеников, fitcecoc параллелизирует обучение с помощью Intel® Threading Building Blocks (TBB) для двухъядерных систем и выше. Поэтому определение опции 'UseParallel' не полезно на одиночном компьютере. Используйте эту опцию на кластере.

Кроме того, укажите, что априорные вероятности являются 1/K, где K = 13 является количеством отличных классов.

options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

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

Перекрестная проверка

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

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdl является моделью ClassificationPartitionedECOC. Предупреждение указывает, что некоторые классы не представлены, в то время как программное обеспечение обучает по крайней мере один сгиб. Поэтому те сгибы не могут предсказать метки для недостающих классов. Можно осмотреть результаты индексации ячейки использования сгиба и записи через точку. Например, получите доступ к результатам первого сгиба путем ввода CVMdl.Trained{1}.

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

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

Воспроизведите сгруппированные данные

Воспроизведите сгруппированные данные о предикторе при помощи свойства BinEdges обученной модели и функции discretize.

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.

Введенный в R2014b