exponenta event banner

потеря

Регрессионная потеря для обобщенной аддитивной модели (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-на-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) 2∑j=1nwj,

    где:

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

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

    • yj - истинный ответ на xj.

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

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

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