exponenta event banner

kfoldLoss

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

Описание

пример

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

По умолчанию kfoldLoss возвращает ошибку классификации.

пример

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

Примеры

свернуть все

Загрузить ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный отклик для радарных возвращений, которые помечены как плохие ('b') или хорошо ('g').

load ionosphere

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

CVMdl = fitckernel(X,Y,'Crossval','on')
CVMdl = 
  ClassificationPartitionedKernel
    CrossValidatedModel: 'Kernel'
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является ClassificationPartitionedKernel модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы указать другое количество сгибов, используйте 'KFold' аргумент пары имя-значение вместо 'Crossval'.

Оцените перекрестную проверенную потерю классификации. По умолчанию программа вычисляет ошибку классификации.

loss = kfoldLoss(CVMdl)
loss = 0.0940

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

Загрузить ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный отклик для радарных возвращений, которые помечены как плохие ('b') или хорошо ('g').

load ionosphere

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

CVMdl = fitckernel(X,Y,'Crossval','on')
CVMdl = 
  ClassificationPartitionedKernel
    CrossValidatedModel: 'Kernel'
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdl является ClassificationPartitionedKernel модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы указать другое количество сгибов, используйте 'KFold' аргумент пары имя-значение вместо 'Crossval'.

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

L=∑j-wjyjfj∑jwj.

wj - вес для наблюдения j, yj - ответ j (-1 для отрицательного класса и 1 в противном случае), и fj - необработанный классификационный балл наблюдения j.

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

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

Оцените потери классификации с перекрестной проверкой с помощью линейной функции потерь.

loss = kfoldLoss(CVMdl,'LossFun',linearloss)
loss = -0.7792

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

свернуть все

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

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

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

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

Пример: kfoldLoss(CVMdl,'Folds',[1 3 5]) указывает использовать только первый, третий и пятый сгибы для вычисления потери классификации.

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

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

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

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

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

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

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

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

  • Укажите собственную функцию с помощью нотации дескриптора функции.

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

    lossvalue = lossfun(C,S,W,Cost)

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

    • Указывается имя функции (lossfun).

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

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

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

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

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

Пример: 'LossFun',@lossfun

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

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

В этой таблице описываются значения.

СтоимостьОписание
'average'Вывод является скалярным средним по всем складкам.
'individual'Выходной сигнал представляет собой вектор длины k, содержащий одно значение на единицу, где k - количество сгибов.

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

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

свернуть все

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

Если Mode является 'average', то loss - средняя потеря классификации по всем складкам. В противном случае loss - вектор числового столбца k-by-1, содержащий классификационные потери для каждой складки, где k - количество складок.

Подробнее

свернуть все

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

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

Предположим, что:

  • L - средневзвешенная потеря классификации.

  • n - размер выборки.

  • yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.

  • f (Xj) - показатель классификации положительного класса для наблюдения (строки) j данных прогнозирования X.

  • mj = yjf (Xj) - показатель классификации для классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не вносят большого вклада в средние потери. Отрицательные значения mj указывают на неправильную классификацию и вносят значительный вклад в средний убыток.

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

    ∑j=1nwj=1.

В этой таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент «имя-значение».

Функция потерьЗначение LossFunУравнение
Биномиальное отклонение'binodeviance'L=∑j=1nwjlog{1+exp[−2mj]}.
Экспоненциальные потери'exponential'L=∑j=1nwjexp (мдж).
Неверно классифицированная скорость в десятичной'classiferror'

L=∑j=1nwjI{y^j≠yj}.

y ^ j - метка класса, соответствующая классу с максимальным баллом. I {·} - функция индикатора.

Потеря шарнира'hinge'L=∑j=1nwjmax{0,1−mj}.
Потеря журнала'logit'L=∑j=1nwjlog (1 + exp (mj)).
Минимальная ожидаемая стоимость классификации ошибок'mincost'

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

Программное обеспечение вычисляет взвешенную минимальную ожидаемую стоимость классификации, используя эту процедуру для наблюдений j = 1,..., n.

  1. Оценить ожидаемую стоимость неправильной классификации для классификации наблюдения Xj в класс k:

    γ jk = (f (Xj) C) k.

    f (Xj) - вектор-столбец апостериорных вероятностей класса для двоичной и мультиклассовой классификации для наблюдения Xj. C - матрица затрат, сохраненная в Cost свойство модели.

  2. Для наблюдения j предсказать метку класса, соответствующую минимальной ожидаемой стоимости неправильной классификации:

    y ^ j = аргминк = 1,..., Kγ jk.

  3. Используя C, определите затраты, понесенные (cj) для составления прогноза.

Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию

L=∑j=1nwjcj.

Если используется матрица затрат по умолчанию (значение элемента которой равно 0 для правильной классификации и 1 для неправильной классификации), то 'mincost' убыток эквивалентен 'classiferror' потери.

Квадратичные потери'quadratic'L=∑j=1nwj (1 mj) 2.

На этом рисунке сравниваются функции потерь (за исключением 'mincost') над баллом м для одного наблюдения. Некоторые функции нормализуются для прохождения через точку (0,1).

Comparison of classification losses for different loss functions

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