loss

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

    Описание

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

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

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

    пример

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

    пример

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

    Примеры

    свернуть все

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

    Загрузите 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' потеря (misclassification уровень в десятичном числе).

    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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

    Отметьте, чтобы включать периоды взаимодействия модели в виде true или false.

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

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

    Типы данных: логический

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

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

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

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

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

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

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

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

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

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

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

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

    Пример: '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)).
    Минимальный ожидал стоимость misclassification'mincost'

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

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

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

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

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

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

      y^j=argmink=1,...,Kγjk.

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

    Взвешенное среднее минимального ожидало, что потеря стоимости misclassification

    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