resubLoss

Потери по классификации реституции

    Описание

    пример

    L = resubLoss(Mdl) возвращает Classification Loss by resubstitution (L), или в выборке classification loss, для обученной классификационной модели Mdl использование обучающих данных, хранящихся в Mdl.X и соответствующие метки классов, хранящиеся в Mdl.Y.

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

    пример

    L = resubLoss(Mdl,Name,Value) задает дополнительные опции, используя один или несколько аргументов имя-значение. Для примера, 'LossFun','binodeviance' устанавливает функцию потерь в функцию биномиального отклонения.

    Примеры

    свернуть все

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

    Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит четыре измерения для 150 ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

    load fisheriris
    X = meas;
    Y = species;

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

    Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'})
    Mdl = 
      ClassificationNaiveBayes
                  ResponseName: 'Y'
         CategoricalPredictors: []
                    ClassNames: {'setosa'  'versicolor'  'virginica'}
                ScoreTransform: 'none'
               NumObservations: 150
             DistributionNames: {'normal'  'normal'  'normal'  'normal'}
        DistributionParameters: {3x4 cell}
    
    
      Properties, Methods
    
    

    Mdl является обученным ClassificationNaiveBayes классификатор.

    Оцените ошибку классификации в выборке.

    L = resubLoss(Mdl)
    L = 0.0400
    

    Наивный классификатор Байеса неправильно классифицирует 4% обучающих наблюдений.

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

    load ionosphere

    Обучите классификатор машины опорных векторов (SVM). Стандартизируйте данные и задайте, что 'g' - положительный класс.

    SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

    SVMModel является обученным ClassificationSVM классификатор.

    Оцените потери шарнира в образце.

    L = resubLoss(SVMModel,'LossFun','hinge')
    L = 0.1603
    

    Потеря шарнира 0.1603. Предпочтительными являются классификаторы с потерями шарниров, близкими к 0.

    Обучите обобщенную аддитивную модель (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
    k - ближайшая соседняя модельClassificationKNN
    Наивная модель БайесаClassificationNaiveBayes
    Модель нейронной сетиClassificationNeuralNetwork
    Поддерживайте векторную машину для одноклассовой и двоичной классификацииClassificationSVM

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

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

    Пример: resubLoss(Mdl,'LossFun','logit') оценивает потерю реституции логита.

    Флаг для включения условий взаимодействия модели, заданный как true или false. Этот аргумент действителен только для обобщенной аддитивной модели (GAM). То есть можно задать этот аргумент только тогда, когда Mdl является ClassificationGAM.

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

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

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

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

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

      Значение по умолчанию зависит от обученной модели (Mdl).

      • Значение по умолчанию 'classiferror' если Mdl является ClassificationGAM, ClassificationNeuralNetwork, или ClassificationSVM объект.

      • Значение по умолчанию 'mincost' если Mdl является ClassificationKNN или ClassificationNaiveBayes объект.

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

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

      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

    Подробнее о

    свернуть все

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

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

    Рассмотрим следующий сценарий.

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

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

    • Для двоичной классификации:

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

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

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

    • Для алгоритмов, которые поддерживают многоклассовую классификацию (то есть K ≥ 3):

      • yj* - вектор с K - 1 нулями, с 1 в положении, соответствующем истинному, наблюдаемому классу yj. Для примера, если истинный класс второго наблюдения является третьим классом и K = 4, то y 2* = [0 0 1 0]′. Порядок классов соответствует порядку в ClassNames свойство модели входа.

      • f (Xj) является вектором K длины счетов классов для j наблюдений X данных предиктора. Порядок счетов соответствует порядку классов в ClassNames свойство модели входа.

      • mj = yj*f (<reservedrangesplaceholder1>). Поэтому mj является скалярной классификационной оценкой, которую модель предсказывает для истинного наблюдаемого класса.

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

      j=1nwj=1.

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

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

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

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

    Потери перекрестной энтропии'crossentropy'

    'crossentropy' подходит только для моделей нейронных сетей.

    Взвешенные потери перекрестной энтропии

    L=j=1nw˜jlog(mj)Kn,

    где веса w˜j нормированы в сумме к n вместо 1.

    Экспоненциальные потери'exponential'L=j=1nwjexp(mj).
    Потеря шарнира'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.

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

    Comparison of classification losses for different loss functions

    Алгоритмы

    resubLoss вычисляет классификационные потери согласно соответствующей loss функция объекта (Mdl). Для описания модели смотрите loss функция, страницы с описанием в следующей таблице.

    МодельОбъект модели (Mdl)loss Функция объекта
    Обобщенная аддитивная модельClassificationGAMloss
    k - ближайшая соседняя модельClassificationKNNloss
    Наивная модель БайесаClassificationNaiveBayesloss
    Модель нейронной сетиClassificationNeuralNetworkloss
    Поддерживайте векторную машину для одноклассовой и двоичной классификацииClassificationSVMloss

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

    См. также

    | |

    Введенный в R2012a