Регрессионые потери для модели регрессии Гауссова ядра
возвращает MSE для модели L = loss(Mdl,Tbl,ResponseVarName)Mdl использование данных предиктора в Tbl и истинные ответы в Tbl.ResponseVarName.
задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к любой комбинации входных аргументов в предыдущих синтаксисах. Для примера можно задать функцию потерь регрессии и веса наблюдений. Затем, L = loss(___,Name,Value)loss возвращает взвешенные потери регрессии с помощью указанной функции потерь.
Обучите регрессионую модель Гауссова ядра для длинный массив, затем вычислите среднюю квадратичную невязку реституции и нечувствительную к эпсилону ошибку.
При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer функция.
mapreducer(0)
Создайте datastore, которое ссылается на расположение папки с данными. Данные могут содержаться в одном файле, наборе файлов или целой папке. Лечите 'NA' значения как отсутствующие данные, так что datastore заменяет их на NaN значения. Выберите подмножество переменных для использования. Составьте длинная таблица в верхней части datastore.
varnames = {'ArrTime','DepTime','ActualElapsedTime'};
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
'SelectedVariableNames',varnames);
t = tall(ds);Задайте 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: 30.7814
GradientMagnitude: 0.0191
RelativeChangeInBeta: 0.0228
FitTime: 42.6229
History: []
Mdl является обученным RegressionKernel модель и массив структур FitInfo содержит детали оптимизации.
Определите, насколько хорошо обученная модель обобщается до новых значений предиктора, оценив среднюю квадратичную невязку реституции и нечувствительную к эпсилону ошибку.
lossMSE = loss(Mdl,Z,Y) % Resubstitution mean squared errorlossMSE =
MxNx... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
lossEI = loss(Mdl,Z,Y,'LossFun','epsiloninsensitive') % Resubstitution epsilon-insensitive error
lossEI =
MxNx... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Оцените длинные массивы и внесите результаты в память при помощи gather.
[lossMSE,lossEI] = gather(lossMSE,lossEI)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.96 sec Evaluation completed in 1.2 sec
lossMSE = 2.8851e+03
lossEI = 28.0050
Задайте пользовательскую регрессионую потерю (потерю Хубера) для регрессионой модели Гауссова ядра.
Загрузите 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 модель.
Создайте анонимную функцию, которая измеряет потерю Huber , то есть,
где
- невязка для наблюдения 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);Оцените регрессионные потери набора обучающих данных с помощью функции потерь Huber.
eTrain = loss(Mdl,Ztrain,Ytrain,'LossFun',huberloss)eTrain = 1.7210
Стандартизируйте тестовые данные, используя одно и то же среднее и стандартное отклонение столбцов обучающих данных. Оцените регрессионные потери тестового набора с помощью функции потерь Huber.
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
Tbl - Выборочные данныеВыборочные данные, используемых для обучения модели, заданная как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной переменной предиктора. Опционально Tbl может содержать дополнительные столбцы для переменной отклика и весов наблюдений. Tbl должны содержать все предикторы, используемые для обучения Mdl. Многополюсные переменные и массивы ячеек, отличные от массивов ячеек векторов символов, не разрешены.
Если Tbl содержит переменную отклика, используемую для обучения Mdl, тогда вам не нужно указывать ResponseVarName или Y.
Если вы обучаете Mdl используя выборочные данные, содержащуюся в таблице, затем входные данные для loss также должно быть в таблице.
ResponseVarName - Имя переменной откликаTblИмя переменной отклика, заданное как имя переменной в Tbl. Переменная отклика должна быть числовым вектором. Если Tbl содержит переменную отклика, используемую для обучения Mdl, тогда вам не нужно указывать ResponseVarName.
Если вы задаете ResponseVarName, затем необходимо задать его как вектор символов или строковый скаляр. Для примера, если переменная отклика сохранена как Tbl.Y, затем задайте ResponseVarName как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.Y, как предикторы.
Типы данных: char | string
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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(size(X,1),1) (по умолчанию) | числовой вектор | имя переменной в TblВеса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор или имя переменной в Tbl.
Если Weights является числовым вектором, затем размером Weights должно быть равно количеству строк в X или Tbl.
Если Weights - имя переменной в Tbl, необходимо указать Weights как вектор символов или строковый скаляр. Для примера, если веса сохранены как Tbl.W, затем задайте Weights как 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.W, как предикторы.
Если вы поставляете веса наблюдений, loss вычисляет взвешенные потери регрессии, то есть взвешенную среднюю квадратичную невязку или функцию эпсилона-нечувствительных потерь.
loss нормализует Weights в сумму до 1.
Типы данных: double | single | char | string
L - Регрессионные потериСредневзвешенная квадратичная невязка вычисляется следующим образом:
где:
n - количество наблюдений.
xj - j-е наблюдение (строка данных предиктора).
yj - наблюдаемая реакция на xj.
f (xj) является предсказанием отклика модели регрессии Гауссова ядра Mdl к xj.
w - вектор весов наблюдений.
Каждый вес наблюдения в w равен ones(n,1)/n по умолчанию. Можно задать различные значения для весов наблюдений с помощью 'Weights' аргумент пары "имя-значение". loss нормализует Weights в сумму до 1.
Функция нечувствительных к эпсилону потерь игнорирует ошибки, которые находятся в пределах расстояния epsilon (в) от значения функции. Функция формально описывается как:
Средняя нечувствительная к эпсилону потеря рассчитывается следующим образом:
где:
n - количество наблюдений.
xj - j-е наблюдение (строка данных предиктора).
yj - наблюдаемая реакция на xj.
f (xj) является предсказанием отклика модели регрессии Гауссова ядра Mdl к xj.
w - вектор весов наблюдений.
Каждый вес наблюдения в w равен ones(n,1)/n по умолчанию. Можно задать различные значения для весов наблюдений с помощью 'Weights' аргумент пары "имя-значение". loss нормализует Weights в сумму до 1.
Указания и ограничения по применению:
loss не поддерживает высокие table данные.
Для получения дополнительной информации см. Раздел «Длинные массивы»
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.