crossval

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

Синтаксис

CVMdl = crossval(Mdl)
CVMdl = crossval(Mdl,Name,Value)

Описание

пример

CVMdl = crossval(Mdl) возвращает перекрестную подтвержденную (разделенную) модель выходных кодов с коррекцией ошибок (ECOC) мультикласса (CVMdl) в обученную модель ECOC (Mdl). По умолчанию crossval использует 10-кратную перекрестную проверку на данных тренировки, чтобы создать CVMdl, модель ClassificationPartitionedECOC.

пример

CVMdl = crossval(Mdl,Name,Value) возвращает разделенную модель 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 делает вывод довольно хорошо.

Рассмотрите набор данных arrhythmia. Этот набор данных содержит 16 классов, 13 из которых представлены в данных. Первый класс указывает, что предмет не имеет аритмии, и последний класс указывает, что состояние аритмии предмета не зарегистрировано. Другие классы являются порядковыми уровнями, указывающими на серьезность аритмии.

Обучите классификатор ECOC с пользовательским проектом кодирования, заданным описанием классов.

Загрузите набор данных arrhythmia. Преобразуйте Y в переменную categorical и определите количество классов.

load arrhythmia
Y = categorical(Y);
K = unique(Y); % Number of distinct classes

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

OrdMat = designecoc(11,'ordinal');
nOrdMat = size(OrdMat);
class1VSOrd = [1; -ones(11,1); 0];
class1VSClass16 = [1; zeros(11,1); -1];
OrdVSClass16 = [0; ones(11,1); -1];
Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...
    [zeros(1,nOrdMat(2)); OrdMat; zeros(1,nOrdMat(2))]];

Обучите классификатор ECOC с помощью пользовательского проекта кодирования (Coding) и параллельные вычисления. Укажите, что ансамбль 50 деревьев классификации повысил использование GentleBoost.

t = templateEnsemble('GentleBoost',50,'Tree');
options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding',Coding,'Learners',t,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

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

Перекрестный подтвердите Mdl с помощью 8-кратной перекрестной проверки и параллельных вычислений.

rng(1); % For reproducibility
CVMdl = crossval(Mdl,'Options',options,'KFold',8);
Warning: One or more folds do not contain points from all the groups.

Поскольку некоторые классы имеют низкую относительную частоту, некоторые сгибы не обучают наблюдения использования от тех классов. CVMdl является ClassificationPartitionedECOC перекрестная подтвержденная модель ECOC.

Оцените параллельные вычисления ошибки обобщения.

error = kfoldLoss(CVMdl,'Options',options)
error = 0.3208

Перекрестная подтвержденная ошибка классификации составляет 32%, который указывает, что эта модель не делает вывод хорошо. Чтобы улучшить модель, попробуйте обучение с помощью различного повышающего метода, такого как RobustBoost или различный алгоритм, такой как SVM.

Входные параметры

свернуть все

Полный, обученный мультикласс модель ECOC, заданная как модель ClassificationECOC, обученная с fitcecoc.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: crossval(Mdl,'KFold',3) задает использование трех сгибов в перекрестной подтвержденной модели.

Раздел перекрестной проверки, заданный как пара, разделенная запятой, состоящая из 'CVPartition' и объекта раздела cvpartition, создается cvpartition. Объект раздела задает тип перекрестной проверки и индексации для наборов обучения и валидации.

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold или Leaveout.

Пример: Предположим, что вы создаете случайный раздел для 5-кратной перекрестной проверки на 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестную подтвержденную модель при помощи 'CVPartition',cvp.

Часть данных используется для валидации затяжки, заданной как пара, разделенная запятой, состоящая из 'Holdout' и скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, то программное обеспечение завершает эти шаги:

  1. Случайным образом выберите и зарезервируйте % p*100 данных как данные о валидации и обучите модель с помощью остальной части данных.

  2. Сохраните компактную, обученную модель в свойстве Trained перекрестной подтвержденной модели.

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold или Leaveout.

Пример: 'Holdout',0.1

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

Количество сгибов, чтобы использовать в перекрестной подтвержденной модели, заданной как пара, разделенная запятой, состоящая из 'KFold' и положительного целочисленного значения, больше, чем 1. Если вы задаете 'KFold',k, то программное обеспечение завершает эти шаги:

  1. Случайным образом разделите данные в наборы k.

  2. Для каждого набора зарезервируйте набор как данные о валидации и обучите модель с помощью другого k – 1 набор.

  3. Сохраните k компактные, обученные модели в ячейках k-by-1 вектор ячейки в свойстве Trained перекрестной подтвержденной модели.

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold или Leaveout.

Пример: 'KFold',5

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

Флаг перекрестной проверки "Пропускает один", заданный как пара, разделенная запятой, состоящая из 'Leaveout' и 'on' или 'off'. Если вы задаете 'Leaveout','on', то, для каждого из наблюдений n (где n является количеством наблюдений, исключая недостающие наблюдения, заданные в свойстве NumObservations модели), программное обеспечение завершает эти шаги:

  1. Зарезервируйте наблюдение как данные о валидации и обучите модель с помощью другого n – 1 наблюдение.

  2. Сохраните n компактные, обученные модели в ячейках n-by-1 вектор ячейки в свойстве Trained перекрестной подтвержденной модели.

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold или Leaveout.

Пример: 'Leaveout','on'

Опции оценки, заданные как пара, разделенная запятой, состоящая из 'Options' и массива структур, возвращенного statset.

Вызвать параллельные вычисления:

  • Вам нужна лицензия Parallel Computing Toolbox™.

  • Задайте 'Options',statset('UseParallel',true).

Советы

  • Оцените прогнозирующую производительность Mdl на перекрестных подтвержденных данных с помощью "kfold" методов и свойств CVMdl, таких как kfoldLoss.

Альтернативная функциональность

Вместо обучения модель ECOC и затем перекрестная проверка его, можно создать перекрестную подтвержденную модель ECOC непосредственно при помощи fitcecoc и определения одного из этих аргументов пары "имя-значение": 'CrossVal', 'CVPartition', 'Holdout', 'Leaveout' или 'KFold'.

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

Введенный в R2014b