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