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- L матрица, где L является количеством бинарных учеников (size(CodingMatrix,2)).

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

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

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

Типы данных: 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 isempty). Можно получить матрицу кодирования для каждого сгиба при помощи 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 содержит NaNs, затем соответствующий Xbinned значениями является NaNs.

Введенный в R2014b