kfoldLoss

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

Синтаксис

L = kfoldLoss(CVMdl)
L = kfoldLoss(CVMdl,Name,Value)

Описание

пример

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

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

пример

L = kfoldLoss(CVMdl,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value. Например, укажите который сгибы использовать для вычисления потерь или задать функцию потерь классификации.

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

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

Перекрестный подтвержденный, двоичный файл, линейная модель классификации, заданная как объект модели ClassificationPartitionedLinear. Можно создать модель ClassificationPartitionedLinear с помощью fitclinear и задав любую из перекрестной проверки, аргументов пары "имя-значение", например, CrossVal.

Чтобы получить оценки, kfoldLoss применяется, те же данные раньше перекрестный подтверждали линейную модель классификации (X и Y).

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Сверните индексы, чтобы использовать для прогноза счета классификации, заданного как пара, разделенная запятой, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должны колебаться от 1 до CVMdl.KFold.

Пример: 'Folds',[1 4 10]

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

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

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

    ЗначениеОписание
    'binodeviance'Биномиальное отклонение
    'classiferror'Ошибка классификации
    'exponential'Экспоненциал
    'hinge'Стержень
    'logit'Логистический
    'mincost'Минимальный ожидал стоимость misclassification (для очков классификации, которые являются апостериорными вероятностями),
    'quadratic'Квадратичный

    'mincost' подходит для очков классификации, которые являются апостериорными вероятностями. Для линейных моделей классификации ученики логистической регрессии возвращают апостериорные вероятности как очки классификации по умолчанию, но ученики SVM не делают (см. predict).

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

    Позвольте n быть количеством наблюдений в X и K быть количеством отличных классов (numel(Mdl.ClassNames), Mdl является входной моделью). Ваша функция должна иметь эту подпись

    lossvalue = lossfun(C,S,W,Cost)
    где:

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

    • Вы выбираете имя функции (lossfun).

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

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

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

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

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

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

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

Уровень агрегации потерь, заданный как пара, разделенная запятой, состоящая из 'Mode' и 'average' или 'individual'.

ЗначениеОписание
'average'Возвращает потери, усредненные по всем сгибам
'individual'Возвращает потери для каждого сгиба

Пример: 'Mode','individual'

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

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

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

Позволенный R быть количеством сильных мест регуляризации является перекрестными подтвержденными моделями (сохраненный в numel(CVMdl.Trained{1}.Lambda)) и F быть количеством сгибов (сохраненный в CVMdl.KFold).

  • Если Mode является 'average', то L является 1 R вектором. L(j) является средней потерей классификации по всем сгибам перекрестной подтвержденной модели, которая использует силу регуляризации j.

  • В противном случае L является F-by-R матрица. L(i,j) является потерей классификации для сгиба i перекрестной подтвержденной модели, которая использует силу регуляризации j.

Чтобы оценить L, kfoldLoss использует данные, которые создали CVMdl (см. X и Y).

Примеры

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

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

load nlpdata

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

Модели должны идентифицировать, являются ли подсчеты слов в веб-странице из документации Statistics and Machine Learning Toolbox™. Так, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.

Ystats = Y == 'stats';

Перекрестный подтвердите двоичный файл, линейная модель классификации, которая может идентифицировать, являются ли подсчеты слов в веб-странице документации из документации Statistics and Machine Learning Toolbox™.

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'CrossVal','on');

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

Оцените среднее значение коэффициентов ошибок классификации из сгиба.

ce = kfoldLoss(CVMdl)
ce = 7.6017e-04

Также можно получить коэффициенты ошибок классификации на сгиб путем определения пары "имя-значение" 'Mode','individual' в kfoldLoss.

Загрузите набор данных NLP. Предварительно обработайте данные как по Оценочной Ошибке Классификации Перекрестных проверок k-сгиба и транспонируйте данные о предикторе.

load nlpdata
Ystats = Y == 'stats';
X = X';

Перекрестный подтвердите двоичный файл, линейная модель классификации использование 5-кратной перекрестной проверки. Оптимизируйте использование целевой функции SpaRSA. Укажите, что наблюдения предиктора соответствуют столбцам.

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'Solver','sparsa','KFold',5,...
    'ObservationsIn','columns');
CMdl = CVMdl.Trained{1};

CVMdl является моделью ClassificationPartitionedLinear. Это содержит свойство Trained, которое является массивом ячеек 5 на 1, содержащим ClassificationLinear модели, что программное обеспечение обучило использование набора обучающих данных каждого сгиба.

Создайте анонимную функцию, которая измеряет линейную потерю, то есть,

L=j-wjyjfjjwj.

wj вес для наблюдения j, y_j является ответом j (-1 для отрицательного класса, и 1 в противном случае), и f_j является необработанным счетом классификации наблюдения j. Пользовательские функции потерь должны быть написаны в конкретной форме. Для правил о записи пользовательской функции потерь смотрите аргумент пары "имя-значение" LossFun. Поскольку функция не использует классификацию, стоят, используют ~, чтобы иметь kfoldLoss, игнорируют его положение.

linearloss = @(C,S,W,~)sum(-W.*sum(S.*C,2))/sum(W);

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

ce = kfoldLoss(CVMdl,'LossFun',linearloss)
ce = -8.0982
ceFold = kfoldLoss(CVMdl,'LossFun',linearloss,'Mode','individual')
ceFold = 5×1

   -8.3165
   -8.7633
   -7.4342
   -8.0423
   -7.9347

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

Загрузите набор данных NLP. Предварительно обработайте данные, когда в Задают Пользовательскую Потерю Классификации.

load nlpdata
Ystats = Y == 'stats';
X = X';

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

Lambda = logspace(-6,-0.5,11);

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

rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'KFold',5,'Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1×1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

Извлеките обученную линейную модель классификации.

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023×11 double]
              Bias: [-13.2904 -13.2904 -13.2904 -13.2904 -9.9357 -7.0782 -5.4335 -4.5473 -3.4223 -3.1649 -2.9795]
            Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162]
           Learner: 'logistic'


  Properties, Methods

Mdl1 является объектом модели ClassificationLinear. Поскольку Lambda является последовательностью сильных мест регуляризации, можно думать о Mdl как о 11 моделях, один для каждой силы регуляризации в Lambda.

Оцените перекрестную подтвержденную ошибку классификации.

ce = kfoldLoss(CVMdl);

Поскольку существует 11 сильных мест регуляризации, ce является вектором 1 на 11 коэффициентов ошибок классификации.

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

Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda,'GradientTolerance',1e-8);
numNZCoeff = sum(Mdl.Beta~=0);

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

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} classification error')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
title('Test-Sample Statistics')
hold off

Выберите индексы силы регуляризации, которая балансирует разреженность переменной прогноза и низкую ошибку классификации. В этом случае, значение между 10-4 к 10-1 должен быть достаточным.

idxFinal = 7;

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

MdlFinal = selectModels(Mdl,idxFinal);

MdlFinal является моделью ClassificationLinear, содержащей одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные к predict.

Больше о

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

Введенный в R2016a