exponenta event banner

ClassificationGAM

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

    Описание

    A 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

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

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

    Это свойство определяет вычисление выходного балла для функций объекта, таких как 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Создание графиков частичной зависимости (PDP) и индивидуального условного ожидания (ICE)
    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, который содержит четыре линейных члена (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-й Международной конференции АСМ СИГКДД по вопросам обнаружения знаний и интеллектуального анализа данных (KDD "12). Пекин, Китай: ACM Press, 2012, стр. 150-158.

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

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