RegressionGAM

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

    Описание

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

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

    Создание

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

    Вы можете обновить обученную модель при помощи 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'). Если fitrgam функция завершает обучение перед добавлением заданного количества деревьев, это свойство содержит причину завершения.

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

    Другие регрессионные свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Функция преобразования отклика, заданная как 'none' или указатель на функцию. ResponseTransform описывает, как программное обеспечение преобразует значения необработанного отклика.

    Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию. Для примера можно ввести Mdl.ResponseTransform = @function, где function принимает числовой вектор исходных откликов и возвращает числовой вектор того же размера, содержащий преобразованные отклики.

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

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

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

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

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

    Веса наблюдений, используемые для обучения модели, заданные как n-на-1 числовой вектор. n - количество наблюдений (NumObservations).

    Программа нормализует веса наблюдений, указанные в 'Weights' аргумент имя-значение так, чтобы элементы W сумма до 1.

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

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

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

    Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

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

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

    Ответ, заданный как числовой вектор.

    Каждая строка Y представляет наблюдаемую реакцию соответствующей строки X.

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

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

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

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

    Примеры

    свернуть все

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

    Загрузите набор данных NYCHousing2015.

    load NYCHousing2015

    Набор данных включает 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует эти переменные для анализа продажных цен (SALEPRICE).

    Предварительно обработайте набор данных. Удалите выбросы, преобразуйте datetime массив (SALEDATE) на номера месяцев и переместите переменную отклика (SALEPRICE) до последнего столбца.

    idx = isoutlier(NYCHousing2015.SALEPRICE);
    NYCHousing2015(idx,:) = [];
    NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);
    NYCHousing2015 = movevars(NYCHousing2015,'SALEPRICE','After','SALEDATE');

    Отобразите первые три строки таблицы.

    head(NYCHousing2015,3)
    ans=3×10 table
        BOROUGH    NEIGHBORHOOD       BUILDINGCLASSCATEGORY        RESIDENTIALUNITS    COMMERCIALUNITS    LANDSQUAREFEET    GROSSSQUAREFEET    YEARBUILT    SALEDATE    SALEPRICE
        _______    ____________    ____________________________    ________________    _______________    ______________    _______________    _________    ________    _________
    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   0                4750              2619            1899           8           0    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   0                4750              2619            1899           8           0    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   1                1287              2528            1899          12           0    
    
    

    Обучите одномерный GAM по продажным ценам. Задайте переменные для BOROUGH, NEIGHBORHOOD, BUILDINGCLASSCATEGORY, и SALEDATE как категориальные предикторы.

    Mdl = fitrgam(NYCHousing2015,'SALEPRICE','CategoricalPredictors',[1 2 3 9])
    Mdl = 
      RegressionGAM
               PredictorNames: {1x9 cell}
                 ResponseName: 'SALEPRICE'
        CategoricalPredictors: [1 2 3 9]
            ResponseTransform: 'none'
                    Intercept: 3.7518e+05
              NumObservations: 83517
    
    
      Properties, Methods
    
    

    Mdl является RegressionGAM объект модели. Отображение модели показывает частичный список свойств модели. Чтобы просмотреть полный список свойств, дважды кликните имя переменной Mdl в Рабочей области. Откроется редактор Переменных для Mdl. Также можно отобразить свойства в Командном окне с помощью записи через точку. Для примера отобразите предполагаемый точкой пересечения (постоянный) срок Mdl.

    Mdl.Intercept
    ans = 3.7518e+05
    

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

    yFit = predict(Mdl,NYCHousing2015(1,:))
    yFit = 4.4421e+05
    
    plotLocalEffects(Mdl,NYCHousing2015(1,:))

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

    The predict функция предсказывает цену продажи для первого наблюдения следующим 4.4421e5. The plotLocalEffects функция создает горизонтальный столбчатый график, которая показывает локальные эффекты членов в Mdl на предсказании. Каждое значение локального эффекта показывает вклад каждого термина в прогнозируемую цену продажи.

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

    • Определите условия взаимодействия, используя formula входной параметр.

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

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

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.

    load carbig

    Создайте таблицу, которая содержит переменные предиктора (Acceleration, Displacement, Horsepower, и Weight) и переменной отклика (MPG).

    tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);

    Задайте formula

    Обучите GAM, который содержит четыре линейных условия (Acceleration, Displacement, Horsepower, и Weight) и двумя терминами взаимодействия (Acceleration*Displacement и Displacement*Horsepower). Определите условия используя формулу в форме 'Y ~ terms'.

    Mdl1 = fitrgam(tbl,'MPG ~ Acceleration + Displacement + Horsepower + Weight + Acceleration:Displacement + Displacement:Horsepower');

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

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

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

    Задайте 'Interactions'

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

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

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

    Задайте 'Interactions','all' и установите 'MaxPValue' аргумент имя-значение 0,05.

    Mdl3 = fitrgam(tbl,'MPG','Interactions','all','MaxPValue',0.05);
    Warning: Model does not include interaction terms because all interaction terms have p-values greater than the 'MaxPValue' value, or the software was unable to improve the model fit.
    
    Mdl3.Interactions
    ans =
    
      0x2 empty double matrix
    

    Mdl3 не включает условия взаимодействия, что подразумевает одно из следующего: все условия взаимодействия имеют значения p больше 0,05, или добавление условий взаимодействия не улучшает подгонку модели.

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

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

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

    Mdl4 = fitrgam(tbl,'MPG');
    UpdatedMdl4 = addInteractions(Mdl4,3);
    UpdatedMdl4.Interactions
    ans = 3×2
    
         2     3
         1     2
         3     4
    
    

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

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

    Загрузите carbig набор данных, содержащий измерения автомобилей 1970-х и начала 1980-х годов.

    load carbig

    Задайте Acceleration, Displacement, Horsepower, и Weight как переменные предиктора (X) и MPG как переменная отклика (Y).

    X = [Acceleration,Displacement,Horsepower,Weight];
    Y = MPG;

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

    Mdl = fitrgam(X,Y,'Interactions','all','NumTreesPerInteraction',2,'Verbose',1);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    1D|         0|  2.4432e+05|      -     |      -     |
    |    1D|         1|      9507.4|         Inf|           1|
    |    1D|        10|      4470.6|  0.00025206|           1|
    |    1D|        20|      3895.3|  0.00011448|           1|
    |    1D|        30|      3617.7|  3.5365e-05|           1|
    |    1D|        40|      3402.5|  3.7992e-05|           1|
    |    1D|        50|      3257.1|  2.4983e-05|           1|
    |    1D|        60|      3131.8|  2.3873e-05|           1|
    |    1D|        70|      3019.8|  2.2967e-05|           1|
    |    1D|        80|      2925.9|  2.8071e-05|           1|
    |    1D|        90|      2845.3|  1.6811e-05|           1|
    |    1D|       100|      2772.7|   1.852e-05|           1|
    |    1D|       110|      2707.8|  1.6754e-05|           1|
    |    1D|       120|      2649.8|   1.651e-05|           1|
    |    1D|       130|      2596.6|  1.1723e-05|           1|
    |    1D|       140|      2547.4|   1.813e-05|           1|
    |    1D|       150|      2501.1|  1.8659e-05|           1|
    |    1D|       160|      2455.7|   1.386e-05|           1|
    |    1D|       170|      2416.9|  1.0615e-05|           1|
    |    1D|       180|      2377.2|   8.534e-06|           1|
    |    1D|       190|        2339|  7.6771e-06|           1|
    |    1D|       200|      2303.3|  9.5866e-06|           1|
    |    1D|       210|      2270.7|  8.4276e-06|           1|
    |    1D|       220|      2240.1|  8.5778e-06|           1|
    |    1D|       230|      2209.2|  9.6761e-06|           1|
    |    1D|       240|      2178.7|  7.0622e-06|           1|
    |    1D|       250|      2150.3|  8.3082e-06|           1|
    |    1D|       260|      2122.3|  7.9542e-06|           1|
    |    1D|       270|      2097.7|  7.6328e-06|           1|
    |    1D|       280|      2070.4|  9.4322e-06|           1|
    |    1D|       290|      2044.3|  7.5722e-06|           1|
    |    1D|       300|      2019.7|  6.6719e-06|           1|
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    2D|         0|      2019.7|      -     |      -     |
    |    2D|         1|      1795.5|   0.0005975|           1|
    |    2D|         2|      1523.4|   0.0010079|           1|
    

    Чтобы проверить, fitrgam ли обучает указанное количество деревьев, отображает ReasonForTermination свойство обученной модели и просмотр отображаемых сообщений.

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

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

    resubLoss(Mdl)
    ans = 3.8277
    

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

    UpdatedMdl = resume(Mdl,100);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    2D|         0|      1523.4|      -     |      -     |
    |    2D|         1|      1363.9|  0.00039695|           1|
    |    2D|        10|      594.04|  8.0295e-05|           1|
    |    2D|        20|      359.44|  4.3201e-05|           1|
    |    2D|        30|      238.51|  2.6869e-05|           1|
    |    2D|        40|      153.98|  2.6271e-05|           1|
    |    2D|        50|      91.464|  8.0936e-06|           1|
    |    2D|        60|      61.882|  3.8528e-06|           1|
    |    2D|        70|      43.206|  5.9888e-06|           1|
    
    UpdatedMdl.ReasonForTermination
    ans = struct with fields:
          PredictorTrees: 'Terminated after training the requested number of trees.'
        InteractionTrees: 'Unable to improve the model fit.'
    
    

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

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

    resubLoss(UpdatedMdl)
    ans = 0.0944
    

    Регрессионные потери уменьшаются после resume обновляет модель с большим количеством итераций.

    Подробнее о

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

    Ссылки

    [1] Лу, Инь, Рич Каруана и Йоханнес Герке. «Внятные модели для классификации и регрессии». Материалы 18-й Международной конференции ACM SIGKDD по открытию знаний и майнингу данных (KDD "12). Пекин, Китай: Пресса ACM, 2012, стр. 150-158.

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

    Введенный в R2021a