loss

Классификационные потери для обобщенной аддитивной модели (GAM)

    Описание

    L = loss(Mdl,Tbl,ResponseVarName) возвращает классификационные потери (L), скаляр, представляющий как хорошо обобщенная аддитивная модель Mdl классифицирует данные предиктора в Tbl по сравнению с истинными метками классов в Tbl.ResponseVarName.

    Толкование L зависит от функции потерь ('LossFun') и схемы взвешивания ('Weights'). В целом лучшие классификаторы дают меньшие значения классификационных потерь. Значение по умолчанию 'LossFun' значение 'classiferror' (коэффициент неправильной классификации в десятичном числе).

    L = loss(Mdl,Tbl,Y) использует данные предиктора в таблице Tbl и истинные метки классов в Y.

    пример

    L = loss(Mdl,X,Y) использует данные предиктора в матрице X и истинные метки классов в Y.

    пример

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

    Примеры

    свернуть все

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

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

    load ionosphere

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

    rng('default') % For reproducibility
    cv = cvpartition(Y,'HoldOut',0.30);

    Извлеките индексы обучения и тестирования.

    trainInds = training(cv);
    testInds = test(cv);

    Укажите наборы обучающих и тестовых данных.

    XTrain = X(trainInds,:);
    YTrain = Y(trainInds);
    XTest = X(testInds,:);
    YTest = Y(testInds);

    Обучите GAM с помощью предикторов XTrain и метки классов YTrain. Рекомендуемая практика состоит в том, чтобы задать имена классов.

    Mdl = fitcgam(XTrain,YTrain,'ClassNames',{'b','g'});

    Mdl является ClassificationGAM объект модели.

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

    L = loss(Mdl,XTest,YTest)
    L = 0.1052
    

    Обученный классификатор неправильно классифицирует приблизительно 11% тестовой выборки.

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

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

    load ionosphere

    Разделите набор данных на два набора: один, содержащий обучающие данные, и другой, содержащий новые, незащищенные тестовые данные. Резервируйте 50 наблюдений для нового набора тестовых данных.

    rng('default') % For reproducibility
    n = size(X,1);
    newInds = randsample(n,50);
    inds = ~ismember(1:n,newInds);
    XNew = X(newInds,:);
    YNew = Y(newInds);

    Обучите GAM с помощью предикторов X и метки классов Y. Рекомендуемая практика состоит в том, чтобы задать имена классов. Укажите, чтобы включить 10 наиболее важных условий взаимодействия.

    Mdl = fitcgam(X(inds,:),Y(inds),'ClassNames',{'b','g'},'Interactions',10)
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'logit'
                    Intercept: 2.0026
                 Interactions: [10x2 double]
              NumObservations: 301
    
    
      Properties, Methods
    
    

    Mdl является ClassificationGAM объект модели.

    Вычислите потери классификации реституции как с терминами взаимодействия, так и без них в Mdl. Чтобы исключить условия взаимодействия, задайте 'IncludeInteractions',false.

    resubl = resubLoss(Mdl)
    resubl = 0
    
    resubl_nointeraction = resubLoss(Mdl,'IncludeInteractions',false)
    resubl_nointeraction = 0
    

    Оцените классификационные потери как с терминами взаимодействия, так и без них в Mdl.

    l = loss(Mdl,XNew,YNew)
    l = 0.0615
    
    l_nointeraction = loss(Mdl,XNew,YNew,'IncludeInteractions',false)
    l_nointeraction = 0.0615
    

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

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

    свернуть все

    Обобщенная аддитивная модель, заданная как ClassificationGAM или CompactClassificationGAM объект модели.

    • Если вы тренировались Mdl используя выборочные данные, содержащуюся в таблице, затем входные данные для loss должно быть также в таблице (Tbl).

    • Если вы тренировались Mdl использование выборочных данных, содержащихся в матрице, затем входных данных для loss должно быть также в матрице (X).

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

    Tbl должны содержать все предикторы, используемые для обучения Mdl. Опционально Tbl может содержать столбец для переменной отклика и столбец для весов наблюдений.

    • Переменная отклика должна иметь совпадающий тип данных что и Mdl.Y. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.) Если переменная отклика в Tbl имеет то же имя что и переменная отклика, используемая для обучения Mdl, тогда вам не нужно указывать ResponseVarName.

    • Значения веса должны быть числовым вектором. Необходимо задать веса наблюдений в Tbl при помощи 'Weights'.

    Если вы тренировались Mdl используя выборочные данные, содержащуюся в таблице, затем входные данные для loss также должно быть в таблице.

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

    Имя переменной отклика, заданное как вектор символов или строковый скаляр, содержащий имя переменной отклика в Tbl. Для примера, если переменная отклика Y хранится в Tbl.Y, затем укажите его следующим 'Y'.

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

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

    Y должны иметь тот совпадающий тип данных, что и Mdl.Y. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

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

    Данные предиктора, заданные как числовая матрица. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора.

    Если вы тренировались Mdl использование выборочных данных, содержащихся в матрице, затем входных данных для loss должно быть также в матрице.

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

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

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

    Пример: 'IncludeInteractions',false,'Weights',w задает, чтобы исключить условия взаимодействия из модели и использовать веса наблюдений w.

    Флаг для включения условий взаимодействия модели, заданный как true или false.

    Значение по умолчанию 'IncludeInteractions' значение true если Mdl содержит условия взаимодействия. Значение должно быть false если модель не содержит членов взаимодействия.

    Пример: 'IncludeInteractions',false

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

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

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

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

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

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

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

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

      • Вы задаете имя функции (lossfun).

      • C является n-by- K логическая матрица с строками, указывающими класс, к которому принадлежит соответствующее наблюдение. n количество наблюдений в Tbl или X, и K - количество различных классов (numel(Mdl.ClassNames). Порядок столбцов соответствует порядку классов в Mdl.ClassNames. Создание C путем установки C(p,q) = 1, если наблюдение p находится в q классов, для каждой строки. Установите все другие элементы строки p на 0.

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

      • W является n-by-1 числовой вектор весов наблюдений.

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

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

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

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

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

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

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

    Подробнее о

    свернуть все

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

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

    Предположим следующее:

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

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

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

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

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

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

      j=1nwj=1.

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

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

    L=j=1nwjI{y^jyj}.

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

    Потеря шарнира'hinge'L=j=1nwjmax{0,1mj}.
    Логит потеря'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=argmink=1,...,Kγjk.

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

    Взвешенное среднее значение минимальных ожидаемых потерь от неправильной классификации

    L=j=1nwjcj.

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

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

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

    Comparison of classification losses for different loss functions

    Введенный в R2021a