RegressionPartitionedGAM

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

    Описание

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

    Каждая функция объекта kfold использует модели, обученные на обучающих-складных (in-fold) наблюдениях, чтобы предсказать ответ для наблюдений валидации-складки (out-of-fold). Например, предположим, что вы перекрестно проверяете с помощью пяти складок. Программа случайным образом присваивает каждое наблюдение пяти группам равного размера (примерно). training fold содержит четыре группы (примерно 4/5 данных), а validation fold - другую группу (примерно 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® function или функция, которую вы задаете, вводите указатель на функцию. Для примера можно ввести Mdl.ResponseTransform = @function, где function принимает числовой вектор исходных откликов и возвращает числовой вектор того же размера, содержащий преобразованные отклики.

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

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

    Веса наблюдений, используемые для обучения модели, заданные как n-на-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
    
    

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

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

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

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

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

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

    yHat = kfoldPredict(CVMdl);

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

    yHat(1:5)
    ans = 5×1
    
       19.4848
       15.7203
       15.5742
       15.3185
       17.8223
    
    

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

    L = kfoldLoss(CVMdl)
    L = 17.7248
    

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

    Обучите регрессионную обобщенную аддитивную модель (GAM) при помощи 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
    
    

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

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

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

    Введенный в R2021a