Потеря регрессии для обобщенной аддитивной модели (GAM)
возвращает потерю регрессии (L
= loss(Mdl
,Tbl
,ResponseVarName
)L
), скалярное представление, как хорошо обобщенная аддитивная модель Mdl
предсказывает данные о предикторе в Tbl
по сравнению с истинными значениями отклика в Tbl.ResponseVarName
.
Интерпретация L
зависит от функции потерь ('LossFun'
) и взвешивание схемы ('Weights'
). В общем случае лучшие модели дают к меньшим значениям потерь. 'LossFun'
по умолчанию значением является
'mse'
(среднеквадратическая ошибка).
задает опции с помощью одних или нескольких аргументов name-value в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно задать функцию потерь и веса наблюдения.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
Включая периоды взаимодействия достигает меньшей ошибки для набора тестовых данных и обучающего набора данных.
Mdl
— Обобщенная аддитивная модельRegressionGAM
объект модели | CompactRegressionGAM
объект моделиОбобщенная аддитивная модель в виде RegressionGAM
или CompactRegressionGAM
объект модели.
Tbl
— Выборочные данныеВыборочные данные в виде таблицы. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.
Tbl
должен содержать все предикторы, используемые, чтобы обучить Mdl
. Опционально, Tbl
может содержать столбец для переменной отклика и столбец для весов наблюдения.
Переменная отклика должна быть числовым вектором. Если переменная отклика в Tbl
имеет то же имя, как переменная отклика раньше обучала Mdl
, затем вы не должны задавать ResponseVarName
.
Значения веса должны быть числовым вектором. Необходимо задать веса наблюдения в Tbl
при помощи 'Weights'
.
Если вы обучили Mdl
использование выборочных данных, содержавшихся в таблице, затем входные данные для loss
должен также быть в таблице.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика в виде вектора символов или строкового скаляра, содержащего имя переменной отклика в Tbl
. Например, если переменная отклика Y
хранится в Tbl.Y
, затем задайте его как 'Y'
.
Типы данных: char |
string
X
— Данные о предиктореДанные о предикторе в виде числовой матрицы. Каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору.
Если вы обучили Mdl
использование выборочных данных, содержавшихся в матрице, затем входные данные для loss
должен также быть в матрице.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'IncludeInteractions',false,'Weights',w
задает, чтобы исключить периоды взаимодействия из модели и использовать веса наблюдения w
.IncludeInteractions
— Отметьте, чтобы включать периоды взаимодействияtrue
| false
Отметьте, чтобы включать периоды взаимодействия модели в виде true
или false
.
'IncludeInteractions'
по умолчанию значением является
true
если Mdl
содержит периоды взаимодействия. Значением должен быть false
если модель не содержит периоды взаимодействия.
Пример: 'IncludeInteractions',false
Типы данных: логический
LossFun
— Функция потерь'mse'
(значение по умолчанию) | указатель на функциюФункция потерь в виде '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
Weights
— Веса наблюденияones(size(X,1),1)
(значение по умолчанию) | вектор из скалярных значений | имя переменной в Tbl
Веса наблюдения в виде вектора из скалярных значений или имени переменной в Tbl
. Программное обеспечение взвешивает наблюдения в каждой строке X
или Tbl
с соответствующим значением в Weights
. Размер Weights
должен равняться количеству строк в X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть имя переменной в Tbl
это содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Например, если вектор весов W
хранится как Tbl.W
, затем задайте его как 'W'
.
loss
нормирует значения Weights
суммировать к 1.
Типы данных: single
| double
| char
| string
Квадратичная невязка взвешенного среднего измеряет прогнозирующую погрешность моделей регрессии. Когда вы сравниваете тот же тип потери среди многих моделей, более низкая ошибка указывает на лучшую прогнозную модель.
Квадратичная невязка взвешенного среднего вычисляется можно следующим образом:
где:
n является количеством строк данных.
xj является j th строка данных.
yj является истинным ответом на xj.
f (xj) является предсказанием ответа модели Mdl
к xj.
w является вектором из весов наблюдения.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.