kfoldLoss

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

    Описание

    пример

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

    пример

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

    Примеры

    свернуть все

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

    load ionosphere

    Вырастите классификационное дерево.

    tree = fitctree(X,Y);

    Перекрестная проверка дерева классификации с помощью 10-кратной перекрестной проверки.

    cvtree = crossval(tree);

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

    L = kfoldLoss(cvtree)
    L = 0.1083
    

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

    load ionosphere

    Обучите классификационный ансамбль из 100 деревьев решений с помощью AdaBoostM1. Задайте древовидные пни как слабые ученики.

    t = templateTree('MaxNumSplits',1);
    ens = fitcensemble(X,Y,'Method','AdaBoostM1','Learners',t);

    Перекрестная валидация ансамбля с помощью 10-кратной перекрестной валидации.

    cvens = crossval(ens);

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

    L = kfoldLoss(cvens)
    L = 0.0655
    

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

    Также можно найти оптимальные значения fitcgam аргументы имя-значение при помощи bayesopt функция. Для получения примера смотрите Оптимизацию Перекрестно Проверенной GAM Используя bayesopt.

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

    load ionosphere

    Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal' аргумент имя-значение как 'on'. Задайте, чтобы включить все доступные условия взаимодействия, значения p которых не более 0,05.

    rng('default') % For reproducibility
    CVMdl = fitcgam(X,Y,'CrossVal','on','Interactions','all','MaxPValue',0.05);

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

    CVMdl.NumTrainedPerFold 
    ans = struct with fields:
          PredictorTrees: [65 64 59 61 60 66 65 62 64 61]
        InteractionTrees: [1 2 2 2 2 1 2 2 2 2]
    
    

    kfoldLoss может вычислить совокупные ошибки, используя до 59 деревьев предикторов и одно дерево взаимодействия.

    Постройте график кумулятивной, 10-кратной перекрестной ошибки классификации (коэффициент неправильной классификации в десятичных числах). Задайте 'IncludeInteractions' как false исключить условия взаимодействия из расчетов.

    L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false);
    figure
    plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)

    Figure contains an axes. The axes contains an object of type line.

    Первый элемент L_noInteractions - средняя ошибка по всем складкам, полученная с использованием только термина точка пересечения (константа). The (J+1) первый элемент L_noInteractions - средняя ошибка, полученная с помощью термина точки пересечения и первого J деревья предикторов на линейный член. Построение графика совокупных потерь позволяет вам контролировать, как изменяется ошибка, когда количество деревьев предикторов в GAM увеличивается.

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

    [M,I] = min(L_noInteractions)
    M = 0.0655
    
    I = 23
    

    GAM достигает минимальной ошибки, когда включает 22 дерева предикторов.

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

    L = kfoldLoss(CVMdl,'Mode','cumulative')
    L = 2×1
    
        0.0712
        0.0712
    
    

    Первый элемент L - средняя ошибка по всем складкам, полученная с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. Второй элемент L - средняя ошибка, полученная с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и одного дерева взаимодействия на термин взаимодействия. Ошибка не уменьшается при добавлении условий взаимодействия.

    Если вас устраивает ошибка, когда количество деревьев предикторов составляет 22, можно создать прогнозирующую модель, снова обучив одномерную GAM и задав 'NumTreesPerPredictor',22 без перекрестной проверки.

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

    свернуть все

    Перекрестный проверенный секционированный классификатор, заданный как ClassificationPartitionedModel, ClassificationPartitionedEnsemble, или ClassificationPartitionedGAM объект. Можно создать объект двумя способами:

    • Передайте обученную классификационную модель, перечисленную в следующей таблице, в свою crossval функция объекта.

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

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

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

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

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

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

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

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

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

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

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

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

    • Значение по умолчанию 'classiferror' если тип модели является ансамблем, обобщенной аддитивной моделью, нейронной сетью или классификатором машины опорных векторов.

    • Значение по умолчанию 'mincost' если тип модели является дискриминантным анализом, k ближайшим соседом, наивным классификатором Байеса или дерева.

    'classiferror' и 'mincost' эквивалентны при использовании матрицы затрат по умолчанию. Смотрите Алгоритмы для получения дополнительной информации.

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

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

      'mincost' подходит для классификационных оценок, которые являются апостериорными вероятностями. predict и kfoldPredict функции дискриминантного анализа, обобщенной аддитивной модели, k ближайшего соседа, наивного Байеса, нейронной сети и классификаторов деревьев возвращают такие счета по умолчанию .

      • Для моделей ансамбля, которые используют 'Bag' или 'Subspace' методы, классификационные оценки по умолчанию являются апостериорными вероятностями. Для моделей ансамбля, которые используют 'AdaBoostM1', 'AdaBoostM2', GentleBoost, или 'LogitBoost' методы, можно использовать апостериорные вероятности как классификационные оценки путем определения double-logit счета преобразования. Для примера введите:

        CVMdl.ScoreTransform = 'doublelogit';
        Для всех других методов ансамбля программное обеспечение не поддерживает апостериорные вероятности как классификационные оценки.

      • Для моделей SVM можно задать использование апостериорных вероятностей классификационных оценок путем установки 'FitPosterior',true когда вы перекрестно проверяете модель используя fitcsvm.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Уровень агрегации для выхода, заданный как 'average', 'individual', или 'cumulative'.

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

    Примечание

    Если вы хотите задать это значение, CVMdl должен быть ClassificationPartitionedEnsemble объект или ClassificationPartitionedGAM объект.

    • Если CVMdl является ClassificationPartitionedEnsemble, тогда выход является вектором длины min(CVMdl.NumTrainedPerFold). Каждый элемент j является средним значением по всем складкам, которые функция получает с помощью ансамблей, обученных со слабыми учениками 1:j.

    • Если CVMdl является ClassificationPartitionedGAM, тогда выход значение зависит от IncludeInteractions значение.

      • Если IncludeInteractions является false, затем L является   (1 + min(NumTrainedPerFold.PredictorTrees))-by-1 числовой вектор-столбец. Первый элемент L является средним значением по всем складкам, который получен только член точки пересечения (константа). The   (j + 1)первый элемент L - среднее значение, полученное с помощью термина точки пересечения и первого j деревья предикторов на линейный член.

      • Если IncludeInteractions является true, затем L является   (1 + min(NumTrainedPerFold.InteractionTrees))-by-1 числовой вектор-столбец. Первый элемент L - это среднее значение по всем складкам, которое получается с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. The   (j + 1)первый элемент L - это среднее значение, полученное с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и первого j деревья взаимодействия на срок взаимодействия.

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

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

    свернуть все

    Классификационные потери, возвращенные как числовой скаляр или числовой вектор-столбец.

    • Если Mode является 'average', затем L - средние классификационные потери по всем складкам.

    • Если Mode является 'individual', затем L является k числовым вектором-1, содержащим классификационные потери для каждой складки, где k количество складок.

    • Если Mode является 'cumulative' и CVMdl является ClassificationPartitionedEnsemble, затем L является min(CVMdl.NumTrainedPerFold)-by-1 числовой вектор-столбец. Каждый элемент j - средняя потеря классификации по всем складкам, которую получает функция с помощью ансамблей, обученных со слабыми учениками 1:j.

    • Если Mode является 'cumulative' и CVMdl является ClassificationPartitionedGAM, тогда выход значение зависит от IncludeInteractions значение.

      • Если IncludeInteractions является false, затем L является   (1 + min(NumTrainedPerFold.PredictorTrees))-by-1 числовой вектор-столбец. Первый элемент L - средние классификационные потери по всем складкам, которые получаются с использованием только термина точка пересечения (константа). The   (j + 1)первый элемент L - средняя потеря, полученная с использованием термина точки пересечения и первого j деревья предикторов на линейный член.

      • Если IncludeInteractions является true, затем L является   (1 + min(NumTrainedPerFold.InteractionTrees))-by-1 числовой вектор-столбец. Первый элемент L - средние классификационные потери по всем складкам, которые получаются с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. The   (j + 1)первый элемент L - средняя потеря, полученная с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и первого j деревья взаимодействия на срок взаимодействия.

    Подробнее о

    свернуть все

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

    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

    Алгоритмы

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

    Тип моделиloss Функция
    Классификатор дискриминантного анализаloss
    Классификатор ансамбляloss
    Обобщенный классификатор аддитивной моделиloss
    k - ближайший соседний классификаторloss
    Наивный классификатор Байесаloss
    Классификатор нейронной сетиloss
    Машина опорных векторовloss
    Двоичное дерево принятия решений для многоклассовой классификацииloss

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

    Введенный в R2011a