ClassificationGAM

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

    Описание

    ClassificationGAM объект является объектом обобщенной аддитивной модели (GAM) для бинарной классификации. Это - поддающаяся толкованию модель, которая объясняет баллы класса (логит вероятностей класса) использование суммы одномерных и двумерных функций формы.

    Можно классифицировать новые наблюдения при помощи predict функция и график эффект каждой функции формы на предсказании (счет класса) для наблюдения при помощи plotLocalEffects функция. Для полного списка объектных функций для ClassificationGAM, см. Функции объекта.

    Создание

    Создайте ClassificationGAM объект при помощи fitcgam. Можно задать и линейные члены и периоды взаимодействия для предикторов, чтобы включать одномерные функции формы (деревья предиктора) и двумерные функции формы (деревья взаимодействия) в обученной модели, соответственно.

    Можно обновить обученную модель при помощи resume или addInteractions.

    • resume функционируйте возобновляет обучение существующим условиям в модели.

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

    Свойства

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

    Свойства GAM

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

    Границы интервала для числовых предикторов в виде массива ячеек p числовые векторы, где p является количеством предикторов. Каждый вектор включает границы интервала для числового предиктора. Элемент в массиве ячеек для категориального предиктора пуст, потому что программное обеспечение не делает интервала категориальные предикторы.

    Числовые предикторы интервалов программного обеспечения, только если вы задаете 'NumBins' аргумент значения имени как положительный целочисленный скаляр, когда обучение модель с древовидными учениками. BinEdges свойство пусто если 'NumBins' значение пусто (значение по умолчанию).

    Можно воспроизвести сгруппированные данные о предикторе Xbinned при помощи BinEdges свойство обученной модели mdl.

    X = mdl.X; % Predictor data
    Xbinned = zeros(size(X));
    edges = mdl.BinEdges;
    % Find indices of binned predictors.
    idxNumeric = find(~cellfun(@isempty,edges));
    if iscolumn(idxNumeric)
        idxNumeric = idxNumeric';
    end
    for j = idxNumeric 
        x = X(:,j);
        % Convert x to array if x is a table.
        if istable(x) 
            x = table2array(x);
        end
        % Group x into bins by using the discretize function.
        xbinned = discretize(x,[-inf; edges{j}; inf]); 
        Xbinned(:,j) = xbinned;
    end
    Xbinned содержит индексы интервала, в пределах от 1 к количеству интервалов, для числовых предикторов. Xbinned значения 0 для категориальных предикторов. Если X содержит NaNs, затем соответствующий Xbinned значениями является NaNs.

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

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

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

    Программное обеспечение добавляет периоды взаимодействия в модель в порядке важности на основе p - значения. Используйте это свойство проверять порядок периодов взаимодействия, добавленных к модели.

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

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

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

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

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

    Параметры раньше обучали модель в виде объекта параметра модели. ModelParameters содержит значения параметров, такие как те для аргументов значения имени, используемых, чтобы обучить модель. ModelParameters не содержит оцененные параметры.

    Доступ к полям ModelParameters при помощи записи через точку. Например, получите доступ к максимальному количеству разделений решения на дерево взаимодействия при помощи Mdl.ModelParameters.MaxNumSplitsPerInteraction.

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

    Границы интервала для обнаружения периода взаимодействия для числовых предикторов в виде массива ячеек p числовые векторы, где p является количеством предикторов. Каждый вектор включает границы интервала для числового предиктора. Элемент в массиве ячеек для категориального предиктора пуст, потому что программное обеспечение не делает интервала категориальные предикторы.

    Ускорять процесс обнаружения периода взаимодействия, интервалы программного обеспечения числовые предикторы в самое большее 8 равновероятных интервалов. Количество интервалов может быть меньше 8, если предиктор имеет меньше чем 8 уникальных значений.

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

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

    Обоснуйте обучение остановки модели в виде структуры с двумя полями, PredictorTrees и InteractionTrees.

    Используйте это свойство проверять, содержит ли модель конкретное количество деревьев для каждого линейного члена ('NumTreesPerPredictor') и в течение каждого периода взаимодействия ('NumTreesPerInteraction'). Если fitcgam функция отключает обучение прежде, чем добавить конкретное количество деревьев, это свойство содержит причину завершения.

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

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

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

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

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

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

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

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

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

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

    Программное обеспечение использует Cost значение для предсказания, но не обучение. Можно изменить значение при помощи записи через точку.

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

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

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

    Расширенный предиктор называет в виде массива ячеек из символьных векторов.

    ExpandedPredictorNames совпадает с PredictorNames для обобщенной аддитивной модели.

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

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

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

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

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

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

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

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

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

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

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

    Имя переменной отклика в виде вектора символов.

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

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

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

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

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

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

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

      Mdl.ScoreTransform = 'function';

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

      ЗначениеОписание
      'doublelogit'1/(1 + e –2x)
      'invlogit'журнал (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 должен принять матрицу (исходные баллы) и возвратить матрицу, одного размера (преобразованные баллы).

    Это свойство определяет выходной расчет счета для объектных функций такой как predict, margin, и edge. Используйте '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

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

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

    compactУменьшайте размер модели машинного обучения
    crossvalПерекрестный подтвердите модель машинного обучения
    addInteractionsДобавьте периоды взаимодействия в одномерную обобщенную аддитивную модель (GAM)
    resumeВозобновите обучение обобщенной аддитивной модели (GAM)
    limeЛокальные поддающиеся толкованию объяснения модели агностические (LIME)
    partialDependenceВычислите частичную зависимость
    plotLocalEffectsПостройте локальные эффекты условий в обобщенной аддитивной модели (GAM)
    plotPartialDependenceСоздайте графики отдельного условного ожидания (ICE) и частичный график зависимости (PDP)
    shapleyШепли оценивает
    predictКлассифицируйте наблюдения с помощью обобщенной аддитивной модели (GAM)
    lossПотеря классификации для обобщенной аддитивной модели (GAM)
    marginПоля классификации для обобщенной аддитивной модели (GAM)
    edgeРебро классификации для обобщенной аддитивной модели (GAM)
    resubPredictКлассифицируйте обучающие данные с помощью обученного классификатора
    resubLossПотеря классификации перезамены
    resubMarginПоле классификации перезамены
    resubEdgeРебро классификации перезамены
    compareHoldoutСравните точность двух моделей классификации с помощью новых данных
    testckfoldСравните точность двух моделей классификации повторной перекрестной проверкой

    Примеры

    свернуть все

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

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

    load ionosphere

    Обучите одномерный GAM, который идентифицирует, плох ли радарный возврат ('b') или хороший ('g').

    Mdl = fitcgam(X,Y)
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'logit'
                    Intercept: 2.2715
              NumObservations: 351
    
    
      Properties, Methods
    
    

    Mdl ClassificationGAM объект модели. Отображение модели показывает частичный список свойств модели. Чтобы просмотреть полный список свойств, дважды кликните имя переменной Mdl в Рабочей области. Редактор Переменных открывается для Mdl. В качестве альтернативы можно отобразить свойства в Командном окне при помощи записи через точку. Например, отобразите порядок класса Mdl.

    classOrder = Mdl.ClassNames
    classOrder = 2x1 cell
        {'b'}
        {'g'}
    
    

    Классифицируйте первое наблюдение за обучающими данными и постройте локальные эффекты условий в Mdl на предсказании.

    label = predict(Mdl,X(1,:))
    label = 1x1 cell array
        {'g'}
    
    
    plotLocalEffects(Mdl,X(1,:))

    Figure contains an axes. The axes with title Local Effects Plot contains an object of type bar.

    predict функция классифицирует первое наблюдение X(1,:) как 'g'. plotLocalEffects функция создает горизонтальный столбчатый график, который показывает локальные эффекты 10 самых важных условий на предсказании. Каждое локальное значение эффекта показывает вклад каждого термина к классификационной оценке для 'g', который является логитом апостериорной вероятности, что классификацией является 'g' для наблюдения.

    Обучите обобщенную аддитивную модель, которая содержит линейные члены и периоды взаимодействия для предикторов тремя различными способами:

    • Задайте периоды взаимодействия с помощью formula входной параметр.

    • Задайте 'Interactions' аргумент значения имени.

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

    Загрузите ирисовый набор данных Фишера. Составьте таблицу, которая содержит наблюдения для versicolor и virginica.

    load fisheriris
    inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
    tbl = array2table(meas(inds,:),'VariableNames',["x1","x2","x3","x4"]);
    tbl.Y = species(inds,:);

    Задайте formula

    Обучите GAM, который содержит эти четыре линейных члена (x1x2 , x3, и x4) и два периода взаимодействия (x1*x2 и x2*x3). Задайте условия с помощью формулы в форме 'Y ~ terms'.

    Mdl1 = fitcgam(tbl,'Y ~ x1 + x2 + x3 + x4 + x1:x2 + x2:x3');

    Функция добавляет периоды взаимодействия в модель в порядке важности. Можно использовать Interactions свойство проверять периоды взаимодействия в модель и порядок, в который fitcgam добавляет их в модель. Отобразите Interactions свойство.

    Mdl1.Interactions
    ans = 2×2
    
         2     3
         1     2
    
    

    Каждая строка Interactions представляет один период взаимодействия и содержит индексы столбца переменных предикторов в течение периода взаимодействия.

    Задайте 'Interactions'

    Передайте обучающие данные (tbl) и имя переменной отклика в tbl к fitcgam, так, чтобы функция включала линейные члены для всех других переменных как предикторы. Задайте 'Interactions' аргумент значения имени с помощью логической матрицы, чтобы включать эти два периода взаимодействия, x1*x2 и x2*x3.

    Mdl2 = fitcgam(tbl,'Y','Interactions',logical([1 1 0 0; 0 1 1 0]));
    Mdl2.Interactions
    ans = 2×2
    
         2     3
         1     2
    
    

    Можно также задать 'Interactions' как номер периодов взаимодействия или как 'all' включать все доступные периоды взаимодействия. Среди заданных периодов взаимодействия, fitcgam идентифицирует тех, p-значения которых не больше 'MaxPValue' значение и добавляет их в модель. 'MaxPValue' по умолчанию 1 так, чтобы функция добавила все заданные периоды взаимодействия в модель.

    Задайте 'Interactions','all' и набор 'MaxPValue' аргумент значения имени к 0,01.

    Mdl3 = fitcgam(tbl,'Y','Interactions','all','MaxPValue',0.01);
    Mdl3.Interactions
    ans = 5×2
    
         3     4
         2     4
         1     4
         2     3
         1     3
    
    

    Mdl3 включает пять из шести доступных пар периодов взаимодействия.

    Используйте addInteractions Функция

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

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

    Mdl4 = fitcgam(tbl,'Y');
    UpdatedMdl4 = addInteractions(Mdl4,5);
    UpdatedMdl4.Interactions
    ans = 5×2
    
         3     4
         2     4
         1     4
         2     3
         1     3
    
    

    Mdl4 одномерный GAM и UpdatedMdl4 обновленный GAM, который содержит все условия в Mdl4 и пять дополнительных периодов взаимодействия.

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

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

    load ionosphere

    Обучите одномерный GAM, который идентифицирует, плох ли радарный возврат ('b') или хороший ('g'). Задайте количество деревьев на линейный член как 2. fitcgam выполняет итерации повышающего алгоритма для конкретного количества итераций. Для каждой повышающей итерации функция добавляет одно дерево на линейный член. Задайте 'Verbose' как 2, чтобы отобразить диагностические сообщения в каждой итерации.

    Mdl = fitcgam(X,Y,'NumTreesPerPredictor',2,'Verbose',2);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    1D|         0|      486.59|      -     |      -     |
    |    1D|         1|      166.71|         Inf|           1|
    |    1D|         2|      78.336|     0.58205|           1|
    

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

    Mdl.ReasonForTermination
    ans = struct with fields:
          PredictorTrees: 'Terminated after training the requested number of trees.'
        InteractionTrees: ''
    
    

    Вычислите потерю классификации для обучающих данных.

    resubLoss(Mdl)
    ans = 0.0142
    

    Возобновите обучение модель еще для 100 итераций. Поскольку Mdl содержит только линейные члены, resume функционируйте возобновляет обучение линейным членам и добавляет больше деревьев для них (деревья предиктора). Задайте 'Verbose' и 'NumPrint' отобразить диагностические сообщения в каждых 10 итерациях.

    UpdatedMdl = resume(Mdl,100,'Verbose',1,'NumPrint',10);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    1D|         0|      78.336|      -     |      -     |
    |    1D|         1|      38.364|     0.17429|           1|
    |    1D|        10|     0.16311|    0.011894|           1|
    |    1D|        20|  0.00035693|   0.0025178|           1|
    |    1D|        30|  8.1191e-07|   0.0011006|           1|
    |    1D|        40|  1.7978e-09|  0.00074607|           1|
    |    1D|        50|  3.6113e-12|  0.00034404|           1|
    |    1D|        60|  1.7497e-13|  0.00016541|           1|
    
    UpdatedMdl.ReasonForTermination
    ans = struct with fields:
          PredictorTrees: 'Unable to improve the model fit.'
        InteractionTrees: ''
    
    

    resume отключает обучение, когда добавление большего количества деревьев не улучшает отклонение подгонки модели.

    Вычислите потерю классификации с помощью обновленной модели.

    resubLoss(UpdatedMdl)
    ans = 0
    

    Уменьшения классификации потерь после resume обновляет модель с большим количеством итераций.

    Больше о

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

    Ссылки

    [1] Лу, Инь, Рич Каруана и Джоханнс Джехрк. "Понятные Модели для Классификации и Регрессии". Продолжения 18-й Международной конференции ACM SIGKDD по вопросам Открытия Знаний и Анализа данных (KDD ’12). Пекин, Китай: Нажатие ACM, 2012, стр 150–158.

    [2] Лу, Инь, Рич Каруана, Джоханнс Джехрк и Джайлс Хукер. "Точные Понятные Модели с Попарными Взаимодействиями". Продолжения 19-й Международной конференции ACM SIGKDD по вопросам Открытия Знаний и Анализа данных (KDD ’13) Чикаго, Иллинойс, США: Нажатие ACM, 2013, стр 623–631.

    Введенный в R2021a