Потеря регрессии для Гауссовой модели регрессии ядра
возвращает 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: 43.1330
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.99 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
модель.
Создайте анонимную функцию, которая измеряет утрату Хубера , то есть,
где
невязка для наблюдения 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
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)
Задайте свое использование функции '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
Квадратичная невязка взвешенного среднего вычисляется можно следующим образом:
где:
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.
Указания и ограничения по применению:
loss
не поддерживает высокий table
данные.
Для получения дополнительной информации см. Раздел "Высокие массивы".
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.