loss

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

    Описание

    пример

    L = loss(Mdl,Tbl,ResponseVarName) возвращает регрессионные потери (L), скаляр, представляющий как хорошо обобщенная аддитивная модель Mdl предсказывает данные предиктора в Tbl по сравнению с истинными значениями отклика в Tbl.ResponseVarName.

    Толкование L зависит от функции потерь ('LossFun') и схемы взвешивания ('Weights'). В целом лучшие модели дают меньшие значения потерь. Значение по умолчанию 'LossFun' значение 'mse' (средняя квадратичная невязка).

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

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

    пример

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

    Примеры

    свернуть все

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

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

    load patients

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

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

    Случайным образом разбейте наблюдения на набор обучающих данных и тестовый набор. Укажите 10% -ная выборка удержания для проверки.

    rng('default') % For reproducibility
    cv = cvpartition(size(tbl,1),'HoldOut',0.10);

    Извлеките индексы обучения и тестирования.

    trainInds = training(cv);
    testInds = test(cv);

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

    Mdl = fitrgam(tbl(trainInds,:),"Systolic");

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

    L = loss(Mdl,tbl(testInds,:))
    L = 35.7540
    

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

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

    load carbig

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

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

    Разделите набор данных на два набора: один, содержащий обучающие данные, и другой, содержащий новые, незащищенные тестовые данные. Резервируйте 10 наблюдений для нового набора тестовых данных.

    rng('default') % For reproducibility
    n = size(X,1);
    newInds = randsample(n,10);
    inds = ~ismember(1:n,newInds);
    XNew = X(newInds,:);
    YNew = Y(newInds);

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

    Mdl = fitrgam(X(inds,:),Y(inds),'Interactions','all');

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

    Вычислите MSE реституции (то есть MSE в выборке) как с терминами взаимодействия, так и без Mdl. Чтобы исключить условия взаимодействия, задайте 'IncludeInteractions',false.

    resubl = resubLoss(Mdl)
    resubl = 0.0292
    
    resubl_nointeraction = resubLoss(Mdl,'IncludeInteractions',false)
    resubl_nointeraction = 4.7330
    

    Вычислите MSE регрессии как с терминами взаимодействия, так и без для набора тестовых данных. Используйте объект модели, эффективный для памяти, для расчетов.

    CMdl = compact(Mdl);

    CMdl является CompactRegressionGAM объект модели.

    l = loss(CMdl,XNew,YNew)
    l = 12.8604
    
    l_nointeraction = loss(CMdl,XNew,YNew,'IncludeInteractions',false)
    l_nointeraction = 15.6741
    

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

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

    свернуть все

    Обобщенная аддитивная модель, заданная как RegressionGAM или CompactRegressionGAM объект модели.

    • Если вы тренировались Mdl используя выборочные данные, содержащуюся в таблице, затем входные данные для loss должно быть также в таблице (Tbl).

    • Если вы тренировались Mdl использование выборочных данных, содержащихся в матрице, затем входных данных для loss должно быть также в матрице (X).

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

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

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

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

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

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

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

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

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

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

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

    Если вы тренировались Mdl использование выборочных данных, содержащихся в матрице, затем входных данных для loss должно быть также в матрице.

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

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

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

    Пример: 'IncludeInteractions',false,'Weights',w задает, чтобы исключить условия взаимодействия из модели и использовать веса наблюдений w.

    Флаг для включения условий взаимодействия модели, заданный как true или false.

    Значение по умолчанию 'IncludeInteractions' значение true если Mdl содержит условия взаимодействия. Значение должно быть false если модель не содержит членов взаимодействия.

    Пример: 'IncludeInteractions',false

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

    Функция потерь, заданная как 'mse' или указатель на функцию.

    • 'mse' - Средневзвешенная квадратичная невязка.

    • Указатель на функцию - Чтобы задать пользовательскую функцию потерь, используйте указатель на функцию. Функция должна иметь следующую форму:

      lossval = lossfun(Y,YFit,W)

      • Выходной аргумент lossval является скаляром с плавающей точкой.

      • Вы задаете имя функции (lossfun).

      • Y - это линейный n численный вектор наблюдаемых откликов, где n - количество наблюдений в Tbl или X.

      • YFit является длинным n числовым вектором соответствующих предсказанных откликов.

      • W является n -by-1 числовым вектором весов наблюдений.

    Пример: 'LossFun', @ lossfun

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

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

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

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

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

    Подробнее о

    свернуть все

    Средневзвешенная квадратичная невязка

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

    Средневзвешенная квадратичная невязка вычисляется следующим образом:

    mse=j=1nwj(f(xj)yj)2j=1nwj,

    где:

    • n - количество строк данных.

    • xj - j строка данных.

    • yj - это истинная реакция на xj.

    • f (xj) является предсказанием отклика модели Mdl к xj.

    • w - вектор весов наблюдений.

    Введенный в R2021a