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) задает опции с помощью одних или нескольких аргументов name-value в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, 'Interactions',5 задает, чтобы включать пять периодов взаимодействия в модель. Можно также задать список периодов взаимодействия с помощью 'Interactions' аргумент значения имени.

Примеры

свернуть все

Обучите одномерный 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
    IsStandardDeviationFit: 0
           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 object. The axes object 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 с 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'
    IsStandardDeviationFit: 0


  Properties, Methods

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

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

load carbig

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

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

Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 80% наблюдений, чтобы обучить модель, и 20% наблюдений проверять производительность обученной модели на новых данных. Используйте cvpartition разделить данные.

rng('default') % For reproducibility
cvp = cvpartition(length(MPG),'Holdout',0.20);
XTrain = X(training(cvp),:);
YTrain = Y(training(cvp));
XTest = X(test(cvp),:);
YTest = Y(test(cvp));

Обучите GAM регрессии путем передачи обучающих данных fitrgam функция, и включает OptimizeHyperparameters аргумент. Задайте 'OptimizeHyperparameters' как 'auto' так, чтобы fitrgam находит оптимальные значения InitialLearnRateForPredictors, NumTreesPerPredictor, Interactions, InitialLearnRateForInteractions, и NumTreesPerInteraction. Для воспроизводимости выберите 'expected-improvement-plus' функция захвата. Функция захвата по умолчанию зависит от времени выполнения и, поэтому, может дать различные результаты.

rng('default')
Mdl = fitrgam(XTrain,YTrain,'OptimizeHyperparameters','auto', ...
    'HyperparameterOptimizationOptions', ...
    struct('AcquisitionFunctionName','expected-improvement-plus'))
|==========================================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-|
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ForPredictors    | redictor     |              | ForInteractions  | nteraction   |
|==========================================================================================================================================================|
|    1 | Best   |       2.874 |      4.6069 |       2.874 |       2.874 |          0.21533 |          500 |            1 |          0.35042 |           13 |
|    2 | Accept |        2.89 |     0.20809 |       2.874 |      2.8748 |         0.062841 |           14 |            1 |         0.014907 |           10 |
|    3 | Accept |      3.3298 |       1.796 |       2.874 |      2.8746 |         0.001387 |          222 |            0 |                - |            - |
|    4 | Best   |      2.8562 |      5.8182 |      2.8562 |      2.8564 |          0.08216 |          434 |            4 |          0.14875 |          283 |
|    5 | Accept |       2.976 |      1.8052 |      2.8562 |      2.8564 |          0.99942 |          217 |            1 |        0.0017491 |           34 |
|    6 | Best   |      2.8195 |       1.382 |      2.8195 |      2.8198 |          0.13778 |          152 |            6 |         0.012566 |           13 |
|    7 | Best   |      2.7519 |     0.90985 |      2.7519 |       2.752 |          0.12531 |           42 |            4 |          0.27647 |           53 |
|    8 | Best   |      2.7301 |       3.565 |      2.7301 |      2.7301 |          0.18671 |           10 |            3 |        0.0063418 |          487 |
|    9 | Best   |      2.7196 |     0.46532 |      2.7196 |      2.7196 |          0.13792 |           10 |            5 |           0.1663 |           27 |
|   10 | Accept |      2.8281 |      2.9027 |      2.7196 |      2.7196 |          0.23324 |           10 |            4 |          0.75904 |          314 |
|   11 | Accept |      2.7864 |     0.25131 |      2.7196 |      2.7196 |          0.13035 |           10 |            1 |          0.30171 |          476 |
|   12 | Accept |      2.7993 |     0.61803 |      2.7196 |      2.7647 |          0.16476 |           10 |            6 |         0.015498 |           32 |
|   13 | Accept |      2.7847 |      4.5171 |      2.7196 |      2.7197 |        0.0090953 |          499 |            5 |         0.027878 |           40 |
|   14 | Accept |      3.5847 |     0.27508 |      2.7196 |      2.7592 |        0.0035123 |           11 |            3 |         0.011127 |           11 |
|   15 | Accept |      2.7237 |      4.9018 |      2.7196 |       2.759 |         0.015848 |          498 |            3 |          0.14359 |          238 |
|   16 | Accept |       2.779 |       1.569 |      2.7196 |      2.7588 |         0.012829 |           10 |            3 |         0.028814 |          217 |
|   17 | Accept |      2.7761 |      4.7776 |      2.7196 |      2.7272 |         0.023165 |          488 |            1 |          0.32642 |          302 |
|   18 | Accept |      2.8604 |      4.1417 |      2.7196 |      2.7677 |         0.013548 |          495 |            2 |          0.97963 |          141 |
|   19 | Accept |      3.5466 |     0.12735 |      2.7196 |      2.7196 |         0.019794 |           10 |            0 |                - |            - |
|   20 | Accept |      2.7513 |      7.3431 |      2.7196 |      2.7196 |          0.02408 |           62 |            6 |         0.023502 |          490 |
|==========================================================================================================================================================|
| Iter | Eval   | Objective:  | Objective   | BestSoFar   | BestSoFar   | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-|
|      | result | log(1+loss) | runtime     | (observed)  | (estim.)    | ForPredictors    | redictor     |              | ForInteractions  | nteraction   |
|==========================================================================================================================================================|
|   21 | Accept |      2.7243 |     0.92354 |      2.7196 |      2.7196 |         0.040761 |           11 |            3 |          0.10556 |          120 |
|   22 | Best   |      2.6969 |      5.0161 |      2.6969 |       2.697 |        0.0032557 |          494 |            2 |         0.039381 |          487 |
|   23 | Accept |      2.8184 |      3.8034 |      2.6969 |       2.697 |        0.0072249 |           19 |            3 |          0.27653 |          494 |
|   24 | Accept |      2.7788 |      4.3989 |      2.6969 |       2.697 |        0.0064015 |          482 |            1 |         0.013479 |          479 |
|   25 | Accept |      2.7646 |      4.4343 |      2.6969 |      2.6971 |        0.0013222 |          473 |            2 |          0.17272 |          436 |
|   26 | Accept |      2.8368 |     0.28304 |      2.6969 |      2.6971 |          0.93418 |           11 |            5 |          0.16983 |           11 |
|   27 | Accept |      2.7724 |      1.7205 |      2.6969 |      2.6971 |         0.039216 |           11 |            2 |         0.037865 |          480 |
|   28 | Accept |      2.8795 |     0.87918 |      2.6969 |      2.6971 |          0.73103 |           11 |            1 |         0.014567 |          480 |
|   29 | Accept |       2.782 |      4.0221 |      2.6969 |      2.7267 |        0.0047632 |          493 |            1 |         0.069346 |          247 |
|   30 | Accept |      2.7734 |     0.98578 |      2.6969 |      2.7297 |         0.038679 |          103 |            1 |         0.052986 |           68 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 88.0979 seconds
Total objective function evaluation time: 78.4482

Best observed feasible point:
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

Observed objective function value = 2.6969
Estimated objective function value = 2.7297
Function evaluation time = 5.0161

Best estimated feasible point (according to models):
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

Estimated objective function value = 2.7297
Estimated function evaluation time = 5.009
Mdl = 
  RegressionGAM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                    ResponseTransform: 'none'
                            Intercept: 23.7405
                         Interactions: [2×2 double]
               IsStandardDeviationFit: 0
                      NumObservations: 318
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]


  Properties, Methods

fitrgam возвращает RegressionGAM объект модели, который использует лучшую предполагаемую допустимую точку. Лучшая предполагаемая допустимая точка является набором гиперпараметров, который минимизирует верхнюю доверительную границу потери перекрестной проверки (среднеквадратическая ошибка, MSE) на основе базовой Гауссовой модели процесса Байесового процесса оптимизации.

Байесов процесс оптимизации внутренне обеспечивает Гауссову модель процесса целевой функции. Целевой функцией является log(1 + перекрестная проверка MSE) для регрессии. Для каждой итерации процесс оптимизации обновляет Гауссову модель процесса и использует модель, чтобы найти новый набор гиперпараметров. Каждая линия итеративного отображения показывает новый набор гиперпараметров и этих значений столбцов:

  • Objective — Значение целевой функции вычисляется в новом наборе гиперпараметров.

  • Objective runtime — Время оценки целевой функции.

  • Eval result — Отчет результата в виде Accept, Best, или Error. Accept указывает, что целевая функция возвращает конечное значение и Error указывает, что целевая функция возвращает значение, которое не является конечным действительным скаляром. Best указывает, что целевая функция возвращает конечное значение, которое ниже, чем ранее вычисленные значения целевой функции.

  • BestSoFar(observed) — Минимальное значение целевой функции вычисляется до сих пор. Это значение является любой значением целевой функции текущей итерации (если Eval result значением для текущей итерации является Best) или значение предыдущего Best итерация.

  • BestSoFar(estim.) — В каждой итерации программное обеспечение оценивает верхние доверительные границы значений целевой функции, с помощью обновленной Гауссовой модели процесса, во всех наборах гиперпараметров, которые попробовали до сих пор. Затем программное обеспечение выбирает точку с минимальной верхней доверительной границей. BestSoFar(estim.) значение является значением целевой функции, возвращенным predictObjective функция в минимальной точке.

График ниже итеративного отображения показывает BestSoFar(observed) и BestSoFar(estim.) значения синего и зеленого цвета, соответственно.

Возвращенный объект Mdl использует лучшую предполагаемую допустимую точку, то есть, набор гиперпараметров, который производит BestSoFar(estim.) значение в итоговой итерации на основе итоговой Гауссовой модели процесса.

Получите лучшую предполагаемую допустимую точку из Mdl в HyperparameterOptimizationResults свойство.

Mdl.HyperparameterOptimizationResults.XAtMinEstimatedObjective
ans=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

В качестве альтернативы можно использовать bestPoint функция. По умолчанию, bestPoint функционируйте использует 'min-visited-upper-confidence-interval' критерий.

[x,CriterionValue,iteration] = bestPoint(Mdl.HyperparameterOptimizationResults)
x=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

CriterionValue = 2.7908
iteration = 22

Можно также извлечь лучшую наблюдаемую допустимую точку (то есть, последний Best укажите в итеративном отображении) от HyperparameterOptimizationResults свойство или путем определения Criterion как 'min-observed'.

Mdl.HyperparameterOptimizationResults.XAtMinObjective
ans=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

[x_observed,CriterionValue_observed,iteration_observed] = bestPoint(Mdl.HyperparameterOptimizationResults,'Criterion','min-observed')
x_observed=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0032557                      494                  2                     0.039381                         487          

CriterionValue_observed = 2.6969
iteration_observed = 22

В этом примере эти два критерия выбирают тот же набор (22-я итерация) гиперпараметров как лучшая точка. Значение критерия каждого отличается потому что CriterionValue верхняя граница значения целевой функции, вычисленного итоговой Гауссовой моделью процесса и CriterionValue_observed вычисленное использование значения фактической целевой функции выбранных гиперпараметров. Для получения дополнительной информации смотрите аргумент значения имени Критерия bestPoint.

Оцените эффективность модели регрессии на наборе обучающих данных и наборе тестов путем вычисления среднеквадратических ошибок (MSEs). Меньшие значения MSE указывают на лучшую эффективность.

LTraining = resubLoss(Mdl)
LTraining = 6.2224
LTest = loss(Mdl,XTest,YTest)
LTest = 18.5724

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

В качестве альтернативы можно найти оптимальные значения fitrgam аргументы name-value при помощи аргумента значения имени OptimizeHyperparameters. Для примера смотрите, Оптимизируют GAM Используя OptimizeHyperparameters.

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

load carbig

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

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

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

[Y,TF] = rmmissing(Y);
X = X(~TF);

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

c = cvpartition(length(Y),'KFold',5);

Подготовьте optimizableVariable объекты для аргументов name-value, что вы хотите оптимизировать использующую Байесовую оптимизацию. Этот пример находит оптимальные значения для 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,'CVPartition',c, ...
    'MaxNumSplitsPerPredictor',z.maxNumSplits, ...
    'NumTreesPerPredictor',z.numTrees)); 

Если вы задаете опцию перекрестной проверки, то fitrgam функция возвращает перекрестный подтвержденный объект модели RegressionPartitionedGAM. 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             8    

Обучите оптимизированный 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'. formula аргумент задает переменную отклика и линейные члены и периоды взаимодействия для переменных предикторов. Используйте formula задавать подмножество переменных в Tbl как предикторы для обучения модель. Если вы задаете формулу, то программное обеспечение не использует переменных в Tbl это не появляется в formula.

Например, задайте 'Y~x1+x2+x3+x1:x2'. В этой форме, Y представляет переменную отклика и x1x2 , и 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

свернуть все

Отметьте, чтобы подобрать модель для стандартного отклонения переменной отклика в виде логического 0 ложь) или 1 TRUE).

Если вы задаете 'FitStandardDeviation' как trueто fitrgam обучает дополнительную модель стандартному отклонению переменной отклика и устанавливает IsStandardDeviationFit свойство объекта Mdl выхода GAM к true.

Чтобы вычислить значения стандартного отклонения для заданных наблюдений, использовать predict, resubPredict, или kfoldPredict. Эти функции также возвращают интервалы предсказания переменной отклика.

Методические рекомендации должны использовать оптимальные гиперпараметры, когда вы подбираете модель стандартного отклонения для точности оценок стандартного отклонения. Задайте OptimizeHyperparameters как 'all-univariate' (для одномерного GAM) или 'all' (для двумерного GAM) вместе с 'FitStandardDeviation',true.

Пример: 'FitStandardDeviation',true

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Список периодов взаимодействия в виде логической матрицы — S включает термины, заданные t- 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 равновероятные интервалы, и затем выращивают деревья на индексах интервала вместо исходных данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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. 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

Примечание

Вы не можете использовать аргумент значения имени перекрестной проверки вместе с 'OptimizeHyperparameters' аргумент значения имени. Можно изменить перекрестную проверку для 'OptimizeHyperparameters' только при помощи 'HyperparameterOptimizationOptions' аргумент значения имени.

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

свернуть все

Отметьте, чтобы обучить перекрестную подтвержденную модель в виде 'on' или 'off'.

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

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

В качестве альтернативы перекрестный подтвердите после создания модели путем передачи Mdl к crossval.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опции гипероптимизации параметров управления

свернуть все

Параметры, чтобы оптимизировать в виде одного из этих значений:

  • 'none' — Не оптимизировать.

  • 'auto' — Оптимизируйте InitialLearnRateForPredictors, NumTreesPerPredictor, Interactions, InitialLearnRateForInteractions, и NumTreesPerInteraction.

  • 'auto-univariate' — Оптимизируйте InitialLearnRateForPredictors и NumTreesPerPredictor.

  • 'auto-bivariate' — Оптимизируйте Interactions, InitialLearnRateForInteractions, и NumTreesPerInteraction.

  • 'all' — Оптимизируйте все имеющие право параметры.

  • 'all-univariate' — Оптимизируйте все имеющие право одномерные параметры.

  • 'all-bivariate' — Оптимизируйте все имеющие право двумерные параметры.

  • Массив строк или массив ячеек имеющих право названий параметра.

  • Вектор из optimizableVariable объекты, обычно выход hyperparameters.

Имеющие право параметры для fitrgam :

  • Одномерные гиперпараметры

    • InitialLearnRateForPredictorsfitrgam поисковые запросы среди вещественных значений, масштабируемых журналом в области значений [1e-3,1].

    • MaxNumSplitsPerPredictorfitrgam поисковые запросы среди целых чисел в области значений [1,maxNumSplits], где maxNumSplits min(30,max(2,NumObservations–1)). NumObservations количество наблюдений, исключая недостающие наблюдения, сохраненные в NumObservations свойство возвращенной модели Mdl.

    • NumTreesPerPredictorfitrgam поисковые запросы среди целых чисел, масштабируемых журналом в области значений [10,500].

  • Двумерные гиперпараметры

    • Interactionsfitrgam поисковые запросы среди целых чисел, масштабируемых журналом в области значений [0,MaxNumInteractions]t, где MaxNumInteractions NumPredictors*(NumPredictors – 1)/2, и NumPredictors количество предикторов, используемых, чтобы обучить модель.

    • InitialLearnRateForInteractionsfitrgam поисковые запросы среди вещественных значений, масштабируемых журналом в области значений [1e-3,1].

    • MaxNumSplitsPerInteractionfitrgam поисковые запросы среди целых чисел в области значений [1,maxNumSplits].

    • NumTreesPerInteractionfitrgam поисковые запросы среди целых чисел, масштабируемых журналом в области значений [10,500].

Используйте 'auto' или 'all' найти оптимальные гиперзначения параметров и для одномерных и для двумерных параметров. В качестве альтернативы можно найти оптимальные значения для одномерных параметров с помощью 'auto-univariate' или 'all-univariate' и затем найдите оптимальные значения для двумерных параметров с помощью 'auto-bivariate' или 'all-bivariate'. Для примеров смотрите, Оптимизируют GAM Используя OptimizeHyperparameters и Обучают Обобщенную Аддитивную Модель Регрессии.

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

Примечание

Значения 'OptimizeHyperparameters' замените любые значения, вы задаете использование других аргументов name-value. Например, установка 'OptimizeHyperparameters' к 'auto' причины fitrgam оптимизировать гиперпараметры, соответствующие 'auto' опция и проигнорировать любые заданные значения для гиперпараметров.

Установите параметры не по умолчанию путем передачи вектора из optimizableVariable объекты, которые имеют значения не по умолчанию. Например:

load carsmall
params = hyperparameters('fitrgam',[Horsepower,Weight],MPG);
params(1).Range = [1e-4,1e6];

Передайте params как значение OptimizeHyperparameters.

По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков, целевая функция является журналом (1 + потеря перекрестной проверки). Чтобы управлять итеративным отображением, установите Verbose поле 'HyperparameterOptimizationOptions' аргумент значения имени. Чтобы управлять графиками, установите ShowPlots поле 'HyperparameterOptimizationOptions' аргумент значения имени.

Пример: 'OptimizeHyperparameters','auto'

Опции для оптимизации в виде структуры. Этот аргумент изменяет эффект OptimizeHyperparameters аргумент значения имени. Все поля в структуре являются дополнительными.

Имя поляЗначенияЗначение по умолчанию
Optimizer
  • 'bayesopt' — Используйте Байесовую оптимизацию. Внутренне, эта установка вызовы bayesopt.

  • 'gridsearch' — Используйте поиск сетки с NumGridDivisions значения на размерность.

  • 'randomsearch' — Поиск наугад среди MaxObjectiveEvaluations 'points'.

'gridsearch' поисковые запросы в произвольном порядке, с помощью универсальной выборки без замены от сетки. После оптимизации можно получить таблицу в порядке сетки при помощи команды sortrows(Mdl.HyperparameterOptimizationResults).

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

Захват функционирует, чьи имена включают per-second не приводите к восстанавливаемым результатам, потому что оптимизация зависит от времени выполнения целевой функции. Захват функционирует, чьи имена включают plus измените их поведение, когда они сверхиспользуют область. Для получения дополнительной информации смотрите Типы Функции Захвата.

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsМаксимальное количество оценок целевой функции.30 для 'bayesopt' и 'randomsearch', и целая сетка для 'gridsearch'
MaxTime

Ограничение по времени в виде положительного действительного скаляра. Ограничение по времени находится в секундах, как измерено tic и toc. Время выполнения может превысить MaxTime потому что MaxTime не делает оценок функции обработки прерываний.

Inf
NumGridDivisionsДля 'gridsearch', количество значений в каждой размерности. Значение может быть вектором из положительных целых чисел, дающих количество значений для каждой размерности или скаляр, который применяется ко всем размерностям. Это поле проигнорировано для категориальных переменных.10
ShowPlotsЛогическое значение, указывающее, показать ли графики. Если true, это поле строит лучшее наблюдаемое значение целевой функции против номера итерации. Если вы используете Байесовую оптимизацию (Optimizer 'bayesopt'), затем это поле также строит лучшее предполагаемое значение целевой функции. Лучшие наблюдаемые значения целевой функции и лучше всего оцененные значения целевой функции соответствуют значениям в BestSoFar (observed) и BestSoFar (estim.) столбцы итеративного отображения, соответственно. Можно найти эти значения в свойствах ObjectiveMinimumTrace и EstimatedObjectiveMinimumTrace из Mdl.HyperparameterOptimizationResults. Если проблема включает один или два параметра оптимизации для Байесовой оптимизации, то ShowPlots также строит модель целевой функции против параметров.true
SaveIntermediateResultsЛогическое значение, указывающее, сохранить ли результаты когда Optimizer 'bayesopt'. Если true, это поле перезаписывает переменную рабочей области под названием 'BayesoptResults' в каждой итерации. Переменной является BayesianOptimization объект.false
Verbose

Отображение в командной строке:

  • 0 — Никакое итеративное отображение

  • 1 Итеративное отображение

  • 2 — Итеративное отображение с дополнительной информацией

Для получения дополнительной информации смотрите bayesopt Verbose аргумент значения имени и пример Оптимизируют Подгонку Классификатора Используя Байесовую Оптимизацию.

1
UseParallelЛогическое значение, указывающее, запустить ли Байесовую оптимизацию параллельно, которая требует Parallel Computing Toolbox™. Из-за невоспроизводимости синхронизации параллели, параллельная Байесова оптимизация не обязательно приводит к восстанавливаемым результатам. Для получения дополнительной информации смотрите Параллельную Байесовую Оптимизацию.false
Repartition

Логическое значение, указывающее, повторно разделить ли перекрестную проверку в каждой итерации. Если этим полем является false, оптимизатор использует один раздел для оптимизации.

Установка true обычно дает большинство устойчивых результатов, потому что это принимает шум разделения во внимание. Однако для хороших результатов, true требует, по крайней мере, вдвое большего количества вычислений функции.

false
Используйте не больше, чем одну из следующих трех опций.
CVPartitioncvpartition объект, как создано cvpartition'Kfold',5 если вы не задаете поле перекрестной проверки
HoldoutСкаляр в области значений (0,1) представление части затяжки
KfoldЦелое число, больше, чем 1

Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

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

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

свернуть все

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

Объект моделиОпции перекрестной проверки, чтобы обучить объект моделиСпособы предсказать ответы Используя объект модели
RegressionGAM'none'Использование 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 th предиктор, который является повышенным деревом для линейного члена для предиктора (дерево предиктора).

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

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

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

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

Если вы задаете 'FitStandardDeviation' из fitrgam как false (значение по умолчанию), затем fitrgam обучает модель среднему μ. Если вы задаете 'FitStandardDeviation' как trueто fitrgam обучает дополнительную модель стандартному отклонению σ и устанавливает IsStandardDeviationFit свойство объекта GAM к true.

Отклонение

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

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

- 2 (logL - logLs),

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

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

Алгоритмы

свернуть все

Алгоритм повышения градиента

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

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

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

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

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

    • Обновленная невязка = текущая невязка – (скорость обучения) · (ответ, объясненный новым деревом)

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

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

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

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

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

Ускорять процесс, fitrgam интервалы числовые предикторы в самое большее 8 равновероятных интервалов. Количество интервалов может быть меньше 8, если предиктор имеет меньше чем 8 уникальных значений. F - тест исследует нулевую гипотезу, что интервалы, созданные 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, 2013, стр 623–631.

Расширенные возможности

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