exponenta event banner

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 для теста гипотезы (p) и соответствующие потери классификации для каждого цикла перекрестной проверки и кратности (e1 и e2).

Примеры

свернуть все

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

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

load census1994.mat
rng(1) % For reproducibility

Создайте дерево классификации по умолчанию с помощью обучающего набора, adultdata, которая является таблицей. Имя переменной ответа: '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.

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

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 соответствует установленной в тесте складке 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 cross проверяет C использование только указанных опций и данных предиктора для оценки несвоевременных потерь классификации.

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

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

свернуть все

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

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

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

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

Тип шаблонаВозвращено
Дерево классификацииtemplateTree
Дискриминантный анализtemplateDiscriminant
Ансамбль (повышение, фасовка в мешки и случайное подпространство)templateEnsemble
Выходные коды с исправлением ошибок (ECOC), мультиклассовая модель классификацииtemplateECOC
kNN templateKNN
Наивный БайесtemplateNaiveBayes
Вспомогательная векторная машина (SVM)templateSVM
Тип обучаемой моделиОбъект моделиВозвращено
Дерево классификацииClassificationTreefitctree
Дискриминантный анализClassificationDiscriminantfitcdiscr
Ансамбль фасованных классификационных моделейClassificationBaggedEnsemblefitcensemble
Ансамбль классификационных моделейClassificationEnsemblefitcensemble
Модель ECOCClassificationECOCfitcecoc
Обобщенная аддитивная модель (GAM)ClassificationGAMfitcgam
kNN ClassificationKNNfitcknn
Наивный Байес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, где true запись означает, что соответствующий столбец X1 является категориальной переменной.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При указании 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 если его истинный класс i. То есть строки соответствуют истинному классу, а столбцы - прогнозируемому классу. Определение порядка классов для соответствующих строк и столбцов Cost, дополнительно указать ClassNames аргумент пары имя-значение.

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

    • S.ClassNames, который содержит имена классов в качестве переменной того же типа данных, что и 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,Cost), где:

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

    • lossfun - имя функции.

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

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

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

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

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

    Укажите свою функцию с помощью 'LossFun',@lossfun.

Параметры параллельных вычислений, указанные как разделенная запятыми пара, состоящая из 'Options' и массив структуры, возвращенный statset. Для этих параметров требуется панель инструментов параллельных вычислений. testckfold использование 'Streams', 'UseParallel', и 'UseSubtreams' поля.

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

ВыборОписание
'Streams'

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

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

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

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

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

'UseParallel'При наличии панели инструментов параллельных вычислений можно вызвать пул работников, задав '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' (по умолчанию)5-на-2 парный F-тест. Подходит только для двустороннего тестирования.'unequal'
'5x2t'5-на-2 парный t-тест'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 - вероятность того, что статистика случайного теста является по меньшей мере такой же экстремальной, как статистика наблюдаемого теста, учитывая, что нулевая гипотеза верна.

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

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

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

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

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

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

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

Подробнее

свернуть все

Повторные перекрестные проверки

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

Для проведения теста R-by-K:

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

  2. Для прогонов r = 1-R повторите следующие шаги для k = 1-K:

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

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

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

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

      δ ^ rk = e1rk e2rk.

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

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

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

    • Оценить общее среднее значение различий: δ¯=1KR∑r=1R∑k=1Kδ^rk.

    • Оцените кратные дисперсии разностей: sr2=1K∑k=1K (δ ^ rk δ betr) 2.

    • Оцените среднее значение кратных разниц: s¯2=1R∑r=1Rsr2.

    • Оценить общую дисперсию выборки разностей: S2=1KR−1∑r=1R∑k=1K (δ ^ rk δ pw) 2.

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

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

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

        tpaired∗=δ^11s¯2.

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

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

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

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

        Fpaired∗=1RK∑r=1R∑k=1K (δ ^ rk) 2s 2.

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

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

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

      tCV∗=δ¯S/ν+1.

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

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

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

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

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

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

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

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

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

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

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

  • Биномиальное отклонение имеет вид

    e1=∑j=1ntestwjlog (1 + exp (−2yj′f (Xj))) ∑j=1ntestwj

    где:

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

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

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

  • Экспоненциальная потеря похожа на биномиальное отклонение и имеет вид

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

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

  • Потеря шарнира имеет вид

    e1=∑j=1nwjmax{0,1−yj′f (Xj)} ∑j=1nwj,

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

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

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

    e1=∑j=1ntestwjI (p^1j≠yj) ∑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 и конечной общей дисперсией при двусторонней нулевой гипотезе. Классификационные потери, отличные от коэффициента неправильной классификации, могут нарушить это предположение.

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

Алгоритмы

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

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

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

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

  • Реализация вариантов теста McNemar для сравнения точности двух моделей классификации

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

Ссылки

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

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

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

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

[5] Хасти, Т., Р. Тибширани и Дж. Фридман. The Elements of Statistical Learning, 2nd Ed. New York: Springer, 2008.

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

Представлен в R2015a