ClassificationGAM

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

    Описание

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

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

    Создание

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

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

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

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

    Свойства

    расширить все

    Свойства GAM

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

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

    Программное обеспечение помещает числовые предикторы только, если вы задаете 'NumBins' аргумент имя-значение как положительный целочисленный скаляр при обучении модели с учениками дерева. The 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 значения NaNс.

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

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

    Индексы терминов взаимодействия, заданные как t-by-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

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

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

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

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

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

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

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

    ExpandedPredictorNames то же, что и PredictorNames для обобщенной аддитивной модели.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    расширить все

    compactУменьшите размер модели машинного обучения
    crossvalПерекрестная валидация модели машинного обучения
    addInteractionsДобавьте условия взаимодействия в одномерную обобщенную аддитивную модель (GAM)
    resumeВозобновите обучение обобщенной аддитивной модели (GAM)
    limeЛокальные интерпретируемые модели-агностические объяснения (LIME)
    partialDependenceВычисление частичной зависимости
    plotLocalEffectsПостройте график локальных эффектов терминов в обобщенной аддитивной модели (GAM)
    plotPartialDependenceСоздайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE)
    shapleyЗначения 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.

    The predict функция классифицирует первые X(1,:) наблюдения как 'g'. The 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, который содержит четыре линейных условия (x1, x2, 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 Press, 2013, стр. 623-631.

    Введенный в R2021a