crossval

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

Описание

пример

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 - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Сохраните n компактные обученные модели в векторе камеры n-на-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