kfoldLoss

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

    Описание

    пример

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

    пример

    L = kfoldLoss(CVMdl,Name,Value) возвращает потерю классификации с дополнительными опциями, заданными одними или несколькими аргументами 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 вычислить совокупные ошибки классификации перекрестных проверок (misclassification уровень в десятичном числе). Используйте ошибки определить оптимальное количество деревьев на предиктор (линейный член для предиктора) и оптимальное количество деревьев в период взаимодействия.

    В качестве альтернативы можно найти оптимальные значения fitcgam аргументы name-value при помощи аргумента значения имени OptimizeHyperparameters. Для примера смотрите, Оптимизируют GAM Используя OptimizeHyperparameters.

    Загрузите 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-кратное, ошибка классификации (misclassification уровень в десятичном числе). Задайте 'IncludeInteractions' как false исключить периоды взаимодействия из расчета.

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

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

    Первый элемент L_noInteractions средняя погрешность по всем сгибам, полученным с помощью только точку пересечения (постоянный) термин. (J+1) элемент th 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,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 если модели не содержат периоды взаимодействия.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Задайте свое использование функции '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))- 1 числовой вектор-столбец. Первый элемент L среднее значение по всем сгибам, которое получено только точка пересечения (постоянный) термин.   (j + 1)элемент th L полученное использование среднего значения термина точки пересечения и первого j деревья предиктора на линейный член.

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

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

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

    свернуть все

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

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

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

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

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

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

      • Если IncludeInteractions true, затем L   (1 + min(NumTrainedPerFold.InteractionTrees))- 1 числовой вектор-столбец. Первый элемент L средняя потеря классификации по всем сгибам, которая получена с помощью точки пересечения (постоянный) термин и все деревья предиктора на линейный член.   (j + 1)элемент th 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 (Xj). Поэтому 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)).
    Минимальный ожидал стоимость 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.

    Этот рисунок сравнивает функции потерь (кроме '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