testckfold

Сравните точности двух классификационных моделей путем повторной перекрестной валидации

Описание

testckfold статистически оценивает точности двух классификационных моделей путем многократной перекрестной проверки двух моделей, определения различий в классификационных потерях и затем формулировки тестовой статистики путем объединения классификационных потерь. Этот тип испытания является особенно подходящим, когда размер образца ограничен.

Можно оценить, отличаются ли точности классификационных моделей или одна классификационная модель работает лучше другой. Доступные тесты включают тест парного t 5 на 2, тест парного F 5 на 2 и повторный тест перекрестного t валидации 10 на 10. Для получения дополнительной информации см. «Повторные тесты перекрестной валидации». Чтобы ускорить расчеты, testckfold поддерживает параллельные вычисления (требует лицензии Parallel Computing Toolbox™).

пример

h = testckfold(C1,C2,X1,X2) возвращает решение теста, которое является результатом проведения парного F кросс-валидационного теста 5 на 2. Нулевая гипотеза является классификационными моделями C1 и C2 имеют равную точность в прогнозировании меток истинных классов с помощью предиктора и данных отклика в таблицах X1 и X2. h = 1 указывает на отклонение нулевой гипотезы на уровне 5% значимости.

testckfold проводит тест перекрестной валидации путем применения C1 и C2 ко всем переменным предиктора в X1 и X2, соответственно. Истинные метки классов в X1 и X2 должно быть то же самое. Имена переменных отклика в X1, X2, C1.ResponseName, и C2.ResponseName должно быть то же самое.

Для примеров способов сравнения моделей смотрите Советы.

пример

h = testckfold(C1,C2,X1,X2,Y) применяет полную классификационную модель или классификационные шаблоны C1 и C2 ко всем переменным предиктора в таблицах или матрицах данных X1 и X2, соответственно. Y - имя табличной переменной, соответствующее меткам истинного класса или массиву меток истинного класса.

пример

h = testckfold(___,Name,Value) использует любой из входных параметров в предыдущих синтаксисах и дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Для примера можно задать тип альтернативной гипотезы, тип теста или использование параллельных вычислений.

пример

[h,p,e1,e2] = testckfold(___) также возвращает p -value для теста гипотезы (p) и соответствующие классификационные потери для каждого прогона перекрестной валидации и складки (e1 и e2).

Примеры

свернуть все

В каждом узле fitctree выбирает лучший предиктор для разделения с помощью исчерпывающего поиска по умолчанию. Кроме того, можно принять решение разделить предиктор, который показывает большинство доказательств зависимости с ответом, проводя тесты кривизны. Этот пример статистически сравнивает классификационные деревья, выращенные посредством исчерпывающего поиска лучших расщеплений и выращенные путем проведения тестов кривизны с взаимодействием.

Загрузите census1994 набор данных.

load census1994.mat
rng(1) % For reproducibility

Создайте дерево классификации по умолчанию с помощью набора обучающих данных, adultdata, который является таблицей. Имя переменной response- 'salary'.

C1 = fitctree(adultdata,'salary')
C1 = 
  ClassificationTree
           PredictorNames: {1x14 cell}
             ResponseName: 'salary'
    CategoricalPredictors: [2 4 6 7 8 9 10 14]
               ClassNames: [<=50K    >50K]
           ScoreTransform: 'none'
          NumObservations: 32561


  Properties, Methods

C1 является полным ClassificationTree модель. Его ResponseName свойство 'salary'. C1 использует исчерпывающий поиск, чтобы найти лучший предиктор для разделения на на основе максимального деления усиления.

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

C2 = fitctree(adultdata,'salary','PredictorSelection','interaction-curvature')
C2 = 
  ClassificationTree
           PredictorNames: {1x14 cell}
             ResponseName: 'salary'
    CategoricalPredictors: [2 4 6 7 8 9 10 14]
               ClassNames: [<=50K    >50K]
           ScoreTransform: 'none'
          NumObservations: 32561


  Properties, Methods

C2 также является полным ClassificationTree модель с ResponseName равно 'salary'.

Проведите парный тест F 5 на 2, чтобы сравнить точности двух моделей, использующих набор обучающих данных. Потому что имена переменных отклика в наборах данных и ResponseName свойства все равны, и данные отклика в обоих наборах равны, можно исключить предоставление данных отклика.

h = testckfold(C1,C2,adultdata,adultdata)
h = logical
   0

h = 0 указывает, что не отвергать нулевую гипотезу, которая C1 и C2 имеют одинаковые точности на уровне 5%.

Проведите статистический тест, сравнивая скорости неправильной классификации двух моделей, используя парный тест F 5 на 2.

Загрузите набор данных радужки Фишера.

load fisheriris;

Создайте наивный шаблон Байеса и шаблон дерева классификации с помощью опций по умолчанию.

C1 = templateNaiveBayes;
C2 = templateTree;

C1 и C2 являются объектами шаблона, соответствующими наивным алгоритмам Байеса и классификационного дерева, соответственно.

Проверьте, имеют ли две модели равные прогнозирующие точности. Используйте одни и те же данные предиктора для каждой модели. testckfold по умолчанию проводит двухсторонний парный тест F 5 на 2.

rng(1); % For reproducibility
h = testckfold(C1,C2,meas,meas,species)
h = logical
   0

h = 0 указывает, что не отвергать нулевую гипотезу о том, что две модели имеют равные прогнозирующие точности.

Проведите статистический тест, чтобы оценить, имеет ли более простая модель лучшую точность, чем более сложная модель, используя повторный тест перекрестной валидации t 10 на 10.

Загрузите набор данных радужки Фишера. Создайте матрицу затрат, которая штрафует за неправильную классификацию ириса сетозы в два раза больше, чем за неправильную классификацию ириса виргиники, чем версиколор.

load fisheriris;
tabulate(species)
       Value    Count   Percent
      setosa       50     33.33%
  versicolor       50     33.33%
   virginica       50     33.33%
Cost = [0 2 2;2 0 1;2 1 0];
ClassNames  = {'setosa' 'versicolor' 'virginica'};...
    % Specifies the order of the rows and columns in Cost

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

Создайте два шаблона ECOC: один, который использует линейных двоичных учащихся SVM, и один, который использует двоичных учащихся SVM, оснащенных ядром RBF.

tSVMLinear = templateSVM('Standardize',true); % Linear SVM by default
tSVMRBF = templateSVM('KernelFunction','RBF','Standardize',true);
C1 = templateECOC('Learners',tSVMLinear);
C2 = templateECOC('Learners',tSVMRBF);

C1 и C2 являются объектами шаблона ECOC. C1 подготовлен для линейного SVM. C2 подготовлен для SVM с обучением ядра RBF.

Протестируйте нулевую гипотезу о том, что более простая модель (C1) не более точна, чем более сложная модель (C2) с точки зрения классификационных затрат. Выполните повторный тест перекрестной валидации 10 на 10. Запрос на возврат значений p и затрат на неправильную классификацию.

rng(1); % For reproducibility
[h,p,e1,e2] = testckfold(C1,C2,meas,meas,species,...
    'Alternative','greater','Test','10x10t','Cost',Cost,...
    'ClassNames',ClassNames)
h = logical
   0

p = 0.1077
e1 = 10×10

         0         0         0    0.0667         0    0.0667    0.1333         0    0.1333         0
    0.0667    0.0667         0         0         0         0    0.0667         0    0.0667    0.0667
         0         0         0         0         0    0.0667    0.0667    0.0667    0.0667    0.0667
    0.0667    0.0667         0    0.0667         0    0.0667         0         0    0.0667         0
    0.0667    0.0667    0.0667         0    0.0667    0.0667         0         0         0         0
         0         0    0.1333         0         0    0.0667         0         0    0.0667    0.0667
    0.0667    0.0667         0         0    0.0667         0         0    0.0667         0    0.0667
    0.0667         0    0.0667    0.0667         0    0.1333         0    0.0667         0         0
         0    0.0667    0.1333    0.0667    0.0667         0         0         0         0         0
         0    0.0667    0.0667    0.0667    0.0667         0         0    0.0667         0         0

e2 = 10×10

         0         0         0    0.1333         0    0.0667    0.1333         0    0.2667         0
    0.0667    0.0667         0    0.1333         0         0         0    0.1333    0.1333    0.0667
    0.1333    0.1333         0         0         0    0.0667         0    0.0667    0.0667    0.0667
         0    0.1333         0    0.0667    0.1333    0.1333         0         0    0.0667         0
    0.0667    0.0667    0.0667         0    0.0667    0.1333    0.1333         0         0    0.0667
    0.0667         0    0.0667    0.0667         0    0.0667    0.1333         0    0.0667    0.0667
    0.2000    0.0667         0         0    0.0667         0         0    0.1333         0    0.0667
    0.2000         0         0    0.1333         0    0.1333         0    0.0667         0         0
         0    0.0667    0.0667    0.0667    0.1333         0    0.2000         0         0         0
    0.0667    0.0667         0    0.0667    0.1333         0         0    0.0667    0.1333    0.0667

P-значение немного больше 0,10, что указывает на сохранение нулевой гипотезы о том, что более простая модель является максимально такой же точной, как и более сложная модель. Этот результат согласован для любого уровня значимости (Alpha), что самое большее 0,10.

e1 и e2 представляют собой матрицы 10 на 10, содержащие затраты на неправильную классификацию. Строка r соответствует выполнению r повторной перекрестной валидации. Столбец k соответствует набору тестов fold k в рамках определенного запуска перекрестной валидации. Для примера, элемент (2,4) e2 составляет 0,1333. Это значение означает, что при прогоне перекрестной валидации 2, когда тестовый набор складывается 4, предполагаемая стоимость неправильной классификации тестового набора составляет 0,1333.

Уменьшите сложность классификационной модели путем выбора подмножества предикторов переменных (функций) из большего множества. Затем статистически сравните точность между двумя моделями.

Загрузите ionosphere набор данных.

load ionosphere

Обучите ансамбль из 100 ускоренных классификационных деревьев, используя AdaBoostM1 и весь набор предикторов. Смотрите меру важности для каждого предиктора.

t = templateTree('MaxNumSplits',1); % Weak-learner template tree object
C = fitcensemble(X,Y,'Method','AdaBoostM1','Learners',t);
predImp = predictorImportance(C);

bar(predImp)
h = gca;
h.XTick = 1:2:h.XLim(2);
title('Predictor Importances')
xlabel('Predictor')
ylabel('Importance measure')

Определите пять основных предикторов с точки зрения их важности.

[~,idxSort] = sort(predImp,'descend');
idx5 = idxSort(1:5);

Проверьте, имеют ли две модели равные прогнозирующие точности. Задайте сокращенный набор данных, а затем полные данные предиктора. Используйте параллельные вычисления для ускорения расчетов.

s = RandStream('mlfg6331_64');
Options = statset('UseParallel',true,'Streams',s,'UseSubstreams',true);

[h,p,e1,e2] = testckfold(C,C,X(:,idx5),X,Y,'Options',Options)
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
h = logical
   0

p = 0.4161
e1 = 5×2

    0.0686    0.0795
    0.0800    0.0625
    0.0914    0.0568
    0.0400    0.0739
    0.0914    0.0966

e2 = 5×2

    0.0914    0.0625
    0.1257    0.0682
    0.0971    0.0625
    0.0800    0.0909
    0.0914    0.1193

testckfold рассматривает обученные модели классификации как шаблоны, и поэтому игнорирует все подобранные параметры в C. То есть testckfold перекрестные проверки C использование только заданных опций и данных предиктора для оценки несовпадающих классификационных потерь.

h = 0 указывает, что не отвергать нулевую гипотезу о том, что две модели имеют равные прогнозирующие точности. Этот результат благоприятствует более простому ансамблю.

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

свернуть все

Шаблон классификационной модели или обученная классификационная модель, заданная как любой объект шаблона классификационной модели или обученный объект классификационной модели, описанный в этих таблицах.

Тип шаблонаВозвращено
Классификационное деревоtemplateTree
Дискриминантный анализtemplateDiscriminant
Ансамбль (увеличение, упаковка в мешки и случайное подпространство)templateEnsemble
Корректирующие ошибки выходные коды (ECOC), многоклассовая модель классификацииtemplateECOC
k NNtemplateKNN
Наивный БайесtemplateNaiveBayes
Машина опорных векторов (SVM)templateSVM
Обученный тип моделиОбъект моделиВозвращено
Классификационное деревоClassificationTreefitctree
Дискриминантный анализClassificationDiscriminantfitcdiscr
Ансамбль упакованных классификационных моделейClassificationBaggedEnsemblefitcensemble
Ансамбль классификационных моделейClassificationEnsemblefitcensemble
Модель ECOCClassificationECOCfitcecoc
Обобщенная аддитивная модель (GAM)ClassificationGAMfitcgam
k NNClassificationKNNfitcknn
Наивный БайесClassificationNaiveBayesfitcnb
Нейронная сетьClassificationNeuralNetwork (с наблюдениями в строках)fitcnet
SVMClassificationSVMfitcsvm

Для эффективности укажите объект шаблона классификационной модели вместо обученного объекта классификационной модели.

Шаблон классификационной модели или обученная классификационная модель, заданная как любой объект шаблона классификационной модели или обученный объект классификационной модели, описанный в этих таблицах.

Тип шаблонаВозвращено
Классификационное деревоtemplateTree
Дискриминантный анализtemplateDiscriminant
Ансамбль (увеличение, упаковка в мешки и случайное подпространство)templateEnsemble
Корректирующие ошибки выходные коды (ECOC), многоклассовая модель классификацииtemplateECOC
k NNtemplateKNN
Наивный БайесtemplateNaiveBayes
Машина опорных векторов (SVM)templateSVM
Обученный тип моделиОбъект моделиВозвращено
Классификационное деревоClassificationTreefitctree
Дискриминантный анализClassificationDiscriminantfitcdiscr
Ансамбль упакованных классификационных моделейClassificationBaggedEnsemblefitcensemble
Ансамбль классификационных моделейClassificationEnsemblefitcensemble
Модель ECOCClassificationECOCfitcecoc
Обобщенная аддитивная модель (GAM)ClassificationGAMfitcgam
k NNClassificationKNNfitcknn
Наивный БайесClassificationNaiveBayesfitcnb
Нейронная сетьClassificationNeuralNetwork (с наблюдениями в строках)fitcnet
SVMClassificationSVMfitcsvm

Для эффективности укажите объект шаблона классификационной модели вместо обученного объекта классификационной модели.

Данные, используемые для применения к первой полной классификационной модели или шаблону, C1, заданный как числовая матрица или таблица.

Каждая строка X1 соответствует одному наблюдению, и каждый столбец соответствует одной переменной. testckfold не поддерживает многополюсные переменные и массивы ячеек, кроме массивов ячеек векторов символов.

X1 и X2 должны быть одного типа данных и X1, X2, Y должно иметь одинаковое количество наблюдений.

Если вы задаете Y как массив, тогда testckfold обрабатывает все столбцы X1 как отдельные переменные предиктора.

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

Данные, используемые для применения ко второй полной классификационной модели или шаблона, C2, заданный как числовая матрица или таблица.

Каждая строка X2 соответствует одному наблюдению, и каждый столбец соответствует одной переменной. testckfold не поддерживает многополюсные переменные и массивы ячеек, кроме массивов ячеек векторов символов.

X1 и X2 должны быть одного типа данных и X1, X2, Y должно иметь одинаковое количество наблюдений.

Если вы задаете Y как массив, тогда testckfold обрабатывает все столбцы X2 как отдельные переменные предиктора.

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

Метки класса True, заданные как категориальный, символьный или строковый массив, логический или числовой вектор, массив ячеек из символьных векторов или символьный вектор или строковый скаляр.

  • Для вектора символов или строкового скаляра, X1 и X2 должны быть таблицами, их переменные отклика должны иметь то же имя и значения, и Y должно быть общим именем переменной. Для примера, если X1.Labels и X2.Labels являются переменными отклика, тогда Y является 'Labels' и X1.Labels и X2.Labels должен быть эквивалентным.

  • Для всех других поддерживаемых типов данных Y - массив меток истинных классов.

    • Если Y является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

    • X1, X2, Y должно иметь одинаковое количество наблюдений (строк).

  • Если оба этих операторов верны, можно опускать поставляющие Y.

    • X1 и X2 являются таблицами, содержащими ту же переменную отклика (значения и имя).

    • C1 и C2 являются полными классификационными моделями, содержащими ResponseName свойства, задающие имена переменных отклика в X1 и X2.

    Следовательно, testckfold использует общую переменную отклика в таблицах. Например, если переменные отклика в таблицах X1.Labels и X2.Labels, и значения C1.ResponseName и C2.ResponseName являются 'Labels', тогда вы не должны поставлять Y.

Типы данных: categorical | char | string | logical | single | double | cell

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

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

Пример: 'Alternative','greater','Test','10x10t','Options',statsset('UseParallel',true) определяет, чтобы проверить, является ли первый набор первых предсказанных меток классов более точным, чем второй набор, провести тест 10 на 10 t и использовать параллельные вычисления для перекрестной валидации.

Уровень значимости теста гипотезы, заданный как разделенная разделенными запятой парами, состоящая из 'Alpha' и скалярное значение в интервале (0,1).

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

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

Альтернативная гипотеза для оценки, заданная как разделенная разделенными запятой парами, состоящая из 'Alternative' и одно из значений, перечисленных в таблице.

ЗначениеОписание альтернативной гипотезыПоддерживаемые тесты
'unequal' (по умолчанию)Для предсказания Y, набор предсказаний, полученных из C1 применяется к X1 и C2 применяется к X2 имеют неравные точности.'5x2F', '5x2t', и '10x10t'
'greater'Для предсказания Y, набор предсказаний, полученных из C1 применяется к X1 точнее, чем C2 применяется к X2. '5x2t' и '10x10t'
'less'Для предсказания Y, набор предсказаний, полученных из C1 применяется к X1 менее точен, чем C2 применяется к X2.'5x2t' и '10x10t'

Для получения дополнительной информации о поддерживаемых тестах см. Test.

Пример: 'Alternative','greater'

Флаг, идентифицирующий категориальные предикторы в данных первого предиктора набора тестов (X1), заданная как разделенная разделенными запятой парами, состоящая из 'X1CategoricalPredictors' и одно из следующих:

  • Числовой вектор с индексами от 1 через p, где p - количество столбцов в X1.

  • Логический вектор длины p, где a true запись означает, что соответствующий столбец X1 является категориальной переменной.

  • 'all', что означает, что все предикторы категоричны.

Спецификация X1CategoricalPredictors подходит, если:

  • По крайней мере, один предиктор категориален и C1 - классификационное дерево, ансамбль классификационных деревьев, модель ECOC или наивная классификационная модель Байеса.

  • Все предикторы категоричны и C1 является k классификационной моделью NN.

Если вы задаете X1CategoricalPredictors для любого другого случая, тогда testckfold выдает ошибку. Для примера функция не может обучать учащихся SVM с помощью категориальных предикторов.

Значение по умолчанию является [], что указывает на отсутствие категориальных предикторов.

Пример: 'X1CategoricalPredictors','all'

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

Флаг, идентифицирующий категориальные предикторы во вторых данных предиктора набора тестов (X2), заданная как разделенная разделенными запятой парами, состоящая из 'X2CategoricalPredictors' и одно из следующих:

  • Числовой вектор с индексами от 1 через p, где p - количество столбцов в X2.

  • Логический вектор длины p, где a true запись означает, что соответствующий столбец X2 является категориальной переменной.

  • 'all', что означает, что все предикторы категоричны.

Спецификация X2CategoricalPredictors подходит, если:

  • По крайней мере, один предиктор категориален и C2 - классификационное дерево, ансамбль классификационных деревьев, модель ECOC или наивная классификационная модель Байеса.

  • Все предикторы категоричны и C2 является k классификационной моделью NN.

Если вы задаете X2CategoricalPredictors для любого другого случая, тогда testckfold выдает ошибку. Для примера функция не может обучать учащихся SVM с помощью категориальных предикторов.

Значение по умолчанию является [], что указывает на отсутствие категориальных предикторов.

Пример: 'X2CategoricalPredictors','all'

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

Имена классов, заданные как разделенная разделенными запятой парами, состоящая из 'ClassNames' и категориальные символьные или строковые массивы, логический или числовой вектор или массив ячеек из векторов символов. Вы должны задать ClassNames использование типа данных Y.

Если ClassNames является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

Использование ClassNames кому:

  • Задайте порядок любой размерности входного параметра, которая соответствует порядку классов. Для примера используйте ClassNames для определения порядка размерностей Cost.

  • Выберите подмножество классов для проверки. Например, предположим, что набор всех различных имен классов в Y является {'a','b','c'}. Для обучения и экспериментальных моделей с использованием наблюдений из классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

По умолчанию это набор всех различных имен классов в Y.

Пример: 'ClassNames',{'b','g'}

Типы данных: single | double | logical | char | string | cell | categorical

Классификационные затраты, заданные как разделенная разделенными запятой парами, состоящая из 'Cost' и квадратную матрицу или массив структур.

  • Если вы задаете квадратную матрицу Cost, затем Cost(i,j) - стоимость классификации точки в класс j если его класс true i. То есть строки соответствуют истинному классу, а столбцы - предсказанному классу. Чтобы задать порядок классов для соответствующих строк и столбцов Cost, дополнительно задайте ClassNames аргумент пары "имя-значение".

  • Если вы задаете структуру S, затем S должны иметь два поля:

    • S.ClassNames, который содержит имена классов как переменный совпадающий тип данных as Y. Это поле используется для определения порядка классов.

    • S.ClassificationCosts, которая содержит матрицу затрат с строками и столбцами, упорядоченными как в S.ClassNames

Для экономичного использования проверки, testcholdout.

Лучшая практика - предоставить ту же матрицу затрат, которая используется для обучения классификационных моделей.

Значение по умолчанию является Cost(i,j) = 1 если i ~= j, и Cost(i,j) = 0 если i = j.

Пример: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

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

Функция потерь, заданная как разделенная разделенными запятой парами, состоящая из 'LossFun' и 'classiferror', 'binodeviance', 'exponential', 'hinge', или указатель на функцию.

  • В следующей таблице перечислены доступные функции потерь.

    ЗначениеФункция потерь
    'binodeviance'Биномиальное отклонение
    'classiferror'Ошибка классификации
    'exponential'Экспоненциальные потери
    'hinge'Потеря шарнира

  • Задайте свою собственную функцию, используя обозначение указателя на функцию.

    Предположим, что n = size(X,1) размер выборки и есть K уникальные классы. Ваша функция должна иметь сигнатуру lossvalue = lossfun(C, S, W, стоимость), где:

    • Выходной аргумент lossvalue является скаляром.

    • lossfun - имя вашей функции.

    • C является n-by- K логическая матрица со строками, указывающими, к какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в ClassNames аргумент пары "имя-значение".

      Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в q классов, для каждой строки. Установите все другие элементы строки p на 0.

    • S является n-by- K числовая матрица классификационных оценок. Порядок столбцов соответствует порядку классов в ClassNames аргумент пары "имя-значение". S является матрицей классификационных оценок.

    • W является n-by-1 числовой вектор весов наблюдений. Если вы сдаете W, программное обеспечение нормализует веса, чтобы сумма 1.

    • Cost является K-by- K числовая матрица классификационных затрат. Для примера, Cost = ones(K) - eye(K) задает стоимость 0 для правильной классификации и стоимости 1 для неправильной классификации.

    Задайте свою функцию, используя 'LossFun', @ lossfun.

Опции параллельных вычислений, заданные как разделенная разделенными запятой парами, состоящая из 'Options' и массив структур, возвращенный statset. Эти опции требуют Parallel Computing Toolbox. testckfold использует 'Streams', 'UseParallel', и 'UseSubtreams' поля.

В этой таблице представлены доступные опции.

ОпцияОписание
'Streams'

A RandStream объект или массив ячеек таких объектов. Если вы не задаете Streamsпрограммное обеспечение использует поток по умолчанию или потоки. Если вы задаете Streams, используйте один объект, за исключением тех случаев, когда следующее имеет значение true:

  • У вас открытый параллельный пул.

  • UseParallel является true.

  • UseSubstreams является false.

В этом случае используйте массив ячеек того же размера, что и параллельный пул. Если параллельный пул не открыт, то программное обеспечение пытается открыть его (в зависимости от ваших настроек), и Streams должен предоставить один поток случайных чисел.

'UseParallel'Если у вас есть Parallel Computing Toolbox, то можно вызвать пул работников, установив 'UseParallel',true.
'UseSubstreams'Установите значение true для параллельного вычисления с использованием потока, заданного как 'Streams'. По умолчанию это false. Для примера задайте Streams к типу, допускающему субпотоки, такому как 'mlfg6331_64' или 'mrg32k3a'.

Пример: 'Options',statset('UseParallel',true)

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

Предыдущие вероятности для каждого класса, заданные как разделенная разделенными запятой парами, состоящая из 'Prior' и 'empirical', 'uniform', числовой вектор или структура.

В этой таблице результирующие опции для настройки предыдущих вероятностей.

ЗначениеОписание
'empirical'Предшествующие вероятности классов являются относительными частотами классов в Y.
'uniform'Все предыдущие вероятности классов равны 1/ K, где K - количество классов.
числовой векторКаждый элемент является классом предыдущей вероятности. Определите порядок с помощью ClassNames аргумент пары "имя-значение". Программное обеспечение нормализует элементы так, что они суммируются с 1.
структура

Структурный S с двумя полями:

  • S.ClassNames содержит имена классов как переменная того же типа, что и Y.

  • S.ClassProbs содержит вектор соответствующих априорных вероятностей. Программное обеспечение нормализует элементы так, что они суммируются с 1.

Пример: 'Prior',struct('ClassNames',{{'setosa','versicolor'}},'ClassProbs',[1,2])

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

Тест для проведения, заданный как разделенная разделенными запятой парами, состоящая из 'Test' и один из них: '5x2F', '5x2t', '10x10t'.

ЗначениеОписаниеПоддерживаемая альтернативная гипотеза
'5x2F' (по умолчанию)Тест парного F 5 на 2. Подходит только для двусторонней проверки.'unequal'
'5x2t'Тест парного t 5 на 2'unequal', 'less', 'greater'
'10x10t'Повторный тест t перекрестной валидации 10 на 10'unequal', 'less', 'greater'

Для получения дополнительной информации о доступных тестах см. «Повторные тесты перекрестной валидации». Для получения дополнительной информации о поддерживаемых альтернативных гипотезах смотрите Alternative.

Пример: 'Test','10x10t'

Уровень подробностей, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose' и 0, 1, или 2. Verbose управляет объемом диагностической информации, которую программное обеспечение отображает в Командном окне во время обучения каждой складки перекрестной валидации.

В этой таблице представлены доступные опции уровня подробностей.

ЗначениеОписание
0Программа не отображает диагностическую информацию.
1Программа отображает диагностические сообщения каждый раз, когда она реализует новый запуск перекрестной валидации.
2Программа отображает диагностические сообщения каждый раз, когда она реализует новый запуск перекрестной валидации и каждый раз, когда она обучается по определенной складке.

Пример: 'Verbose',1

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

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор.

Размер Weights должно равняться количеству строк X1. Программа взвешивает наблюдения в каждой строке X с соответствующим весом в Weights.

Программное обеспечение нормализует Weights суммировать до значения предшествующей вероятности в соответствующем классе.

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

Примечания:

  • testckfold рассматривает обученные классификационные модели как шаблоны. Поэтому он игнорирует все подобранные параметры в модели. То есть, testckfold перекрестная проверка с использованием только опций, заданных в модели и данных предиктора.

  • Повторные тесты перекрестной валидации зависят от предположения, что статистика тестов асимптотически нормальна при нулевой гипотезе. Высоко несбалансированные матрицы затрат (для примера, Cost = [0 100;1 0]) и высоко дискретные распределения отклика (то есть большинство наблюдений находятся в небольшом числе классов) могут нарушить асимптотическое предположение нормальности. Для экономичной проверки используйте testcholdout.

  • NaNs, <undefined> значения, пустые символьные векторы (''), пустые строки (""), и <missing> значения указывают на отсутствующие значения данных.

    • Для лечения отсутствующих значений в X1 и X2, см. соответствующую страницу с описанием функции обучения классификационной модели: fitctree, fitcdiscr, fitcensemble, fitcecoc, fitcgam, fitcknn, fitcnb, или fitcsvm.

    • testckfold удаляет отсутствующие значения в Y и соответствующие строки X1 и X2.

Выходные аргументы

свернуть все

Результат теста гипотезы, возвращенный как логическое значение.

h = 1 указывает на отказ от нулевой гипотезы в Alpha уровень значимости.

h = 0 указывает, что не удалось отклонить нулевую гипотезу в Alpha уровень значимости.

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

p значение теста, возвращенное в виде скаляра в интервале [0,1]. p - вероятность того, что статистическая величина случайного теста, по крайней мере, так же экстремальна, как и статистическая величина наблюдаемого теста, учитывая, что гипотеза null верна.

testckfold оценки p использование распределения тестовой статистики, которое изменяется в зависимости от типа теста. Для получения дополнительной информации о статистике тестов см. Раздел «Повторные тесты перекрестной валидации».

Классификационные потери, возвращенные как числовая матрица. Строки e1 соответствует запуску перекрестной проверки, и столбцы соответствуют тестовой складке.

testckfold применяет первые данные предиктора набора тестов (X1) к первой классификационной модели (C1) для оценки первого набора меток классов.

e1 суммирует точность первого набора меток классов, предсказывающих истинные метки классов (Y) для каждого прогона перекрестной валидации и складки. Смысл элементов e1 зависит от типа классификационных потерь.

Классификационные потери, возвращенные как числовая матрица. Строки e2 соответствует запуску перекрестной проверки, и столбцы соответствуют тестовой складке.

testckfold применяет вторые данные предиктора набора тестов (X2) ко второй классификационной модели (C2) для оценки второго набора меток классов.

e2 суммирует точность второго набора меток классов, предсказывающих истинные метки классов (Y) для каждого прогона перекрестной валидации и складки. Смысл элементов e2 зависит от типа классификационных потерь.

Подробнее о

свернуть все

Повторные тесты перекрестной валидации

Repeated cross-validation tests формируйте тестовую статистику для сравнения точностей двух классификационных моделей путем объединения различий классификационных потерь в результате многократной перекрестной проверки данных. Повторные тесты перекрестной валидации применяются, когда размер выборки ограничен.

Чтобы провести тест R -by K:

  1. Случайным образом разделите (стратифицированный по классам) наборы данных предиктора и истинные метки класса на K набора, R раза. Каждое деление называется run, и каждый аппарат в запуске называется fold. Каждый запуск содержит полные, но разделенные наборы данных.

  2. Для запусков r = 1 до R повторите эти шаги для k = 1 до K:

    1. Резервируйте k складки как тестовый набор и обучите две модели классификации, используя их соответствующие наборы данных предиктора на остальных K - 1 складках.

    2. Спрогнозируйте метки классов, используя обученные модели и их соответствующие наборы данных k предиктора.

    3. Оцените классификационные потери путем сравнения двух наборов предполагаемых меток с истинными метками. Обозначить ecrk как классификационные потери, когда тестовый набор складывается k в r прогона классификационной модели c.

    4. Вычислите различие между классификационными потерями двух моделей:

      δ^rk=e1rke2rk.

    В конце запуска существует K классификационных потерь на классификационную модель.

  3. Объедините результаты шага 2. Для каждого r = 1 - R:

    • Оцените внутри-кратные средние значения различий и их среднее: δ¯r=1Kk=1Kδ^kr.

    • Оцените общее среднее значение различий: δ¯=1KRr=1Rk=1Kδ^rk.

    • Оцените внутри-кратные отклонения различий: sr2=1Kk=1K(δ^rkδ¯r)2.

    • Оцените среднее значение внутри-кратных различий: s¯2=1Rr=1Rsr2.

    • Оцените общее отклонение выборки различий: S2=1KR1r=1Rk=1K(δ^rkδ¯)2.

    Вычислите тестовую статистику. Все описанные здесь поддерживаемые тесты предполагают, что при H 0 предполагаемые различия независимы и примерно нормально распределены со средним 0 и конечным общим стандартным отклонением. Однако эти тесты нарушают предположение независимости, и поэтому тестово-статистические распределения являются приблизительными.

    • Для R = 2 тест является парным тестом. Два поддерживаемых теста являются парным t и F тестом.

      • Тестовая статистика для парного теста t:

        tpaired=δ^11s¯2.

        tpaired имеет t -распределение с R степенями свободы при нулевой гипотезе.

        Чтобы уменьшить эффекты корреляции между предполагаемыми различиями, количеством δ^11 занимает числитель, а не δ¯.

        Тесты парного t 5 на 2 могут быть слегка консервативными [4].

      • Тестовая статистика для парного теста F:

        Fpaired=1RKr=1Rk=1K(δ^rk)2s¯2.

        Fpaired имеет F распределение с RK и R степенями свободы.

        Парный тест F 5 на 2 имеет сопоставимую степень с тестом t 5 на 2, но является более консервативным [1].

    • Для R > 2 тест является повторным тестом перекрестной валидации. Тестовая статистика

      tCV=δ¯S/ν+1.

      tCV имеет t распределение с ν степенями свободы. Если различия были действительно независимыми, то ν = RK - 1. В этом случае параметр степеней свободы должен быть оптимизирован.

      Для повторного теста t перекрестной валидации 10 на 10 оптимальные степени свободы между 8 и 11 ([2] и [3]). testckfold использует ν = 10.

Преимущество повторных тестов перекрестной валидации по сравнению с парными тестами в том, что результаты более повторяемы [3]. Недостатком является то, что они требуют высоких вычислительных ресурсов.

Классификационные потери

Classification losses указать точность классификационной модели или набора предсказанных меток. В целом для матрицы фиксированных затрат точность классификации уменьшается по мере увеличения классификационных потерь.

testckfold возвращает классификационные потери (см. e1 и e2) по альтернативной гипотезе (то есть неограниченные классификационные потери). В следующих определениях:

  • Классификационные потери сосредоточены на первой классификационной модели. Классификационные потери для второй модели аналогичны.

  • ntest - размер выборки из тестового набора.

  • I (x) является функцией индикации. Если x является истинным оператором, то I (x) = 1. В противном случае I (x) = 0.

  • p^1j - предсказанное присвоение классов классификационной модели 1 для j наблюдений.

  • yj является истинной меткой класса j наблюдений.

  • Binomial deviance имеет форму

    e1=j=1ntestwjlog(1+exp(2yjf(Xj)))j=1ntestwj

    где:

    • yj = 1 для положительного класса и -1 для отрицательного класса.

    • f(Xj) - классификационная оценка.

    Биномиальное отклонение имеет связи с максимизацией биномиальной функции правдоподобия. Для получения дополнительной информации о биномиальном отклонении смотрите [5].

  • Exponential loss подобен биномиальному отклонению и имеет форму

    e1=j=1ntestwjexp(yjf(Xj))j=1ntestwj.

    yj и f(Xj) принимают здесь те же формы, что и в формуле биномиального отклонения.

  • Hinge loss имеет форму

    e1=j=1nwjmax{0,1yjf(Xj)}j=1nwj,

    yj и f(Xj) принимают здесь те же формы, что и в формуле биномиального отклонения.

    Потеря шарнира линейно наказывается за неправильно классифицированные наблюдения и связана с целевой функцией SVM, используемой для оптимизации. Для получения дополнительной информации о потере шарнира см. [5].

  • Misclassification rate, или классификационная ошибка, является скаляром в интервале [0,1], представляющим долю неправильно классифицированных наблюдений. То есть, скорость неправильной классификации для первой классификационной модели,

    e1=j=1ntestwjI(p^1jyj)j=1ntestwj.

Совет

  • Примеры способов сравнения моделей включают:

    • Сравните точности простой классификационной модели и более сложной модели путем передачи одного и того же набора данных предиктора.

    • Сравните точности двух разных моделей, используя два разных набора предикторов.

    • Выполните различные типы выбора признаков. Например, можно сравнить точность модели, обученной с помощью набора предикторов, с точностью одной, обученной на подмножестве или другом наборе предикторов. Можно произвольно выбрать набор предикторов или использовать такой метод выбора признаков, как PCA или последовательный выбор признаков (см. pca и sequentialfs).

  • Если оба этих операторов верны, можно опускать поставляющие Y.

    • X1 и X2 являются таблицами, содержащими переменную отклика, и используют то же имя переменной отклика.

    • C1 и C2 являются полными классификационными моделями, содержащими равные ResponseName свойства (например strcmp(C1.ResponseName,C2.ResponseName) = 1).

    Следовательно, testckfold использует общую переменную отклика в таблицах.

  • Один из способов выполнить нечувствительный к затратам выбор признаков:

    1. Создайте шаблон классификационной модели, который характеризует первую классификационную модель (C1).

    2. Создайте шаблон классификационной модели, который характеризует вторую классификационную модель (C2).

    3. Задайте два набора данных предиктора. Для примера задайте X1 как полный набор предикторов и X2 как редуцированный набор.

    4. Введите testckfold(C1,C2,X1,X2,Y,'Alternative','less'). Если testckfold возвращает 1затем существует достаточно доказательств, чтобы предположить, что классификационная модель, которая использует меньше предикторов, работает лучше, чем модель, которая использует полный набор предикторов.

    Кроме того, можно оценить, существует ли значительное различие между точностями двух моделей. Чтобы выполнить эту оценку, удалите 'Alternative','less' спецификация на шаге 4.testckfold проводит двусторонний тест и h = 0 указывает, что недостаточно доказательств, чтобы предположить различие в точности двух моделей.

  • Тесты подходят для классификации классификации потерь по классификации, но можно задать другие функции потерь (см LossFun). Ключевые допущения заключаются в том, что предполагаемые классификационные потери являются независимыми и обычно распределяются со средней 0 и конечным общим отклонением при двусторонней нулевой гипотезе. Классификационные потери, отличные от коэффициента неправильной классификации, могут нарушить это предположение.

  • Высоко дискретные данные, несбалансированные классы и сильно несбалансированные матрицы затрат могут нарушить нормальность допущения классификационных различий потерь.

Алгоритмы

Если вы задаете, чтобы провести повторную перекрестную валидацию 10 на 10 t тест с использованием 'Test','10x10t', затем testckfold использует 10 степеней свободы для распределения t, чтобы найти критическую область и оценить p значение. Для получения дополнительной информации см. разделы [2] и [3].

Альтернативы

Использовать testcholdout:

  • Для тестовых наборов с большими размерами выборки

  • Для реализации вариантов теста Макнемара, чтобы сравнить две точности классификационной модели

  • Для чувствительной к цене проверки с использованием критерия хи-квадрат или коэффициент вероятности. Тест хи-квадрат использует quadprog (Optimization Toolbox), для которого требуется лицензия Optimization Toolbox™.

Ссылки

[1] Alpaydin, E. «Комбинированный тест CV F 5 x 2 для сравнения контролируемых классификационных Алгоритмов обучения». Нейронный Расчет, том 11, № 8, 1999, стр. 1885-1992.

[2] Буккар. Р. «Выбор между двумя алгоритмами обучения на основе калиброванных тестов». Международная конференция по машинному обучению, 2003, стр. 51-58.

[3] Буккар, Р. и Э. Фрэнк. «Оценка реплицируемости тестов значимости для сравнения алгоритмов обучения». Усовершенствования в области обнаружения знаний и майнинга данных, 8-я Тихоокеано-Азиатская конференция, 2004, стр. 3-12.

[4] Диттерих, Т. «Аппроксимация статистических тестов для сравнения контролируемых алгоритмов классификационного обучения». Нейронный Расчет, том 10, № 7, 1998, стр. 1895-1923.

[5] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения, 2nd Ed. New York: Springer, 2008.

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

Введенный в R2015a