exponenta event banner

ClassificationPartitionedGAM

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

    Описание

    ClassificationPartitionedGAM представляет собой набор обобщенных аддитивных моделей, обученных на перекрестно проверенных складках. Оцените качество перекрестно проверенной классификации с помощью одной или нескольких функций kfold: kfoldPredict, kfoldLoss, kfoldMargin, kfoldEdge, и kfoldfun.

    Каждая функция kfold объекта использует модели, обученные тренировочным (кратным) наблюдениям, чтобы предсказать ответ для валидационных (многократных) наблюдений. Например, предположим, что выполняется перекрестная проверка с использованием пяти сгибов. Программное обеспечение случайным образом распределяет каждое наблюдение на пять групп одинакового размера (примерно). Тренировочная складка содержит четыре группы (примерно 4/5 данных), а проверочная складка содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка выполняется следующим образом:

    1. Программное обеспечение обучает первую модель (хранится в CVMdl.Trained{1}), используя наблюдения в последних четырех группах, и резервирует наблюдения в первой группе для проверки.

    2. Программное обеспечение обучает вторую модель (хранится в CVMdl.Trained{2}) с использованием наблюдений в первой и последних трех группах. Программа резервирует наблюдения во второй группе для проверки.

    3. Программное обеспечение работает аналогичным образом для третьей, четвертой и пятой моделей.

    При проверке с помощью kfoldPredictпрограммное обеспечение вычисляет прогнозы для наблюдений в группе i с использованием i-й модели. Короче говоря, программное обеспечение оценивает отклик для каждого наблюдения, используя модель, обученную без этого наблюдения.

    Создание

    Можно создать ClassificationPartitionedGAM модель двумя способами:

    • Создание перекрестно проверенной модели из объекта GAM ClassificationGAM с помощью crossval объектная функция.

    • Создайте модель с перекрестной проверкой с помощью fitcgam функция и указание одного из аргументов «имя-значение» 'CrossVal', 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Свойства

    развернуть все

    Свойства перекрестной проверки

    Это свойство доступно только для чтения.

    Имя модели с перекрестной проверкой, указанное как 'GAM'.

    Это свойство доступно только для чтения.

    Число перекрестно проверенных складок, указанное как положительное целое число.

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

    Это свойство доступно только для чтения.

    Значения параметров перекрестной проверки, заданные как объект. Значения параметров соответствуют значениям аргументов «имя-значение», используемых для перекрестной проверки обобщенной аддитивной модели. ModelParameters не содержит оценочных параметров.

    Вы можете получить доступ к свойствам ModelParameters с использованием точечной нотации.

    Это свойство доступно только для чтения.

    Раздел данных, указывающий, как программное обеспечение разбивает данные на складки перекрестной проверки, указанные как cvpartition модель.

    Это свойство доступно только для чтения.

    Компактные классификаторы, обученные складкам перекрестной проверки, указанные как массив ячеек CompactClassificationGAM объекты модели. Trained имеет k ячеек, где k - количество складок.

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

    Другие свойства классификации

    Это свойство доступно только для чтения.

    Индексы категориального предиктора, указанные как вектор положительных целых чисел. CategoricalPredictors содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).

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

    Это свойство доступно только для чтения.

    Уникальные метки классов, используемые в обучении, указанные как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. ClassNames имеет тот же тип данных, что и метки класса Y. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.) ClassNames также определяет порядок классов.

    Типы данных: single | double | logical | char | cell | categorical

    Затраты на неправильную классификацию, указанные как числовая матрица 2 на 2.

    Cost(i,j) - стоимость классификации точки по классу j если его истинный класс i. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

    Программное обеспечение использует Cost значение для прогнозирования, но не обучения. Значение можно изменить с помощью точечной нотации.

    Пример: Mdl.Cost = C;

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

    Это свойство доступно только для чтения.

    Количество наблюдений в данных обучения, хранящихся в X и Y, указывается как числовой скаляр.

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

    Это свойство доступно только для чтения.

    Имена переменных предиктора, заданные как массив ячеек векторов символов. Порядок элементов PredictorNames соответствует порядку, в котором имена предикторов появляются в данных обучения.

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

    Это свойство доступно только для чтения.

    Вероятности предшествующего класса, определенные как числовой вектор с двумя элементами. Порядок элементов соответствует порядку элементов в ClassNames.

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

    Это свойство доступно только для чтения.

    Имя ответной переменной, указанное как символьный вектор.

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

    Преобразование баллов, указанное как символьный вектор или дескриптор функции. ScoreTransform представляет встроенную функцию преобразования или дескриптор функции для преобразования прогнозируемых оценок классификации.

    Изменение функции преобразования баллов на function, например, использовать точечную нотацию.

    • Для встроенной функции введите символьный вектор.

      Mdl.ScoreTransform = 'function';

      В этой таблице описаны доступные встроенные функции.

      СтоимостьОписание
      'doublelogit'1/( 1 + e-2x)
      'invlogit'log (x/( 1 - x))
      'ismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в 0
      'logit'1/( 1 + e-x)
      'none' или 'identity'x (без преобразования)
      'sign'-1 для x < 0
      0 для x = 0
      1 для x > 0
      'symmetric'2x – 1
      'symmetricismax'Устанавливает балл для класса с наибольшим баллом в 1 и устанавливает балл для всех остальных классов в -1
      'symmetriclogit'2/( 1 + e-x) - 1

    • Для определяемой функции MATLAB ® или функции введите ее дескриптор.

      Mdl.ScoreTransform = @function;

      function должен принять матрицу (исходные баллы) и вернуть матрицу того же размера (преобразованные баллы).

    Это свойство определяет вычисление выходного балла для функций объекта, таких как kfoldPredict, kfoldMargin, и kfoldEdge. Использовать 'logit' для вычисления задних вероятностей и использования 'none' для вычисления логита задних вероятностей.

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

    Это свойство доступно только для чтения.

    Веса наблюдений, используемые для обучения модели, заданные как n-by-1 числовой вектор. n - количество наблюдений (NumObservations).

    Программное обеспечение нормализует веса наблюдения, указанные в 'Weights' аргумент имя-значение, чтобы элементы W внутри конкретного класса суммируется с предшествующей вероятностью этого класса.

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

    Это свойство доступно только для чтения.

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

    Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

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

    Это свойство доступно только для чтения.

    Метки классов, используемые для перекрестной проверки модели, указанные как категориальный или символьный массив, логический или числовой вектор или массив ячеек символьных векторов. Y имеет тот же тип данных, что и переменная ответа, используемая для обучения модели. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

    Каждая строка Y представляет наблюдаемую классификацию соответствующей строки X.

    Типы данных: single | double | logical | char | cell | categorical

    Функции объекта

    kfoldPredictКлассификация наблюдений в перекрестно проверенной модели классификации
    kfoldLossПотеря классификации для перекрестно проверенной модели классификации
    kfoldMarginПоля классификации для перекрестно проверенной модели классификации
    kfoldEdgeКрай классификации для перекрестно проверенной модели классификации
    kfoldfunФункция перекрестной проверки для классификации

    Примеры

    свернуть все

    Подготовка перекрестно проверенного GAM с 10 складками, который является опцией перекрестной проверки по умолчанию, с помощью fitcgam. Затем используйте kfoldPredict прогнозировать метки классов для валидационных наблюдений с использованием модели, обученной на тренировочных наблюдениях.

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

    load ionosphere

    Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Укажите 'CrossVal' аргумент имя-значение как 'on'.

    rng('default') % For reproducibility
    CVMdl = fitcgam(X,Y,'CrossVal','on')
    CVMdl = 
      ClassificationPartitionedGAM
        CrossValidatedModel: 'GAM'
             PredictorNames: {1x34 cell}
               ResponseName: 'Y'
            NumObservations: 351
                      KFold: 10
                  Partition: [1x1 cvpartition]
          NumTrainedPerFold: [1x1 struct]
                 ClassNames: {'b'  'g'}
             ScoreTransform: 'logit'
    
    
      Properties, Methods
    
    

    fitcgam функция создает ClassificationPartitionedGAM объект модели CVMdl с 10 складками. Во время перекрестной проверки программное обеспечение выполняет следующие действия:

    1. Произвольно разбить данные на 10 наборов.

    2. Для каждого набора зарезервируйте набор в качестве данных проверки и обучайте модель, используя другие 9 наборов.

    3. Храните 10 компактных обученных моделей в клеточном векторе 10 на 1 в Trained свойство объекта перекрестной проверки модели ClassificationPartitionedGAM.

    Можно переопределить настройку перекрестной проверки по умолчанию с помощью 'CVPartition', 'Holdout', 'KFold', или 'Leaveout' аргумент «имя-значение».

    Классифицировать наблюдения в X с помощью kfoldPredict. Функция предсказывает метки классов для каждого наблюдения, используя модель, обученную без этого наблюдения.

    label = kfoldPredict(CVMdl);

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

    C = confusionchart(Y,label);

    Figure contains an object of type ConfusionMatrixChart.

    Вычислите ошибку классификации.

    L = kfoldLoss(CVMdl)
    L = 0.0712
    

    Средняя степень неправильной классификации за 10 складок составляет около 7%.

    Обучение GAM с помощью fitcgamи создайте кросс-проверенный GAM с помощью crossval и вариант удержания. Затем используйте kfoldPredict прогнозировать ответы для валидационных наблюдений с использованием модели, обученной на тренировочных наблюдениях.

    Загрузка данных переписи 1994 года, хранящихся в census1994.mat. Набор данных состоит из демографических данных Бюро переписи населения США для прогнозирования того, составляет ли человек более 50 000 долларов в год. Задача классификации состоит в том, чтобы соответствовать модели, которая предсказывает категорию зарплаты людей с учетом их возраста, рабочего класса, уровня образования, семейного положения, расы и так далее.

    load census1994

    census1994 содержит набор данных обучения adultdata и набор тестовых данных adulttest. Чтобы сократить время работы для этого примера, выполните пример 500 учебных наблюдений из adultdata с помощью datasample функция.

    rng('default')
    NumSamples = 5e2;
    adultdata = datasample(adultdata,NumSamples,'Replace',false);

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

    Mdl = fitcgam(adultdata,'salary','Interactions','all','MaxPValue',0.05);

    Mdl является ClassificationGAM объект модели.

    Выполните перекрестную проверку модели, указав 30% -ный образец удержания.

    CVMdl = crossval(Mdl,'Holdout',0.3)
    CVMdl = 
      ClassificationPartitionedGAM
          CrossValidatedModel: 'GAM'
               PredictorNames: {1x14 cell}
        CategoricalPredictors: [2 4 6 7 8 9 10 14]
                 ResponseName: 'salary'
              NumObservations: 500
                        KFold: 1
                    Partition: [1x1 cvpartition]
            NumTrainedPerFold: [1x1 struct]
                   ClassNames: [<=50K    >50K]
               ScoreTransform: 'logit'
    
    
      Properties, Methods
    
    

    crossval функция создает ClassificationPartitionedGAM объект модели CVMdl с опцией удержания. Во время перекрестной проверки программное обеспечение выполняет следующие действия:

    1. Случайный выбор и резервирование 30% данных в качестве данных проверки и обучение модели с использованием остальных данных.

    2. Храните компактную обучаемую модель в Trained свойство объекта перекрестной проверки модели ClassificationPartitionedGAM.

    Можно выбрать другой параметр перекрестной проверки с помощью 'CrossVal', 'CVPartition', 'KFold', или 'Leaveout' аргумент «имя-значение».

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

    [labels,scores] = kfoldPredict(CVMdl);

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

    idx = find(sum(abs(scores),2)~=0);

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

    C = confusionchart(adultdata.salary(idx),labels(idx));

    Figure contains an object of type ConfusionMatrixChart.

    L = kfoldLoss(CVMdl)
    L = 0.1867
    

    Обучение перекрестно проверенной обобщенной аддитивной модели (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 без перекрестной проверки.

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