fitrgam

Подгонка обобщенной аддитивной модели (GAM) для регрессии

Описание

пример

Mdl = fitrgam(Tbl,ResponseVarName) возвращает обобщенную аддитивную модель Mdl обучен с использованием выборочных данных, содержащихся в таблице Tbl. Входной параметр ResponseVarName - имя переменной в Tbl который содержит значения отклика для регрессии.

пример

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

Mdl = fitrgam(Tbl,Y) использует переменные предиктора в таблице Tbl и значений отклика в векторе Y.

пример

Mdl = fitrgam(X,Y) использует предикторы в матрице X и значений отклика в векторе Y.

пример

Mdl = fitrgam(___,Name,Value) задает опции, использующие один или несколько аргументов имя-значение в дополнение к любой комбинации входных аргументов в предыдущих синтаксисах. Для примера, 'Interactions',5 указывает, что включает пять членов в модели взаимодействия. Вы также можете задать список терминов взаимодействия, используя 'Interactions' аргумент имя-значение.

Примеры

свернуть все

Обучите одномерную 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 с перекрестной проверкой с 10 складками, что является опцией перекрестной валидации по умолчанию, при помощи fitrgam. Затем используйте kfoldPredict предсказать ответы на наблюдения с сворачиванием с использованием модели, обученной на наблюдениях с сворачиванием.

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

load carbig

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

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

Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal' аргумент имя-значение как 'on'.

rng('default') % For reproducibility
CVMdl = fitrgam(tbl,'MPG','CrossVal','on')
CVMdl = 
  RegressionPartitionedGAM
    CrossValidatedModel: 'GAM'
         PredictorNames: {1x4 cell}
           ResponseName: 'MPG'
        NumObservations: 398
                  KFold: 10
              Partition: [1x1 cvpartition]
      NumTrainedPerFold: [1x1 struct]
      ResponseTransform: 'none'


  Properties, Methods

The fitrgam функция создает RegressionPartitionedGAM объект модели CVMdl с 10 складками. Во время перекрестной проверки программное обеспечение завершает следующие шаги:

  1. Случайным образом разбейте данные на 10 наборов.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другие 9 наборов.

  3. Сохраните 10 компактных обученных моделей a в векторе камеры 10 на 1 в Trained свойство перекрестно проверенного объекта модели RegressionPartitionedGAM.

Вы можете переопределить настройку перекрестной проверки по умолчанию с помощью 'CVPartition', 'Holdout', 'KFold', или 'Leaveout' аргумент имя-значение.

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

yHat = kfoldPredict(CVMdl);

yHat является числовым вектором. Отображение первых пяти предсказанных ответов.

yHat(1:5)
ans = 5×1

   19.4848
   15.7203
   15.5742
   15.3185
   17.8223

Вычислите потери регрессии (средняя квадратичная невязка).

L = kfoldLoss(CVMdl)
L = 17.7248

kfoldLoss возвращает среднюю квадратичную невязку за 10 складок.

Оптимизируйте параметры GAM относительно перекрестной валидации с помощью bayesopt функция.

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

load carbig

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

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

Подготовка optimizableVariable объекты для аргументов имя-значение, которые необходимо оптимизировать с помощью байесовской оптимизации. Этот пример находит оптимальные значения для MaxNumSplitsPerPredictor и NumTreesPerPredictor аргументы fitrgam.

maxNumSplits = optimizableVariable('maxNumSplits',[1,10],'Type','integer');
numTrees = optimizableVariable('numTrees',[1,500],'Type','integer');

Создайте целевую функцию, которая принимает вход z = [maxNumSplits,numTrees] и возвращает перекрестно проверенное значение потерь z.

minfun = @(z)kfoldLoss(fitrgam(X,Y,'CrossVal','on', ...
    'MaxNumSplitsPerPredictor',z.maxNumSplits, ...
    'NumTreesPerPredictor',z.numTrees)); 

Если вы задаете опцию перекрестной проверки ('CrossVal','on'), затем fitrgam функция возвращает перекрестно проверенный объект модели RegressionPartitionedGAM. The kfoldLoss функция возвращает регрессионные потери (средняя квадратичная невязка), полученные перекрестной проверенной моделью. Поэтому указатель на функцию minfun вычисляет потери перекрестной валидации у параметров в z.

Поиск оптимальных параметров [maxNumSplits,numTrees] использование bayesopt. Для повторяемости выберите 'expected-improvement-plus' функция сбора. Функция сбора по умолчанию зависит от времени выполнения и, следовательно, может давать различные результаты.

rng('default')
results = bayesopt(minfun,[maxNumSplits,numTrees],'Verbose',0, ...
    'IsObjectiveDeterministic',true, ...
    'AcquisitionFunctionName','expected-improvement-plus');

Получите лучшую точку от results.

zbest = bestPoint(results)
zbest=1×2 table
    maxNumSplits    numTrees
    ____________    ________

         1            215   

Обучите оптимизированную GAM с помощью zbest значения.

Mdl = fitrgam(X,Y, ...
    'MaxNumSplitsPerPredictor',zbest.maxNumSplits, ...
    'NumTreesPerPredictor',zbest.numTrees);

Входные параметры

свернуть все

Выборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.

  • Опционально Tbl может содержать столбец для переменной отклика и столбец для весов наблюдений. Переменная отклика и значения веса должны быть числовыми векторами.

    Вы должны задать переменную отклика в Tbl при помощи ResponseVarName или formula и задайте веса наблюдений в Tbl при помощи 'Weights'.

    • Задайте переменную отклика при помощи ResponseVarNamefitrgam использует оставшиеся переменные в качестве предикторов. Чтобы использовать подмножество остальных переменных в Tbl в качестве предикторов задайте переменные предиктора при помощи 'PredictorNames'.

    • Задайте спецификацию модели при помощи formulafitrgam использует подмножество переменных в Tbl как переменные предиктора и переменная отклика, как задано в formula.

  • Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика Y и количество строк в Tbl должно быть равным. Чтобы использовать подмножество переменных в Tbl в качестве предикторов задайте переменные предиктора при помощи 'PredictorNames'.

fitrgam рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Tbl чтобы быть отсутствующими значениями.

  • fitrgam не использует наблюдения со всеми отсутствующими значениями в подгонке.

  • fitrgam не использует наблюдения с отсутствующими значениями отклика в подгонке.

  • fitrgam использует наблюдения с некоторыми отсутствующими значениями для предикторов, чтобы найти расщепления переменных, для которых эти наблюдения имеют допустимые значения.

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

Имя переменной отклика, заданное как вектор символов или строковый скаляр, содержащий имя переменной отклика в Tbl. Для примера, если переменная отклика Y хранится в Tbl.Y, затем укажите его следующим 'Y'.

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

Спецификация модели, заданная в виде вектора символов или строкового скаляра в форме 'Y ~ terms'. The formula аргумент задает переменную отклика и линейные условия и условия взаимодействия для переменных предиктора. Использование formula для задания подмножества переменных в Tbl как предикторы для настройки модели. Если вы задаете формулу, то программное обеспечение не использует никаких переменных в Tbl которые не появляются в formula.

Для примера задайте 'Y~x1+x2+x3+x1:x2'. В этой форме Y представляет переменную отклика, и x1, x2, и x3 представляют линейные условия для переменных. x1:x2 представляет термин взаимодействия для x1 и x2.

Имена переменных в формуле должны быть обоими именами переменных в Tbl (Tbl.Properties.VariableNames) и действительный MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных недопустимы, можно преобразовать их, используя matlab.lang.makeValidName функция.

Кроме того, можно задать переменную отклика и линейные условия для предикторов, использующих formula, и задайте условия взаимодействия для предикторов, использующих 'Interactions'.

fitrgam создает набор деревьев взаимодействия, используя только те условия, p которых значения не больше 'MaxPValue' значение.

Пример: 'Y~x1+x2+x3+x1:x2'

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

Данные отклика, заданные в виде числа вектора-столбца. Каждая запись в Y - ответ на данные в соответствующей строке X или Tbl.

Программное обеспечение рассматривает NaN значения в Y чтобы быть отсутствующими значениями. fitrgam не использует наблюдения с отсутствующими значениями отклика в подгонке.

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

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

fitrgam рассматривает NaN значения в X как отсутствующие значения. Функция не использует наблюдения со всеми отсутствующими значениями в подгонке. fitrgam использует наблюдения с некоторыми отсутствующими значениями для X чтобы найти разделения на переменные, для которых эти наблюдения имеют допустимые значения.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Interactions','all','MaxPValue',0.05 задает, чтобы включать все доступные условия взаимодействия, значения p которых не более 0,05.
Опции GAM

свернуть все

Начальная скорость обучения ускорения градиента для членов взаимодействия, заданная как числовой скаляр в интервале (0,1].

Для каждой итерации увеличения для деревьев взаимодействия, fitrgam начинает аппроксимацию с начальной скоростью обучения. Функция уменьшает скорость обучения вдвое, пока не найдет скорость, которая улучшает подгонку модели.

Настройка модели с использованием малой скорости обучения требует большего количества итераций обучения, но часто достигает лучшей точности.

Для получения дополнительной информации о ускорении градиента, см. Алгоритм ускорения градиента.

Пример: 'InitialLearnRateForInteractions',0.1

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

Начальная скорость обучения для ускорения градиента для линейных членов, заданная как числовой скаляр в интервале (0,1].

Для каждой итерации увеличения для деревьев предикторов, fitrgam начинает аппроксимацию с начальной скоростью обучения. Функция уменьшает скорость обучения вдвое, пока не найдет скорость, которая улучшает подгонку модели.

Настройка модели с использованием малой скорости обучения требует большего количества итераций обучения, но часто достигает лучшей точности.

Для получения дополнительной информации о ускорении градиента, см. Алгоритм ускорения градиента.

Пример: 'InitialLearnRateForPredictors',0.1

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

Количество или список членов взаимодействия для включения в S набора кандидатов, заданные как неотрицательный целочисленный скаляр, логическая матрица или 'all'.

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

  • Список условий взаимодействия, заданных как логическая матрица - S включает условия, заданные t-by- p логическая матрица, где t количество членов взаимодействия и p - количество предикторов, используемых для обучения модели. Для примера, logical([1 1 0; 0 1 1]) представляет две пары членов взаимодействия: пару первого и второго предикторов и пару второго и третьего предикторов.

    Если fitrgam использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. То есть индексы столбцов логической матрицы не подсчитывают переменные веса отклика и наблюдения. Индексы также не подсчитывают переменные, не используемые функцией.

  • 'all' - S включает все возможные пары членов взаимодействия, что   p*(p – 1)/2 количество терминов в общей сложности.

Среди терминов взаимодействия в S, fitrgam функция идентифицирует те, чьи p -значения не больше 'MaxPValue' и использует их, чтобы создать набор деревьев взаимодействия. Используйте значение по умолчанию ('MaxPValue'1) для построения деревьев взаимодействия с использованием всех терминов в S.

Пример: 'Interactions','all'

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

Максимальное количество разделений решений (или узлов ветви) для каждого дерева взаимодействия (повышенное дерево для термина взаимодействия), заданное как положительный целочисленный скаляр.

Пример: 'MaxNumSplitsPerInteraction',5

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

Максимальное количество разделений решений (или узлов ветви) для каждого дерева предикторов (усиленное дерево для линейного термина), заданное как положительный целочисленный скаляр. По умолчанию, fitrgam использует пень дерева для дерева предиктора.

Пример: 'MaxNumSplitsPerPredictor',5

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

Максимальное p-значение для обнаружения членов взаимодействия, заданное в виде числа в интервале [0,1].

fitrgam сначала находит набор кандидатов, S членов взаимодействия formula или 'Interactions'. Затем функция идентифицирует условия взаимодействия, p которых - значения не больше 'MaxPValue' и использует их, чтобы создать набор деревьев взаимодействия.

Значение по умолчанию ('MaxPValue',1) строит деревья взаимодействия для всех членов взаимодействия в S набора кандидатов.

Для получения дополнительной информации об обнаружении терминов взаимодействия смотрите Обнаружение терминов взаимодействия.

Пример: 'MaxPValue',0.05

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

Количество интервалов для числовых предикторов, заданное как положительный целочисленный скаляр или [] (пустой).

  • Если вы задаете 'NumBins' значение как положительный целочисленный скаляр (numBins), затем fitrgam помещает каждый числовой предиктор в самое большее numBins equiprobable bins, а затем выращивает деревья на индексах интервал вместо исходных данных.

    • Количество интервалов может быть меньше numBins если предиктор имеет меньше numBins уникальные значения.

    • fitrgam не содержит категориальные предикторы.

  • Если на 'NumBins' значение пусто ([]), затем fitrgam не содержит предикторов.

Когда вы используете большой набор обучающих данных, эта опция binning ускоряет обучение, но может привести к снижению точности. Сначала можно использовать значение по умолчанию 'NumBins', а затем измените значение в зависимости от точности и скорости обучения.

Обученная модель Mdl сохраняет границы интервала в BinEdges свойство.

Пример: 'NumBins',50

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

Количество деревьев на один член взаимодействия, заданное как положительный целочисленный скаляр.

The 'NumTreesPerInteraction' значение эквивалентно количеству итераций ускорения градиента для членов взаимодействия для предикторов. Для каждой итерации, fitrgam добавляет к модели набор деревьев взаимодействия, по одному дереву для каждого термина взаимодействия. Чтобы узнать о алгоритме ускорения градиента, см. «Алгоритм ускорения градиента».

Можно определить, имеет ли подобранная модель заданное количество деревьев, просмотрев диагностическое сообщение, отображаемое при 'Verbose' равен 1 или 2, или путем проверки ReasonForTermination значение свойства модели Mdl.

Пример: 'NumTreesPerInteraction',500

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

Количество деревьев на один линейный член, заданное как положительный целочисленный скаляр.

The 'NumTreesPerPredictor' значение эквивалентно количеству итераций ускорения градиента для линейных членов для предикторов. Для каждой итерации, fitrgam добавляет к модели набор деревьев предикторов, по одному дереву для каждого предиктора. Чтобы узнать о алгоритме ускорения градиента, см. «Алгоритм ускорения градиента».

Можно определить, имеет ли подобранная модель заданное количество деревьев, просмотрев диагностическое сообщение, отображаемое при 'Verbose' равен 1 или 2, или путем проверки ReasonForTermination значение свойства модели Mdl.

Пример: 'NumTreesPerPredictor',500

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

Другие опции регрессии

свернуть все

Категориальный список предикторов, заданный как одно из значений в этой таблице.

ЗначениеОписание
Вектор положительных целых чисел

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

Если fitrgam использует подмножество входа переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. The 'CategoricalPredictors' значения не подсчитывают переменную отклика, переменную веса наблюдения и любые другие переменные, которые функция не использует.

Логический вектор

A true запись означает, что соответствующий столбец данных предиктора является категориальной переменной. Длина вектора p.

Матрица символовКаждая строка матрицы является именем переменной. Имена должны совпадать с записями в PredictorNames. Дополните имена дополнительными пробелами, чтобы каждая строка матрицы символов имела одинаковую длину.
Строковые массивы или массив ячеек векторов символовКаждый элемент массива является именем переменной. Имена должны совпадать с записями в PredictorNames.
'all'Все предикторы категоричны.

По умолчанию, если данные предиктора находятся в таблице (Tbl), fitrgam принимает, что переменная категориальна, если это логический вектор, неупорядоченный категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fitrgam принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью 'CategoricalPredictors' аргумент имя-значение.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Количество итераций между распечатками диагностических сообщений, заданное как неотрицательный целочисленный скаляр. Этот аргумент действителен только тогда, когда вы задаете 'Verbose' как 1.

Если вы задаете 'Verbose',1 и 'NumPrint',numPrint, затем программное обеспечение отображает диагностические сообщения каждый numPrint итерации в Командном окне.

Пример: 'NumPrint',500

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

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

  • Если вы поставляете X и Y, тогда можно использовать PredictorNames для назначения имен переменным предиктора в X.

    • Порядок имен в PredictorNames должен соответствовать порядку столбцов X. То есть PredictorNames{1} - имя X(:,1), PredictorNames{2} - имя X(:,2)и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

    • По умолчанию PredictorNames является {'x1','x2',...}.

  • Если вы поставляете Tbl, тогда можно использовать PredictorNames выбрать, какие переменные предиктора использовать в обучении. То есть, fitrgam использует только переменные предиктора в PredictorNames и переменной отклика во время обучения.

    • PredictorNames должен быть подмножеством Tbl.Properties.VariableNames и не может включать имя переменной отклика.

    • По умолчанию PredictorNames содержит имена всех переменных предиктора.

    • Хорошей практикой является определение предикторов для обучения с использованием любой из 'PredictorNames' или formula, но не то и другое.

Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

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

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

  • Если вы поставляете Y, тогда можно использовать 'ResponseName' чтобы задать имя для переменной отклика.

  • Если вы поставляете ResponseVarName или formula, тогда вы не можете использовать 'ResponseName'.

Пример: 'ResponseName','response'

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

Преобразование отклика, заданное как 'none' или указатель на функцию. Значение по умолчанию является 'none', что означает @(y)y, или без преобразования. Для функции MATLAB или функции, которую вы задаете, используйте указатель на функцию для преобразования отклика. Указатель на функцию должен принять вектор (исходные значения отклика) и вернуть вектор того же размера (преобразованные значения отклика).

Пример: Предположим, что вы создаете указатель на функцию, который применяет экспоненциальное преобразование к вектору входа при помощи myfunction = @(y)exp(y). Затем можно задать преобразование отклика следующим 'ResponseTransform',myfunction.

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

Уровень подробностей, заданный как 0, 1, или 2. The Verbose значение управляет объемом информации, отображаемой программным обеспечением в Командном окне.

В этой таблице представлены доступные опции уровня подробностей.

ЗначениеОписание
0Программа не отображает никакой информации.
1Программа отображает диагностические сообщения каждый numPrint итерации, где numPrint является 'NumPrint' значение.
2Программа отображает диагностические сообщения при каждой итерации.

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

  • Type - Тип обученных деревьев, 1D (деревья предикторов или усиленные деревья для линейных терминов для предикторов) или 2D (деревья взаимодействия или усиленные деревья для условий взаимодействия для предикторов)

  • NumTrees - Количество деревьев на линейный термин или термин взаимодействия, который fitrgam добавлено к модели до сих пор

  • Deviance - Отклонение модели

  • RelTol - Относительное изменение предсказаний модели: (y^ky^k1)(y^ky^k1)/y^ky^k, где y^k является вектор-столбец предсказаний модели при итерации k

  • LearnRate - Скорость обучения, используемый для текущей итерации

Пример: 'Verbose',1

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

Веса наблюдений, заданные как вектор скалярных значений или имя переменной в Tbl. Программа взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк в X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть именем переменной в Tbl который содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Для примера, если вектор весов W хранится как Tbl.W, затем укажите его следующим 'W'.

fitrgam нормализует значения Weights в сумму до 1.

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

Опции перекрестной валидации

свернуть все

Флаг для обучения перекрестно проверенной модели, заданный как 'on' или 'off'.

Если вы задаете 'on', затем программное обеспечение обучает перекрестно проверенную модель с 10 складками.

Вы можете переопределить этот параметр перекрестной проверки с помощью 'CVPartition', 'Holdout', 'KFold', или 'Leaveout' аргумент имя-значение. Для создания модели с перекрестной проверкой можно использовать только один аргумент имя-значение перекрестной проверки за раз.

Кроме того, перекрестная проверка после создания модели путем передачи Mdl кому crossval.

Пример: 'Crossval','on'

Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

  1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

  2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Holdout',0.1

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

Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

  1. Случайным образом разделите данные на k наборы.

  2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

  3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'KFold',5

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

Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

  1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

  2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели.

Чтобы создать перекрестно проверенную модель, можно задать только один из следующих четырех аргументов в виде имя-значение: CVPartition, Holdout, KFold, или Leaveout.

Пример: 'Leaveout','on'

Выходные аргументы

свернуть все

Обученная обобщенная аддитивная модель, возвращенная как один из объектов модели в этой таблице.

Объект моделиОпции перекрестной валидации для обучения объекта моделиСпособы предсказать ответы с помощью объекта модели
RegressionGAMНичегоИспользовать predict для предсказания откликов на новые наблюдения и использования resubPredict для предсказания ответов на обучающие наблюдения.
RegressionPartitionedGAMЗадайте аргумент имя-значение KFold, Holdout, Leaveout, CrossVal, или CVPartitionИспользовать kfoldPredict чтобы предсказать ответы на наблюдения, которые fitrgam протягивается во время обучения. kfoldPredict предсказывает ответ для каждого наблюдения при помощи модели, обученной без этого наблюдения.

Ссылка на свойства Mdl, используйте запись через точку. Для примера введите Mdl.Interactions в Командном окне, чтобы отобразить условия взаимодействия в Mdl.

Подробнее о

свернуть все

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

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

fitrgam использует усиленное дерево в качестве функции формы для каждого предиктора и, опционально, для каждой пары предикторов; поэтому функция может захватывать нелинейное отношение между предиктором и переменной отклика. Поскольку вклады отдельных функций формы в предсказание (значение отклика) хорошо разделены, модель легко интерпретировать.

Стандартная GAM использует одномерную функцию формы для каждого предиктора.

y~N(μ,σ2)g(μ)=μ=c+f1(x1)+f2(x2)++fp(xp),

где y - переменная отклика, которая следует нормальному распределению со средним μ и стандартным σ отклонения. g (μ) является тождествами ссылки функцией, а c - точка пересечения (постоянным) термином. fi (xi) является одномерной функцией формы для i-го предиктора, который является усиленным деревом для линейного члена для предиктора (дерева предиктора).

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

μ=c+f1(x1)+f2(x2)++fp(xp)+i,j{1,2,,p}fij(xixj),

где fij (xi xj) - двухмерная функция формы для i-го и j-го предикторов, которая является усиленным деревом для термина взаимодействия для предикторов (дерева взаимодействия).

fitrgam находит важные условия взаимодействия на основе p -values F -tests. Для получения дополнительной информации смотрите Обнаружение терминов взаимодействия.

Отклонение

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

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

-2 (log L - log Ls),

где L и Ls являются вероятностями подобранной модели и насыщенной модели, соответственно. Насыщенная модель является моделью с максимальным количеством параметров, которые вы можете оценить.

fitrgam использует отклонение для измерения качества модели и находит скорость обучения, которая уменьшает отклонение при каждой итерации. Задайте 'Verbose' равным 1 или 2, чтобы отобразить отклонение и скорость обучения в Командном окне.

Алгоритмы

свернуть все

Алгоритм ускорения градиента

fitrgam подходит для обобщенной аддитивной модели с помощью алгоритма ускорения градиента (Boosting методом наименьших квадратов).

fitrgam сначала строит наборы деревьев предикторов (усиленные деревья для линейных членов для предикторов), а затем строит наборы деревьев взаимодействий (усиленные деревья для терминов взаимодействия для предикторов). Алгоритм бустинга итерирует самое большее 'NumTreesPerPredictor' время для деревьев предикторов, а затем итерация для большинства 'NumTreesPerInteraction' время для деревьев взаимодействия.

Для каждой итерации увеличения, fitrgam создает набор деревьев предикторов с начальной скоростью обучения 'InitialLearnRateForPredictors', или создает набор деревьев взаимодействия с начальной скоростью обучения 'InitialLearnRateForInteractions'.

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

    • Обновленная модель = текущая модель + (темп обучения)· (новое дерево)

    • Обновлённая невязка = текущая невязка - (темп обучения)· (ответ объясняется новым деревом)

  • Если добавление набора деревьев улучшает подгонка модели (то есть уменьшает отклонение подгонки), то fitrgam переходит к следующей итерации.

  • В противном случае, fitrgam уменьшает вдвое скорость обучения и использует его, чтобы обновить модель и невязку. Функция продолжает уменьшать скорость обучения вдвое, пока не найдет скорость, которая улучшает подгонку модели.

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

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

    Можно определить, почему обучение остановлено, проверив ReasonForTermination свойство обученной модели.

Обнаружение терминов взаимодействия

Для каждого парного термина взаимодействия xi xj (задается formula или 'Interactions'), программное обеспечение выполняет F-тест, чтобы выяснить, является ли термин статистически значимым.

Чтобы ускорить процесс, fitrgam заключает числовые предикторы в самое большее 8 уравнительных интервалов. Количество интервалов может быть меньше 8, если предиктор имеет меньше 8 уникальных значений. F-test исследует нулевую гипотезу о том, что интервалы, созданные xi и xj, имеют одинаковые отклики по сравнению с альтернативой, что, по крайней мере, одно интервал имеет отличное значение отклика от других. Небольшое p -значение указывает, что различия значительны, что подразумевает, что соответствующий термин взаимодействия значителен и, следовательно, включая термин может улучшить подгонку модели.

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

fitrgam добавляет к модели условия взаимодействия в порядке важности на основе p значений. Используйте Interactions свойство возвращаемой модели для проверки порядка добавленных в модель членов взаимодействия.

Ссылки

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

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

Введенный в R2021a