Потеря регрессии для Гауссовой модели регрессии ядра
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 error
lossMSE = 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.