RegressionGAM

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

    Описание

    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 модель в виде логического вектора. Это свойство пусто, если все строки используются.

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

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

    Веса наблюдения раньше обучали модель в виде 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Создайте графики отдельного условного ожидания (ICE) и частичный график зависимости (PDP)
    shapleyШепли оценивает
    predictПредскажите ответы с помощью обобщенной аддитивной модели (GAM)
    lossПотеря регрессии для обобщенной аддитивной модели (GAM)
    resubPredictПредскажите ответы для обучающих данных с помощью обученной модели регрессии
    resubLossПотеря регрессии перезамены

    Примеры

    свернуть все

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

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

    load NYCHousing2015

    Набор данных включает 10 переменных с информацией о продажах свойств в Нью-Йорке в 2 015. Этот пример использует эти переменные, чтобы анализировать отпускные цены (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-й Международной конференции ACM SIGKDD по вопросам Открытия Знаний и Анализа данных (KDD ’12). Пекин, Китай: Нажатие ACM, 2012, стр 150–158.

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

    Введенный в R2021a
    Для просмотра документации необходимо авторизоваться на сайте