ClassificationPartitionedGAM

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

    Описание

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

    Каждая функция объекта kfold использует модели, обученные на обучающих-складных (in-fold) наблюдениях, чтобы предсказать ответ для наблюдений валидации-складки (out-of-fold). Например, предположим, что вы перекрестно проверяете с помощью пяти складок. Программа случайным образом присваивает каждое наблюдение пяти группам равного размера (примерно). training fold содержит четыре группы (примерно 4/5 данных), а validation fold - другую группу (примерно 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.

    Стоимость (i, j) - стоимость классификации точки в класс j если его класс true 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'журнал (x/( 1 - x))
      'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
      'logit'1/(1 + ex)
      'none' или 'identity'x (без преобразования)
      'sign'-1 для x < 0
      0 для x = 0
      1 для x > 0
      'symmetric'2 x – 1
      'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
      'symmetriclogit'2/(1 + ex) – 1

    • Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию.

      Mdl.ScoreTransform = @function;

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

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

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

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

    Веса наблюдений, используемые для обучения модели, заданные как n-на-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
    
    

    The 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
    
    

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

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

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

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

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

    [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 функция. Для получения примера смотрите Оптимизацию Перекрестно Проверенной 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 без перекрестной проверки.

    Введенный в R2021a