exponenta event banner

kfoldMargin

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

Описание

пример

m = kfoldMargin(CVMdl) возвращает перекрестно проверенные поля классификации, полученные CVMdl, которая является перекрестно проверенной моделью выходных кодов с исправлением ошибок (ECOC), состоящей из моделей линейной классификации. То есть, для каждого раза, kfoldMargin оценивает пределы классификации для наблюдений, которые он проводит, когда он тренируется с использованием всех других наблюдений.

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

пример

m = kfoldMargin(CVMdl,Name,Value) использует дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары. Например, укажите схему декодирования или уровень детализации.

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

развернуть все

Перекрестно проверенная модель ECOC, состоящая из линейных классификационных моделей, указанных как ClassificationPartitionedLinearECOC объект модели. Можно создать ClassificationPartitionedLinearECOC модель с использованием fitcecoc и путем:

  1. Указание любого из аргументов пары перекрестная проверка, имя-значение, например, CrossVal

  2. Установка аргумента пары имя-значение Learners кому 'linear' или шаблон модели линейной классификации, возвращенный templateLinear

Для получения оценок kfoldMargin применяет те же данные, которые используются для перекрестной проверки модели ECOC (X и Y).

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

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

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

  • Эта таблица содержит имена и описания встроенных функций, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, а g (yj, sj) - формула двоичных потерь.

    СтоимостьОписаниеДомен оценкиg (yj, sj)
    'binodeviance'Биномиальное отклонение(–∞,∞)журнал [1 + exp (-2yjsj) ]/[ 2log (2)]
    'exponential'Показательный(–∞,∞)exp (-yjsj )/2
    'hamming'Хэмминг[0,1] или (- ∞,∞)[1 - знак (yjsj) ]/2
    'hinge'Стержень(–∞,∞)max (0,1 - yjsj )/2
    'linear'Линейный(–∞,∞)(1 - yjsj )/2
    'logit'Логистический(–∞,∞)log [1 + exp (-yjsj) ]/[ 2log (2)]
    'quadratic'Квадратный[0,1][1-yj (2sj-1)] 2/2

    Программное обеспечение нормализует двоичные потери так, что потери составляют 0,5, когда yj = 0. Кроме того, программное обеспечение вычисляет средние двоичные потери для каждого класса.

  • Для пользовательской двоичной функции потери, например, customFunction, укажите его функциональный дескриптор 'BinaryLoss',@customFunction.

    customFunction должен иметь эту форму

    bLoss = customFunction(M,s)
    где:

    • M - матрица кодирования K-by-L, сохраненная в Mdl.CodingMatrix.

    • s - вектор 1-by-L строк классификационных баллов.

    • bLoss - потеря классификации. Этот скаляр агрегирует двоичные потери для каждого учащегося в конкретном классе. Например, можно использовать среднюю двоичную потерю для суммирования потерь по учащимся для каждого класса.

    • K - количество классов.

    • L - количество двоичных учеников.

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

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

  • SVM, затем BinaryLoss является 'hinge'

  • Логистическая регрессия, затем BinaryLoss является 'quadratic'

Пример: 'BinaryLoss','binodeviance'

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

Схема декодирования, которая агрегирует двоичные потери, заданная как разделенная запятыми пара, состоящая из 'Decoding' и 'lossweighted' или 'lossbased'. Дополнительные сведения см. в разделе Потери двоичного кода.

Пример: 'Decoding','lossbased'

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

Для вызова параллельных вычислений:

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

  • Определить 'Options',statset('UseParallel',true).

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

Если Verbose является 0, то программное обеспечение не отображает диагностические сообщения. В противном случае программа отображает диагностические сообщения.

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

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

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

развернуть все

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

m является n-by-L, где n - число наблюдений в X и L - количество сильных сторон регуляризации в Mdl (то есть numel(Mdl.Lambda)).

m(i,j) является перекрестно проверенным классификационным пределом наблюдения i с использованием модели ECOC, состоящей из линейных классификационных моделей, которая имеет силу регуляризации Mdl.Lambda(j).

Примеры

развернуть все

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

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса.

Для простоты используйте метку «others» для всех наблюдений в Y которые не являются 'simulink', 'dsp', или 'comm'.

Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';

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

rng(1); % For reproducibility 
CVMdl = fitcecoc(X,Y,'Learner','linear','CrossVal','on');

CVMdl является ClassificationPartitionedLinearECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно изменить количество сгибов с помощью 'KFold' аргумент пары имя-значение.

Оцените k-кратные границы.

m = kfoldMargin(CVMdl);
size(m)
ans = 1×2

       31572           1

m является вектором 31572 на 1. m(j) - среднее значение отклоненных полей для наблюдения j.

Постройте график k-кратных полей с помощью оконных графиков.

figure;
boxplot(m);
h = gca;
h.YLim = [-5 5];
title('Distribution of Cross-Validated Margins')

Figure contains an axes. The axes with title Distribution of Cross-Validated Margins contains 7 objects of type line.

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

Загрузите набор данных NLP. Выполните предварительную обработку данных, как в разделе Оценка k-кратных полей перекрестной проверки, и сориентируйте данные предиктора таким образом, чтобы наблюдения соответствовали столбцам.

load nlpdata
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';
X = X';

Создайте два набора данных:

  • fullX содержит все предикторы.

  • partX содержит 1/2 предикторов, выбранных случайным образом.

rng(1); % For reproducibility
p = size(X,1); % Number of predictors
halfPredIdx = randsample(p,ceil(0.5*p));
fullX = X;
partX = X(halfPredIdx,:);

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

t = templateLinear('Solver','sparsa');

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

CVMdl = fitcecoc(fullX,Y,'Learners',t,'CrossVal','on',...
    'ObservationsIn','columns');
PCVMdl = fitcecoc(partX,Y,'Learners',t,'CrossVal','on',...
    'ObservationsIn','columns');

CVMdl и PCVMdl являются ClassificationPartitionedLinearECOC модели.

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

fullMargins = kfoldMargin(CVMdl);
partMargins = kfoldMargin(PCVMdl);

figure;
boxplot([fullMargins partMargins],'Labels',...
    {'All Predictors','Half of the Predictors'});
h = gca;
h.YLim = [-1 1];
title('Distribution of Cross-Validated Margins')

Figure contains an axes. The axes with title Distribution of Cross-Validated Margins contains 14 objects of type line.

Распределения k-кратных полей двух классификаторов одинаковы.

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

Загрузите набор данных NLP. Выполните предварительную обработку данных, как в разделе Выбор элемента с помощью k-кратных полей.

load nlpdata
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';
X = X';

Создайте набор из 11 логарифмически разнесенных уровней регуляции от 10-8 до 101.

Lambda = logspace(-8,1,11);

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

t = templateLinear('Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);

Перекрестная проверка модели ECOC, состоящей из двоичных линейных классификационных моделей, с использованием пятикратной перекрестной проверки и

rng(10); % For reproducibility
CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5)
CVMdl = 
  ClassificationPartitionedLinearECOC
    CrossValidatedModel: 'LinearECOC'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1x1 cvpartition]
             ClassNames: [comm    dsp    simulink    others]
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является ClassificationPartitionedLinearECOC модель.

Оцените k-кратные пределы для каждой силы регуляризации. Оценки логистической регрессии приведены в [0,1]. Примените квадратичные двоичные потери.

m = kfoldMargin(CVMdl,'BinaryLoss','quadratic');
size(m)
ans = 1×2

       31572          11

m представляет собой матрицу 31572 на 11 перекрестно проверенных полей для каждого наблюдения. Столбцы соответствуют прочностям регуляризации.

Постройте график k-кратных полей для каждой силы регуляризации.

figure;
boxplot(m)
ylabel('Cross-validated margins')
xlabel('Lambda indices')

Figure contains an axes. The axes contains 77 objects of type line.

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

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

LambdaFinal = Lambda(5);

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

t = templateLinear('Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',Lambda(5),'GradientTolerance',1e-8);
MdlFinal = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns');

Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.

Подробнее

развернуть все

Ссылки

[1] Allwein, E., R. Schapire и Y. Singer. «Сокращение мультиклассов до двоичных: унифицирующий подход к classifiers маржи». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.

[2] Эскалера, С., О. Пужоль и П. Радева. «Процесс декодирования в выходных кодах с тройной коррекцией ошибок». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Том 32, выпуск 7, 2010, стр. 120-134.

[3] Эскалера, С., О. Пужоль и П. Радева. «Разделяемость троичных кодов для разреженных конструкций выходных кодов с исправлением ошибок». Повторная запись шаблона. Том 30, выпуск 3, 2009, стр. 285-297.

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

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