RegressionPartitionedGAM

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

    Описание

    RegressionPartitionedGAM набор обобщенных аддитивных моделей, обученных на перекрестных подтвержденных сгибах. Оцените качество перекрестной подтвержденной регрессии при помощи одной или нескольких функций kfold: kfoldPredict, kfoldLoss, и kfoldfun.

    Каждые модели использования функции объекта kfold, обученные на учебном сгибе, (окутывают) наблюдения, чтобы предсказать ответ для сгиба валидации наблюдения (из сгиба). Например, предположите, что вы перекрестный подтверждаете использование пяти сгибов. Программное обеспечение случайным образом присваивает каждое наблюдение в пять групп равного размера (примерно). training fold содержит четыре из групп (примерно 4/5 данных), и validation fold содержит другую группу (примерно 1/5 данных). В этом случае перекрестная проверка продолжает можно следующим образом:

    1. Программное обеспечение обучает первую модель (сохраненный в CVMdl.Trained{1}) при помощи наблюдений в последних четырех группах и резервов наблюдения в первой группе для валидации.

    2. Программное обеспечение обучает вторую модель (сохраненный в CVMdl.Trained{2}) при помощи наблюдений в первой группе и последних трех группах. Программное обеспечение резервирует наблюдения во второй группе для валидации.

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

    Если вы подтверждаете при помощи kfoldPredict, программное обеспечение вычисляет предсказания для наблюдений в группе i при помощи i th модель. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения при помощи модели, обученной без того наблюдения.

    Создание

    Можно создать RegressionPartitionedGAM модель двумя способами:

    • Создайте перекрестную подтвержденную модель из объекта GAM RegressionGAM при помощи crossval объектная функция.

    • Создайте перекрестную подтвержденную модель при помощи fitrgam функция и определение одного из аргументов 'CrossVal' значения имени, 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Свойства

    развернуть все

    Свойства перекрестной проверки

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

    Перекрестное подтвержденное имя модели в виде 'GAM'.

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

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

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

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

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

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

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

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

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

    Компактные модели, обученные на перекрестной проверке, сворачиваются в виде массива ячеек CompactRegressionGAM объекты модели. Trained имеет ячейки k, где k является количеством сгибов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Предикторы раньше перекрестный подтверждали модель в виде числовой матрицы или таблицу.

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

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

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

    Ответ раньше перекрестный подтверждал модель в виде числового вектора.

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

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

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

    kfoldPredictПредскажите ответы для наблюдений в перекрестной подтвержденной модели регрессии
    kfoldLossПотеря для перекрестной подтвержденной разделенной модели регрессии
    kfoldfunПерекрестный подтвердите функцию для регрессии

    Примеры

    свернуть все

    Обучите перекрестный подтвержденный 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
    
    

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

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

    load patients

    Составьте таблицу, которая содержит переменные предикторы (Age, Diastolic, Smoker, Weight, Gender, SelfAssessedHealthStatus) и переменная отклика (Systolic).

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

    Обучите GAM, который содержит линейные члены для предикторов.

    Mdl = fitrgam(tbl,'Systolic');

    Mdl RegressionGAM объект модели.

    Перекрестный подтвердите модель путем определения 30%-й выборки затяжки.

    rng('default') % For reproducibility
    CVMdl = crossval(Mdl,'Holdout',0.3)
    CVMdl = 
      RegressionPartitionedGAM
          CrossValidatedModel: 'GAM'
               PredictorNames: {1x6 cell}
        CategoricalPredictors: [3 5 6]
                 ResponseName: 'Systolic'
              NumObservations: 100
                        KFold: 1
                    Partition: [1x1 cvpartition]
            NumTrainedPerFold: [1x1 struct]
            ResponseTransform: 'none'
    
    
      Properties, Methods
    
    

    crossval функция создает RegressionPartitionedGAM объект модели CVMdl с опцией затяжки. Во время перекрестной проверки программное обеспечение завершает эти шаги:

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

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

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

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

    yFit = kfoldPredict(CVMdl);

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

    idx = find(~isnan(yFit));
    t = table(idx,tbl.Systolic(idx),yFit(idx), ...
        'VariableNames',{'Obseraction Index','Observed Value','Predicted Value'});
    head(t)
    ans=8×3 table
        Obseraction Index    Observed Value    Predicted Value
        _________________    ______________    _______________
    
                1                 124              130.22     
                6                 121              124.38     
                7                 130              125.26     
               12                 115              117.05     
               20                 125              121.82     
               22                 123              116.99     
               23                 114                 107     
               24                 128              122.52     
    
    

    Вычислите ошибку регрессии (среднеквадратическая ошибка) для наблюдений сгиба валидации.

    L = kfoldLoss(CVMdl)
    L = 43.8715
    

    Обучите перекрестную подтвержденную обобщенную аддитивную модель (GAM) с 10 сгибами. Затем используйте kfoldLoss вычислить совокупную потерю регрессии перекрестной проверки (среднеквадратические ошибки). Используйте ошибки определить оптимальное количество деревьев на предиктор (линейный член для предиктора) и оптимальное количество деревьев в период взаимодействия.

    В качестве альтернативы можно найти оптимальные значения fitrgam аргументы значения имени при помощи bayesopt функция. Для примера смотрите, Оптимизируют перекрестный Подтвержденный GAM Используя bayesopt.

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

    load patients

    Составьте таблицу, которая содержит переменные предикторы (Age, Diastolic, Smoker, Weight, Gender, и SelfAssessedHealthStatus) и переменная отклика (Systolic).

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

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

    rng('default') % For reproducibility
    CVMdl = fitrgam(tbl,'Systolic','CrossVal','on','Interactions',5);

    Если вы задаете 'Mode' как 'cumulative' для kfoldLoss, затем функция возвращает совокупные ошибки, которые являются средними погрешностями через все сгибы, полученные с помощью того же количества деревьев для каждого сгиба. Отобразите количество деревьев для каждого сгиба.

    CVMdl.NumTrainedPerFold 
    ans = struct with fields:
          PredictorTrees: [300 300 300 300 300 300 300 300 300 300]
        InteractionTrees: [76 100 100 100 100 42 100 100 59 100]
    
    

    kfoldLoss может вычислить совокупные ошибки до 300 деревьев предиктора и 42 дерева взаимодействия.

    Постройте совокупное, перекрестное подтвержденное 10-кратное, среднеквадратические ошибки. Задайте 'IncludeInteractions' как false исключить периоды взаимодействия из расчета.

    L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false);
    figure
    plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)

    Figure contains an axes. The axes contains an object of type line.

    Первый элемент L_noInteractions средняя погрешность по всем сгибам, полученным с помощью только точку пересечения (постоянный) термин. (J+1) элемент th L_noInteractions полученное использование средней погрешности термина точки пересечения и первого J деревья предиктора на линейный член. Графический вывод совокупной потери позволяет вам контролировать, как ошибка изменяется как количество деревьев предиктора в увеличениях GAM.

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

    [M,I] = min(L_noInteractions)
    M = 28.0506
    
    I = 6
    

    GAM достигает минимальной ошибки, когда это включает 5 деревьев предиктора.

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

    L = kfoldLoss(CVMdl,'Mode','cumulative');
    figure
    plot(0:min(CVMdl.NumTrainedPerFold.InteractionTrees),L)

    Figure contains an axes. The axes contains an object of type line.

    Первый элемент L средняя погрешность по всем сгибам, полученным с помощью точки пересечения (постоянный) термин и все деревья предиктора на линейный член. (J+1) элемент th L полученное использование средней погрешности термина точки пересечения, всех деревьев предиктора на линейный член и первого J деревья взаимодействия в период взаимодействия. График показывает, что ошибка увеличивается, когда периоды взаимодействия добавляются.

    Если вы удовлетворены ошибкой, когда количество деревьев предиктора равняется 5, можно создать прогнозную модель по образованию одномерный GAM снова и определение 'NumTreesPerPredictor',5 без перекрестной проверки.

    Введенный в R2021a