exponenta event banner

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 функция. Пример см. в разделе Оптимизация Cross-Validated GAM с использованием байесопта.

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

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

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

    • Укажите собственную функцию с помощью нотации дескриптора функции.

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

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

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

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

    Подробнее

    свернуть все

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

    Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.

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

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

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

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

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

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

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

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

      • yj * - вектор из K - 1 нулей, с 1 в положении, соответствующем истинному наблюдаемому классу yj. Например, если истинным классом второго наблюдения является третий класс и K = 4, то y2 * = [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^j≠yj}.

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

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

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

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

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

    где веса w˜j нормализуются для суммирования в n вместо 1.

    Экспоненциальные потери'exponential'L=∑j=1nwjexp (мдж).
    Потеря шарнира'hinge'L=∑j=1nwjmax{0,1−mj}.
    Потеря журнала'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 = аргминк = 1,..., Kγ jk.

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

    Средневзвешенное минимальное ожидаемое снижение затрат на неправильную классификацию

    L=∑j=1nwjcj.

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

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

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

    Comparison of classification losses for different loss functions

    Алгоритмы

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

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

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

    Представлен в R2011a