ClassificationPartitionedGAM

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

    Описание

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

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

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

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

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

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

    Создание

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

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

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

    Свойства

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

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

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

    Перекрестное подтвержденное имя модели в виде 'GAM'.

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

    Количество перекрестных подтвержденных сгибов в виде положительного целого числа.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Misclassification стоит в виде числовой матрицы 2 на 2.

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

    Среднее значение misclassification уровень более чем 10 сгибов составляет приблизительно 7%.

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

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

    Введенный в R2021a