exponenta event banner

RegressionPartitionedGAM

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

    Описание

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

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

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

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

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

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

    Создание

    Можно создать 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 функция. Пример см. в разделе Оптимизация Cross-Validated GAM с использованием байесопта.

    Загрузить 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) -й элемент 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) -й элемент L - средняя ошибка, полученная с использованием члена перехвата, всех деревьев предиктора на линейный член и первого J деревья взаимодействия по члену взаимодействия. График показывает, что ошибка увеличивается при добавлении терминов взаимодействия.

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

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