compareHoldout

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

Описание

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

Можно определить, отличаются ли точности классификационных моделей или одна модель работает лучше другой. compareHoldout может провести несколько изменения теста McNemar, включая асимптотический тест, точный-условный тест и среднее p значение теста. Для чувствительной к затратам оценки доступные тесты включают тест хи-квадрат (требует Optimization Toolbox™) и тест коэффициента вероятности.

пример

h = compareHoldout(C1,C2,T1,T2,ResponseVarName) возвращает решение теста от проверки нулевой гипотезы о том, что обученные классификационные модели C1 и C2 имеют равную точность для предсказания истинных меток классов в ResponseVarName переменная. Альтернативная гипотеза заключается в том, что метки имеют неравную точность.

Первая классификационная модель C1 использует данные предиктора в T1и вторую классификационную модель C2 использует данные предиктора в T2. Таблицы T1 и T2 должна содержать ту же переменную отклика, но может содержать различные наборы предикторов. По умолчанию программа проводит тест McNemar p средним значением, чтобы сравнить точности.

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

Ниже приведены примеры тестов, которые вы можете провести:

  • Сравните точности простой классификационной модели и модели, которая является более комплексной путем передачи того же набора данных предиктора (то есть T1 = T2).

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

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

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

Первая классификационная модель C1 использует данные предиктора T1и вторую классификационную модель C2 использует данные предиктора T2. По умолчанию программа проводит тест McNemar p средним значением, чтобы сравнить точности.

пример

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

Первая классификационная модель C1 использует данные предиктора X1и вторую классификационную модель C2 использует данные предиктора X2. По умолчанию программа проводит тест McNemar p средним значением, чтобы сравнить точности.

пример

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

пример

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

Примеры

свернуть все

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

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

load carsmall

Создайте две таблицы входных данных, где вторая таблица исключает предиктор Acceleration. Задайте Model_Year как переменная отклика.

T1 = table(Acceleration,Displacement,Horsepower,MPG,Model_Year);
T2 = T1(:,2:end);

Создайте раздел, который разделяет данные на обучающие и тестовые наборы. Храните 30% данных для проверки.

rng(1)  % For reproducibility
CVP = cvpartition(Model_Year,'holdout',0.3);
idxTrain = training(CVP);   % Training-set indices
idxTest = test(CVP);    % Test-set indices

CVP является объектом раздела перекрестной проверки, который задает наборы для обучения и тестирования.

Обучите ClassificationKNN моделирует с использованием T1 и T2 данные.

C1 = fitcknn(T1(idxTrain,:),'Model_Year');
C2 = fitcknn(T2(idxTrain,:),'Model_Year');

C1 и C2 обучаются ClassificationKNN модели.

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

h = compareHoldout(C1,C2,T1(idxTest,:),T2(idxTest,:),'Model_Year')
h = logical
   0

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

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

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

load ionosphere

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

rng(1)                             % For reproducibility
CVP = cvpartition(Y,'holdout',0.5);
idxTrain = training(CVP);           % Training-set indices 
idxTest = test(CVP);                % Test-set indices

CVP является объектом раздела перекрестной проверки, который задает наборы для обучения и тестирования.

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

C1 = fitcsvm(X(idxTrain,:),Y(idxTrain),'Standardize',true, ...
    'KernelFunction','RBF','KernelScale','auto');
t = templateTree('Reproducible',true);  % For reproducibility of random predictor selections
C2 = fitcensemble(X(idxTrain,:),Y(idxTrain),'Method','Bag', ...
    'Learners',t);

C1 является обученным ClassificationSVM модель. C2 является обученным ClassificationBaggedEnsemble модель.

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

h = compareHoldout(C1,C2,X(idxTest,:),X(idxTest,:),Y(idxTest))
h = logical
   0

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

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

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

load ionosphere;

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

rng(1);                             % For reproducibility
CVP = cvpartition(Y,'holdout',0.5);
idxTrain = training(CVP);           % Training-set indices 
idxTest = test(CVP);                % Test-set indices

CVP является объектом раздела перекрестной проверки, который задает наборы для обучения и тестирования.

Обучите две модели SVM: одну, которая использует линейное ядро (по умолчанию для двоичной классификации) и одну, которая использует ядро функции радиального базиса. Используйте шкалу ядра по умолчанию 1.

C1 = fitcsvm(X(idxTrain,:),Y(idxTrain),'Standardize',true);
C2 = fitcsvm(X(idxTrain,:),Y(idxTrain),'Standardize',true,...
    'KernelFunction','RBF');

C1 и C2 обучаются ClassificationSVM модели.

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

Asymp = zeros(4,1); % Preallocation
MidP = zeros(4,1); 

[Asymp(1),Asymp(2),Asymp(3),Asymp(4)] = compareHoldout(C1,C2,...
    X(idxTest,:),X(idxTest,:),Y(idxTest),'Alternative','greater',...
    'Test','asymptotic');
[MidP(1),MidP(2),MidP(3),MidP(4)] = compareHoldout(C1,C2,...
    X(idxTest,:),X(idxTest,:),Y(idxTest),'Alternative','greater');
table(Asymp,MidP,'RowNames',{'h' 'p' 'e1' 'e2'})
ans=4×2 table
            Asymp          MidP   
          __________    __________

    h              1             1
    p     7.2801e-09    2.7649e-10
    e1       0.13714       0.13714
    e2       0.33143       0.33143

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

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

Загрузите arrhythmia набор данных. Определите представления классов в данных.

load arrhythmia;
Y = categorical(Y);
tabulate(Y);
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

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

Объедините все наблюдения с аритмией (классы 2-15) в один класс. Удалите наблюдения с неизвестным статусом аритмии (класс 16) из набора данных.

idx = (Y ~= '16');
Y = Y(idx);
X = X(idx,:);
Y(Y ~= '1') = 'WithArrhythmia';
Y(Y == '1') = 'NoArrhythmia';
Y = removecats(Y);

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

rng(1);                             % For reproducibility
CVP = cvpartition(Y,'holdout',0.5);
idxTrain = training(CVP);           % Training-set indices 
idxTest = test(CVP);                % Test-set indices

CVP является объектом раздела перекрестной проверки, который задает наборы для обучения и тестирования.

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

cost = [0 1;5 0];
ClassNames = {'NoArrhythmia','WithArrhythmia'};

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

t = templateTree('Surrogate','on');
numTrees = 50;
C1 = fitcensemble(X(idxTrain,:),Y(idxTrain),'Method','AdaBoostM1', ...
    'NumLearningCycles',numTrees,'Learners',t, ...
    'Cost',cost,'ClassNames',ClassNames);
C2 = fitcensemble(X(idxTrain,:),Y(idxTrain),'Method','LogitBoost', ...
    'NumLearningCycles',numTrees,'Learners',t, ...
    'Cost',cost,'ClassNames',ClassNames);

C1 и C2 обучаются ClassificationEnsemble модели.

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

[h,p,e1,e2] = compareHoldout(C1,C2,X(idxTest,:),X(idxTest,:),Y(idxTest),...
    'Cost',cost)
h = logical
   0

p = 0.3334
e1 = 0.5581
e2 = 0.4698

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

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

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

load ionosphere;

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

rng(1);  % For reproducibility
CVP = cvpartition(Y,'holdout',0.5);
idxTrain = training(CVP); % Training-set indices 
idxTest = test(CVP);      % Test-set indices

CVP является объектом раздела перекрестной проверки, который задает наборы для обучения и тестирования.

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

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

figure;
bar(predImp);
h = gca;
h.XTick = 1:2:h.XLim(2)
h = 
  Axes with properties:

             XLim: [-0.2000 35.2000]
             YLim: [0 0.0090]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]
            Units: 'normalized'

  Show all properties

title('Predictor Importance');
xlabel('Predictor');
ylabel('Importance measure');

Figure contains an axes. The axes with title Predictor Importance contains an object of type bar.

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

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

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

C1 = fitcensemble(X(idxTrain,idx5),Y(idxTrain),'Method','AdaBoostM1',...
    'Learners',t);

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

[h,p,e1,e2] = compareHoldout(C1,C2,X(idxTest,idx5),X(idxTest,:),Y(idxTest))
h = logical
   0

p = 0.7744
e1 = 0.0914
e2 = 0.0857

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

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

свернуть все

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

Обученный тип моделиОбъект моделиВозвращено
Классификационное деревоClassificationTreefitctree
Дискриминантный анализClassificationDiscriminantfitcdiscr
Ансамбль упакованных классификационных моделейClassificationBaggedEnsemblefitcensemble
Ансамбль классификационных моделейClassificationEnsemblefitcensemble
Мультиклассы, исправляющие ошибки коды выхода (ECOC)ClassificationECOCfitcecoc
Обобщенная аддитивная модель (GAM)ClassificationGAMfitcgam
k NNClassificationKNNfitcknn
Наивный БайесClassificationNaiveBayesfitcnb
Нейронная сетьClassificationNeuralNetwork (с наблюдениями в строках)fitcnet
Машина опорных векторов (SVM)ClassificationSVMfitcsvm
Компактный дискриминантный анализCompactClassificationDiscriminantcompact
Компактный ЭКОКCompactClassificationECOCcompact
Компактный ансамбль классификационных моделейCompactClassificationEnsemblecompact
Компактная GAMCompactClassificationGAMcompact
Компактный наивный БейесCompactClassificationNaiveBayescompact
Компактная нейронная сетьCompactClassificationNeuralNetworkcompact
Компактный SVMCompactClassificationSVMcompact
Компактное классификационное деревоCompactClassificationTreecompact

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

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

T1 и T2 должны иметь одинаковое число строк и одинаковые значения отклика. Если T1 и T2 содержат переменную отклика, используемую для обучения C1 и C2, тогда вам не нужно указывать ResponseVarName или Y.

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

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

T1 и T2 должны иметь одинаковое число строк и одинаковые значения отклика. Если T1 и T2 содержат переменную отклика, используемую для обучения C1 и C2, тогда вам не нужно указывать ResponseVarName или Y.

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

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

Каждая строка X1 соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной (также известной как предиктор или функция). Переменные, используемые для обучения C1 должны составлять X1.

Количество строк в X1 и X2 должно равняться количеству строк в Y.

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

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

Каждая строка X2 соответствует одному наблюдению (также известному как образец или пример), и каждый столбец соответствует одной переменной (также известной как предиктор или функция). Переменные, используемые для обучения C2 должны составлять X2.

Количество строк в X2 и X1 должно равняться количеству строк в Y.

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

Имя переменной отклика, заданное как имя переменной в T1 и T2. Если T1 и T2 содержат переменную отклика, используемую для обучения C1 и C2, тогда вам не нужно указывать ResponseVarName.

Вы должны задать ResponseVarName как вектор символов или строковый скаляр. Для примера, если переменная отклика сохранена как T1.Response, затем укажите его следующим 'Response'. В противном случае программное обеспечение обрабатывает все столбцы T1 и T2, включая Response, как предикторы.

Переменная отклика должна быть категориальными символьными или строковыми массивами, логическим или числовым вектором или массивом ячеек из векторов символов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.

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

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

Когда вы задаете Y, compareHoldout обрабатывает все переменные в матрицах X1 и X2 или таблиц T1 и T2 как переменные предиктора.

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

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

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

Примечание

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

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

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

Пример: compareHoldout(C1,C2,X1,X2,Y,'Alternative','greater','Test','asymptotic','Cost',[0 2;1 0]) проверяет, является ли первый набор предсказанных меток классов более точным, чем второй набор, проводит асимптотический тест Макнемара и наказывает неправильную классификацию наблюдений истинной меткой ClassNames{1} вдвое больше, чем неправильная классификация наблюдений с помощью истинной метки ClassNames{2}.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если вы задаете Cost, затем compareHoldout не может проводить односторонние, точные или средние p тесты. Вы также должны задать 'Alternative','unequal','Test','asymptotic'. Для экономичных опций проверки смотрите CostTest аргумент пары "имя-значение".

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

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

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

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

Чувствительный к расходам тип теста, заданный как разделенная разделенными запятой парами, состоящая из 'CostTest' и 'chisquare' или 'likelihood'. Если вы не задаете матрицу затрат используя Cost аргумент пары "имя-значение", compareHoldout игнорирует CostTest.

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

ЗначениеАсимптотический тип тестаТребования
'chisquare'Тест Хи-квадратOptimization Toolbox для реализации quadprog (Optimization Toolbox)
'likelihood'Тест коэффициента правдоподобияНичего

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

Пример: 'CostTest','chisquare'

Тест для проведения, заданный как разделенная разделенными запятой парами, состоящая из 'Test' и 'asymptotic', 'exact', или 'midp'.

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

ЗначениеОписание
'asymptotic'Асимптотический тест Макнемара
'exact'Точно-условный тест Макнемара
'midp' (по умолчанию)Mid- p - значение теста Макнемара

Для получения дополнительной информации см. «Тесты Макнемара».

Для экономичной проверки, Test должен быть 'asymptotic'. Когда вы задаете Cost Аргументом пары "имя-значение" и выберите чувствительный к цене тест с помощью CostTest аргумент пары "имя-значение", 'asymptotic' является значением по умолчанию.

Пример: 'Test','asymptotic'

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

свернуть все

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

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

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

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

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

compareHoldout оценки p использование распределения тестовой статистики, которое изменяется в зависимости от типа теста. Для получения дополнительной информации о статистике тестов, полученных из доступных вариантов теста Макнемара, см. «Тесты Макнемара». Для получения дополнительной информации о тестовой статистике, полученной из чувствительных к затратам тестов, см. «Чувствительное к затратам проверка».

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

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

Для экономичной проверки, e1 - коэффициент неправильной классификации. То есть e1 - доля неправильно классифицированных наблюдений, которая является скаляром в интервале [0,1].

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

Для получения дополнительной информации смотрите Классификационные потери.

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

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

Для экономичной проверки, e2 - коэффициент неправильной классификации. То есть e2 - доля неправильно классифицированных наблюдений, которая является скаляром в интервале [0,1].

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

Для получения дополнительной информации смотрите Классификационные потери.

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

Ограничения

  • compareHoldout не сравнивает модели ECOC, составленные из линейных или ядерно-классификационных моделей (то есть ClassificationLinear или ClassificationKernel объекты модели). Сравнение ClassificationECOC модели, состоящие из линейных или ядерно-классификационных моделей, использование testcholdout вместо этого.

  • Точно так же, compareHoldout не сравнивает ClassificationLinear или ClassificationKernel объекты модели. Чтобы сравнить эти модели, используйте testcholdout вместо этого.

Подробнее о

свернуть все

Экономичная проверка

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

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

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

Следующие определения результируют с учетом затрат. В определениях:

  • nijk и π^ijk - количество и предполагаемая доля наблюдений тестовой выборки со следующими характеристиками. k - истинный класс, i - метка, назначенная первой классификационной моделью, и j - метка, назначенная второй классификационной моделью. Неизвестное истинное значение π^ijk является πijk. Размер выборки набора тестов i,j,knijk=ntest. Дополнительно, i,j,kπijk=i,j,kπ^ijk=1.

  • cij - относительная стоимость назначения j меток наблюдению с истинными i классов. cii = 0, cij ≥ 0 и, по крайней мере, для одной (i, j) пары cij > 0 .

  • Все индексы берут целочисленные значения от 1 до K, что является количеством классов.

  • Ожидаемое различие в расходах на неправильную классификацию двух классификационных моделей

    δ=i=1Kj=1Kk=1K(ckickj)πijk.

  • Критерий гипотезы

    H0:δ=0H1:δ0.

    Доступные чувствительные к цене тесты подходят для двуххвостой проверки.

Доступные асимптотические тесты, которые устраняют дисбаланс затрат, являются chi-square test и likelihood ratio test.

  • Критерий Хи-квадрат - критерий Хи-квадрат основан на статистике теста Пирсона и Неймана Хи-квадрат, но с коэффициентом коррекции Лапласа, учитывающим любой nijk = 0. Тестовая статистика

    tχ2=ijk(nijk+1(ntest+K3)π^ijk(1))2nijk+1.

    Если 1Fχ2(tχ2;1)<α, затем отклоните H 0.

    • π^ijk(1) оцениваются путем минимизации tχ2 под ограничением, которое δ = 0.

    • Fχ2(x;1) является χ2 cdf с одной степенью свободы, оцененной при x.

  • Тест коэффициента правдоподобия - тест коэффициента правдоподобия основан на Nijk, которые являются биномиальными случайными переменными с ntest размера выборки и πijk вероятности успеха. Случайные переменные представляют случайное число наблюдений с: true class k, i меток, присвоенные первой классификационной моделью, и j меток, присвоенные второй классификационной моделью. Совместно распределение случайных переменных полиномиальное.

    Тестовая статистика

    tLRT=2log[P(i,j,kNijk=nijk;ntest,π^ijk=π^ijk(2))P(i,j,kNijk=nijk;ntest,π^ijk=π^ijk(3))].

    Если 1Fχ2(tLRT;1)<α, затем отклоните H 0.

    • π^ijk(2)=nijkntest - неограниченный MLE πijk.

    • π^ijk(3)=nijkntest+λ(ckickj) - MLE при нулевой гипотезе, которая δ = 0. λ является решением для

      i,j,knijk(ckickj)ntest+λ(ckickj)=0.

    • Fχ2(x;1) является χ2 cdf с одной степенью свободы, оцененной при x.

Тесты Макнемара

McNemar Tests проверку гипотезы, которая сравнивает две пропорции населения при решении проблем, возникающих из двух зависимых выборок с совпадающими парами.

Один из способов сравнить прогнозирующие точности двух классификационных моделей:

  1. Разделите данные на обучающие и тестовые наборы.

  2. Обучите обе классификационные модели с помощью набора обучающих данных.

  3. Спрогнозируйте метки классов с помощью тестового набора.

  4. Суммируйте результаты в таблице два на два подобных этого рисунка.

    nii количество конкордантных пар, то есть количество наблюдений, которые обе модели классифицируют одинаково (правильно или неправильно). nij, ij, количество дискордантных пар, то есть количество наблюдений, которые модели классифицируют по-разному (правильно или неправильно).

Коэффициенты неправильной классификации для моделей 1 и 2 π^2=n2/n и π^2=n2/n, соответственно. Двусторонний тест для сравнения точности двух моделей

H0:π2=π2H1:π2π2.

Нулевая гипотеза предполагает, что население проявляет маргинальную однородность, что уменьшает нулевую гипотезу до H0:π12=π21. Кроме того, согласно нулевой гипотезе, N 12 ~ биномиальным (n 12 + n 21,0,5) [1].

Эти факты являются базисом для доступных вариантов теста McNemar: asymptotic, exact-conditional и mid-p-value тестов McNemar. Следующие определения суммируют доступные варианты.

  • Асимптотическая - асимптотическая статистика теста Макнемара и области отторжения (для α уровня значимости):

    • Для односторонних тестов тестовая статистика

      ta1=n12n21n12+n21.

      Если 1Φ(|t1|)<α, где Φ - стандартный Гауссов cdf, затем отклоните H 0.

    • Для двусторонних тестов тестовая статистика

      ta2=(n12n21)2n12+n21.

      Если 1Fχ2(t2;m)<α, где Fχ2(x;m) является χm2 cdf оценивают в x, затем отклоняют H 0.

    Асимптотический тест требует теории с большой выборкой, в частности Гауссово приближение биномиальному распределению.

    • Общее количество дискордантных пар, nd=n12+n21, должно быть больше 10 ([1], ч. 10.1.4).

    • В целом асимптотические тесты не гарантируют номинального покрытия. Наблюдаемая вероятность ложного отклонения нулевой гипотезы может превысить α, как предполагалось в симуляционных исследованиях в [18]. Однако асимптотический тест Макнемара показывает хорошие результаты с точки зрения статистической степени.

  • Точная-Условная - Точная-условная статистика теста Макнемара и области отклонения (для α уровня значимости) являются ([36], [38]):

    • Для односторонних тестов тестовая статистика

      t1=n12.

      Если FBin(t1;nd,0.5)<α, где FBin(x;n,p) является биномиальным cdf с размером выборки n и вероятность успеха p оценена в x, затем отклонить H 0.

    • Для двусторонних тестов тестовая статистика

      t2=min(n12,n21).

      Если FBin(t2;nd,0.5)<α/2, затем отклоните H 0.

    Точно-условный тест всегда достигает номинального покрытия. Исследования симуляции в [18] показывают, что тест консервативен, а затем показывают, что тест не имеет статистической степени по сравнению с другими вариантами. Для небольших или сильно дискретных тестовых выборок рассмотрите использование теста mid- p -значение ([1], гл. 3.6.3).

  • Mid- p -value test - The mid- p -value McNemar test statistics and rejection regions (для уровня значимости α) are ([32]):

    • Для односторонних тестов тестовая статистика

      t1=n12.

      Если FBin(t11;n12+n21,0.5)+0.5fBin(t1;n12+n21,0.5)<α, где FBin(x;n,p) и fBin(x;n,p) являются биномиальными cdf и pdf, соответственно, с n размера выборки и p вероятности успеха, оцененными в x, затем отклоняют H 0.

    • Для двусторонних тестов тестовая статистика

      t2=min(n12,n21).

      Если FBin(t21;n12+n211,0.5)+0.5fBin(t2;n12+n21,0.5)<α/2, затем отклоните H 0.

    Тест middle p -значение адресован чрезмерно консервативному поведению точного условного теста. Исследования симуляции в [18] показывают, что этот тест достигает номинального охвата и имеет хорошую статистическую степень.

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

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

compareHoldout возвращает классификационные потери (см. e1 и e2) по альтернативной гипотезе (то есть неограниченные классификационные потери). nijk - количество наблюдений тестовой выборки с: true k класса, i метки, присвоенная первой классификационной моделью, и j метки, присвоенная второй классификационной моделью. Соответствующая предполагаемая пропорция π^ijk=nijkntest. Размер выборки набора тестов i,j,knijk=ntest. Индексы берутся от 1 до K, количество классов.

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

    e1=j=1Kk=1Kikπ^ijk.

    Для скорости неправильной классификации второй классификационной модели (e 2) переключите индексы i и j в формуле.

    Точность классификации уменьшается, когда коэффициент неправильной классификации увеличивается до 1.

  • misclassification cost является неотрицательным скаляром, который является мерой качества классификации относительно значений указанной матрицы затрат. Ее толкование зависит от конкретных расходов на неправильную классификацию. Стоимость неправильной классификации представляет собой взвешенное среднее значение затрат на неправильную классификацию (указанную в матрице затрат, C), в которой веса являются соответствующими предполагаемыми пропорциями неправильно классифицированных наблюдений. Стоимость неправильной классификации для первой классификационной модели

    e1=j=1Kk=1Kikπ^ijkcki,

    где ckj - стоимость классификации наблюдения в класс j если его истинный класс k. Для стоимости неправильной классификации второй классификационной модели (e 2) переключите индексы i и j в формуле.

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

Совет

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

    1. Обучите первую классификационную модель (C1) использование полного набора предикторов.

    2. Обучите вторую классификационную модель (C2) использование уменьшенного набора предикторов.

    3. Задайте X1 как данные предиктора полного набора тестов и X2 как уменьшенные данные предиктора набора тестов.

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

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

  • Чувствительные к расходам тесты выполняют числовую оптимизацию, которая требует дополнительных вычислительных ресурсов. Тест коэффициента правдоподобия проводит числовую оптимизацию косвенно путем нахождения корня множителя Лагранжа в интервале. Для некоторых наборов данных, если корень лежит близко к контурам интервала, то метод может оказаться неудачным. Поэтому, если у вас есть лицензия Optimization Toolbox, рассмотрите проведение чувствительного к стоимости теста chi-квадрат вместо этого. Для получения дополнительной информации смотрите CostTest и чувствительное к расходам проверка.

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

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

Ссылки

[1] Agresti, A. Categorical Data Analysis, 2nd Ed. John Wiley & Sons, Inc.: Хобокен, Нью-Джерси, 2002.

[2] Fagerlan, M.W., S. Lydersen, and P. Laake. Тест МакНемара на двоичные совпадающие данные пар: Mid-p и Asymptotic лучше, чем точные условные. Методика медицинских исследований BMC. Том 13, 2013, стр. 1-8.

[3] Ланкастер, H.O. «Тесты значимости в дискретных распределениях». JASA, том 56, номер 294, 1961, стр. 223-234.

[4] McNemar, Q. «Примечание об ошибке дискретизации различий между коррелированными пропорциями или процентами». Психометрика, том 12, № 2, 1947, с. 153-157.

[5] Mosteller, F. «Некоторые статистические проблемы в измерении субъективного ответа на наркотики». Биометрия, том 8, № 3, 1952, с. 220-226.

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

Введенный в R2015a