exponenta event banner

RegressionGAM

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

    Описание

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

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

    Создание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Веса наблюдений, используемые для обучения модели, заданные как n-by-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Значения Шапли
    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.

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

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

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