ClassificationPartitionedECOC

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

Описание

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

Каждый метод «kfold» использует модели, обученные на обучающих-складных (in-fold) наблюдениях, чтобы предсказать ответ для валидационных-складных (out-of-fold) наблюдений. Например, предположим, что вы перекрестно проверяете с помощью пяти складок. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение пяти группам равного размера (примерно). training fold содержит четыре группы (примерно 4/5 данных), а validation fold - другую группу (примерно 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).

    ЗначениеПрисвоение дихотомических классов
    –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

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

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

Cost(i,j) - стоимость классификации точки в класс j если его класс true 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'журнал (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

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

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 ансамбль деревьев решений с суррогатными сплитами. Чтобы ускорить обучение, числовые предикторы интервал и используйте параллельные вычисления. Раскладывание действительно только при 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.

Обучите классификатор один от всех ECOC

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

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

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

Обучите классификатор 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 значения NaNс.

Введенный в R2014b