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 объект модели.

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

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

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

    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

    Типы данных: логический

    Функция потерь в виде '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 th строка данных.

    • yj является истинным ответом на xj.

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

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

    Введенный в R2021a