Потеря регрессии для Гауссовой модели регрессии ядра
L = loss(Mdl,X,Y)L = loss(Mdl,X,Y,Name,Value)Обучите Гауссову модель регрессии ядра длинному массиву, затем вычислите среднеквадратическую ошибку перезамены и нечувствительную к эпсилону ошибку.
Создайте datastore, который ссылается на местоположение папки с данными. Данные могут содержаться в одном файле, наборе файлов или целой папке. Обработайте значения 'NA' как недостающие данные так, чтобы datastore заменил их на значения NaN. Выберите подмножество переменных, чтобы использовать. Составьте длинную таблицу сверху datastore.
varnames = {'ArrTime','DepTime','ActualElapsedTime'};
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
'SelectedVariableNames',varnames);
t = tall(ds);Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.
Задайте DepTime и ArrTime как переменные прогноза (X) и ActualElapsedTime как переменная отклика (Y). Выберите наблюдения, для которых ArrTime позже, чем DepTime.
daytime = t.ArrTime>t.DepTime; Y = t.ActualElapsedTime(daytime); % Response data X = t{daytime,{'DepTime' 'ArrTime'}}; % Predictor data
Стандартизируйте переменные прогноза.
Z = zscore(X); % Standardize the dataОбучите Гауссову модель регрессии ядра по умолчанию со стандартизированными предикторами. Установите 'Verbose',0 подавлять диагностические сообщения.
[Mdl,FitInfo] = fitrkernel(Z,Y,'Verbose',0)Mdl =
RegressionKernel
PredictorNames: {'x1' 'x2'}
ResponseName: 'Y'
Learner: 'svm'
NumExpansionDimensions: 64
KernelScale: 1
Lambda: 8.5385e-06
BoxConstraint: 1
Epsilon: 5.9303
Properties, Methods
FitInfo = struct with fields:
Solver: 'LBFGS-tall'
LossFunction: 'epsiloninsensitive'
Lambda: 8.5385e-06
BetaTolerance: 1.0000e-03
GradientTolerance: 1.0000e-05
ObjectiveValue: 31.2279
GradientMagnitude: 0.0182
RelativeChangeInBeta: 0.0465
FitTime: 68.4420
History: []
Mdl является обученной моделью RegressionKernel и массивом структур, FitInfo содержит детали оптимизации.
Определите, как хорошо обученная модель делает вывод к новым значениям предиктора путем оценки среднеквадратической ошибки перезамены и нечувствительной к эпсилону ошибки.
lossMSE = loss(Mdl,Z,Y) % Resubstitution mean squared errorlossMSE =
M×N×... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Preview deferred. Learn more.
lossEI = loss(Mdl,Z,Y,'LossFun','epsiloninsensitive') % Resubstitution epsilon-insensitive error
lossEI =
M×N×... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Preview deferred. Learn more.
Оцените длинные массивы и загрузите результаты в память при помощи gather.
[lossMSE,lossEI] = gather(lossMSE,lossEI)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 2 sec Evaluation completed in 2.4 sec
lossMSE = 2.8508e+03
lossEI = 28.1095
Задайте пользовательскую потерю регрессии (утрата Хубера) для Гауссовой модели регрессии ядра.
Загрузите набор данных carbig.
load carbigЗадайте переменные прогноза (X) и переменная отклика (Y).
X = [Weight,Cylinders,Horsepower,Model_Year]; Y = MPG;
Удалите строки X и Y, где любой массив имеет значения NaN. При удалении строк со значениями NaN, прежде чем передающие данные к fitrkernel могут ускорить обучение и уменьшать использование памяти.
R = rmmissing([X Y]); X = R(:,1:4); Y = R(:,end);
Зарезервируйте 10% наблюдений как выборка затяжки. Извлеките обучение и протестируйте индексы из определения раздела.
rng(10) % For reproducibility N = length(Y); cvp = cvpartition(N,'Holdout',0.1); idxTrn = training(cvp); % Training set indices idxTest = test(cvp); % Test set indices
Стандартизируйте данные тренировки и обучите модель ядра регрессии.
Xtrain = X(idxTrn,:);
Ytrain = Y(idxTrn);
[Ztrain,tr_mu,tr_sigma] = zscore(Xtrain); % Standardize the training data
tr_sigma(tr_sigma==0) = 1;
Mdl = fitrkernel(Ztrain,Ytrain)Mdl =
RegressionKernel
ResponseName: 'Y'
Learner: 'svm'
NumExpansionDimensions: 128
KernelScale: 1
Lambda: 0.0028
BoxConstraint: 1
Epsilon: 0.8617
Properties, Methods
Mdl является моделью RegressionKernel.
Создайте анонимную функцию, которая измеряет утрату Хубера , то есть,
где
невязка для наблюдения j. Пользовательские функции потерь должны быть написаны в конкретной форме. Для правил о записи пользовательской функции потерь смотрите аргумент пары "имя-значение" 'LossFun'.
huberloss = @(Y,Yhat,W)sum(W.*((0.5*(abs(Y-Yhat)<=1).*(Y-Yhat).^2) + ...
((abs(Y-Yhat)>1).*abs(Y-Yhat)-0.5)))/sum(W);Оцените потерю регрессии набора обучающих данных с помощью функции потерь Хубера.
eTrain = loss(Mdl,Ztrain,Ytrain,'LossFun',huberloss)eTrain = 1.7210
Стандартизируйте тестовые данные с помощью того же среднего и стандартного отклонения столбцов данных тренировки. Оцените потерю регрессии набора тестов с помощью функции потерь Хубера.
Xtest = X(idxTest,:); Ztest = (Xtest-tr_mu)./tr_sigma; % Standardize the test data Ytest = Y(idxTest); eTest = loss(Mdl,Ztest,Ytest,'LossFun',huberloss)
eTest = 1.3062
Mdl — Модель регрессии ядраRegressionKernelМодель регрессии ядра, заданная как объект модели RegressionKernel. Можно создать объект модели RegressionKernel с помощью fitrkernel.
X Данные о предиктореДанные о предикторе, заданные как n-by-p числовая матрица, где n является количеством наблюдений и p, являются количеством предикторов. p должен быть равен количеству предикторов, используемых, чтобы обучить Mdl.
Типы данных: single | double
Y Данные об ответеДанные об ответе, заданные как n - размерный числовой вектор. Длина Y и количество наблюдений в X должны быть равными.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
L = loss(Mdl,X,Y,'LossFun','epsiloninsensitive','Weights',weights) возвращает взвешенную потерю регрессии с помощью нечувствительной к эпсилону функции потерь.'LossFun' — Функция потерь'mse' (значение по умолчанию) | 'epsiloninsensitive' | указатель на функциюФункция потерь, заданная как пара, разделенная запятой, состоящая из 'LossFun' и встроенного имени функции потерь или указателя на функцию.
В следующей таблице перечислены доступные функции потерь. Задайте тот с помощью его соответствующего вектора символов или представьте скаляр в виде строки. Кроме того, в таблице,
x является наблюдением (вектор - строка) от переменных прогноза p.
преобразование наблюдения (вектор - строка) для расширения функции. T (x) сопоставляет x в к высокому мерному пространству ().
β является вектором коэффициентов m.
b является скалярным смещением.
| Значение | Описание |
|---|---|
'epsiloninsensitive' | Нечувствительная к эпсилону потеря: |
'mse' | MSE: |
'epsiloninsensitive' подходит для учеников SVM только.
Задайте свою собственную функцию при помощи обозначения указателя на функцию.
Позвольте n быть количеством наблюдений в X. Ваша функция должна иметь эту подпись:
lossvalue = lossfun(Y,Yhat,W)Выходным аргументом lossvalue является скаляр.
Вы выбираете имя функции (lossfun).
Y является n - размерный вектор наблюдаемых ответов. loss передает входной параметр Y в для Y.
Yhat является n - размерный вектор предсказанных ответов, который подобен выводу predict.
W является n-by-1 числовой вектор весов наблюдения.
Задайте свою функцию с помощью .'LossFun',@lossfun
Типы данных: char | string | function_handle
'Weights' — Веса наблюденияones(n,1)/n (значение по умолчанию) | числовой вектор положительных значенийВеса наблюдения, заданные как пара, разделенная запятой, состоящая из 'Weights' и числовой вектор положительных значений. loss взвешивает наблюдения в X с соответствующими значениями в Weights. Размер Weights должен равняться n, количеству наблюдений (строки в X). Если вы предоставляете веса наблюдения, loss вычисляет взвешенную потерю регрессии, то есть, Квадратичную невязку Взвешенного среднего или Нечувствительную к эпсилону Функцию потерь.
loss нормирует Weights, чтобы суммировать к 1.
Типы данных: double | single
Квадратичная невязка взвешенного среднего вычисляется можно следующим образом:
где:
n является количеством наблюдений.
xj является j th наблюдение (строка данных о предикторе).
yj является наблюдаемым ответом на xj.
f (xj) является прогнозом ответа Гауссовой модели Mdl регрессии ядра к xj.
w является вектором весов наблюдения.
Каждый вес наблюдения в w равен ones(n,1)/n по умолчанию. Можно задать различные значения для весов наблюдения при помощи аргумента пары "имя-значение" 'Weights'. loss нормирует Weights, чтобы суммировать к 1.
Нечувствительная к эпсилону функция потерь игнорирует ошибки, которые являются в эпсилоне расстояния (ε) значения функции. Функция официально описана как:
Средняя нечувствительная к эпсилону потеря вычисляется можно следующим образом:
где:
n является количеством наблюдений.
xj является j th наблюдение (строка данных о предикторе).
yj является наблюдаемым ответом на xj.
f (xj) является прогнозом ответа Гауссовой модели Mdl регрессии ядра к xj.
w является вектором весов наблюдения.
Каждый вес наблюдения в w равен ones(n,1)/n по умолчанию. Можно задать различные значения для весов наблюдения при помощи аргумента пары "имя-значение" 'Weights'. loss нормирует Weights, чтобы суммировать к 1.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.