exponenta event banner

ClassificationPartitionedECOC

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

Описание

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

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

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

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

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

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

Создание

Можно создать 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 элементы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изменение функции преобразования баллов на 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

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

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 достаточно хорошо обобщается.

Обучение классификатора ECOC «один против всех» с помощью GentleBoost ансамбль деревьев решений с суррогатными расколами. Чтобы ускорить обучение, используйте числовые предикторы и параллельные вычисления. Binning допустим только тогда, когда fitcecoc использует учащегося дерева. После обучения оцените ошибку классификации, используя 10-кратную перекрестную проверку. Обратите внимание, что параллельные вычисления требуют 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.

Классификатор ECOC по принципу «один против всех»

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

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

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

Обучение классификатора ECOC «один против всех» с использованием ансамблей деревьев решений в качестве двоичных учеников. Для ускорения обучения используйте binning и параллельные вычисления.

  • Биннинг ('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