exponenta event banner

потеря

Регрессионная потеря для модели регрессии ядра Гаусса

Описание

пример

L = loss(Mdl,X,Y) возвращает среднеквадратическую ошибку (MSE) для модели регрессии ядра Гаусса Mdl использование данных предиктора в X и соответствующие ответы в Y.

L = loss(Mdl,Tbl,ResponseVarName) возвращает MSE для модели Mdl использование данных предиктора в Tbl и истинные ответы в Tbl.ResponseVarName.

L = loss(Mdl,Tbl,Y) возвращает MSE для модели Mdl использование данных предиктора в таблице Tbl и истинные ответы в Y.

пример

L = loss(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать функцию регрессионных потерь и веса наблюдений. Затем, loss возвращает взвешенную регрессионную потерю с использованием указанной функции потерь.

Примеры

свернуть все

Обучить модель регрессии ядра Гаусса для массива высокого уровня, затем вычислить среднеквадратичную ошибку и ошибку, не чувствительную к эпсилону.

При выполнении вычислений в массивах TALL MATLAB ® использует либо параллельный пул (по умолчанию при наличии Toolbox™ Parallel Computing), либо локальный сеанс MATLAB. Для выполнения примера с использованием локального сеанса MATLAB при наличии панели инструментов Parallel Computing Toolbox измените глобальную среду выполнения с помощью mapreducer функция.

mapreducer(0)

Создайте хранилище данных, которое ссылается на расположение папки с данными. Данные могут содержаться в одном файле, коллекции файлов или во всей папке. Удовольствие 'NA' значения как отсутствующие данные, так что datastore заменяет их на NaN значения. Выберите подмножество переменных для использования. Создайте высокую таблицу поверх хранилища данных.

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

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Оцените массивы tall и внесите результаты в память с помощью 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

Укажите пользовательские потери регрессии (потери Huber) для модели регрессии ядра Гаусса.

Загрузить 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 модель.

Создайте анонимную функцию, измеряющую потери Хубера (δ = 1), то есть

L=1∑wj∑j=1nwjℓj,

где

ℓj={0.5ejˆ2;|ejˆ|-0.5;|ejˆ|≤1|ejˆ|>1.

ejˆ - остаток для наблюдения 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

Входные аргументы

свернуть все

Регрессионная модель ядра, заданная как RegressionKernel объект модели. Можно создать RegressionKernel объект модели с использованием fitrkernel.

Данные предиктора, определенные как n-за-p числовая матрица, где n - количество наблюдений, а p - количество предикторов. p должно быть равно числу предикторов, используемых для обучения Mdl.

Типы данных: single | double

Данные ответа, указанные как n-мерный числовой вектор. Длина Y должно быть равно количеству наблюдений в X или Tbl.

Типы данных: single | double

Образец данных, используемых для обучения модели, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, Tbl может содержать дополнительные столбцы для переменной ответа и весов наблюдения. Tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.

Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName или Y.

Если вы тренируетесь Mdl используя образцы данных, содержащиеся в таблице, затем входные данные для loss также должен находиться в таблице.

Имя переменной ответа, указанное как имя переменной в 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' и встроенное имя функции потери или дескриптор функции.

  • В следующей таблице перечислены доступные функции потерь. Укажите его с помощью соответствующего вектора символа или скаляра строки. Также в таблице f (x) = T (x) β + b.

    • x - наблюдение (вектор строки) из p переменных предиктора.

    • T (·) - преобразование наблюдения (вектор строки) для расширения признаков. T (x) отображает x в ℝp в высокомерное пространство (ℝm).

    • β - вектор из m коэффициентов.

    • b - скалярное смещение.

    СтоимостьОписание
    'epsiloninsensitive'Эпсилон-нечувствительные потери: ℓ[y,f (x)] = max [0, | y f (x) | −
    'mse'MSE: ℓ[y,f (x)] = [y f (x)] 2

    'epsiloninsensitive' подходит только для учащихся SVM.

  • Укажите собственную функцию с помощью нотации дескриптора функции.

    Давайте n быть числом наблюдений в X. Ваша функция должна иметь следующую подпись:

    lossvalue = lossfun(Y,Yhat,W)

    • Выходной аргумент lossvalue является скаляром.

    • Выберите имя функции (lossfun).

    • Y представляет собой n-мерный вектор наблюдаемых ответов. loss передает входной аргумент Y в для Y.

    • Yhat - n-мерный вектор предсказанных откликов, аналогичный выходному сигналу predict.

    • W является n-по-1 числовой вектор весов наблюдения.

    Укажите свою функцию с помощью 'LossFun',@lossfun.

Типы данных: char | string | function_handle

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из '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 зависит от Weights и LossFun. Например, если используются веса наблюдения по умолчанию и указаны 'epsiloninsensitive' в качестве функции потерь, то L является эпсилон-нечувствительной потерей.

Подробнее

свернуть все

Средневзвешенная квадратичная ошибка

Средневзвешенная квадратичная ошибка рассчитывается следующим образом:

mse=∑j=1nwj (f (xj) yj) 2∑j=1nwj,

где:

  • n - число наблюдений.

  • xj - j-е наблюдение (строка данных предиктора).

  • yj - наблюдаемый ответ на xj.

  • f (xj) - прогноз ответа модели регрессии ядра ГауссаMdl в xj.

  • w - вектор весов наблюдения.

Каждый наблюдаемый вес в w равен ones(n,1)/n по умолчанию. Можно указать различные значения для весов наблюдения с помощью 'Weights' аргумент пары имя-значение. loss нормализует Weights для суммирования в 1.

Эпсилон-нечувствительная функция потерь

Функция потери, не чувствительная к эпсилону, игнорирует ошибки, которые находятся в пределах расстояния эпсилона ( Функция формально описывается как:

Lossstart= {0, если | y f (x) |≤ε'y−f (x) | −, в противном случае.

Средняя эпсилон-нечувствительная потеря рассчитывается следующим образом:

Loss=∑j=1nwjmax (0, | yj f (xj) | start) ∑j=1nwj,

где:

  • n - число наблюдений.

  • xj - j-е наблюдение (строка данных предиктора).

  • yj - наблюдаемый ответ на xj.

  • f (xj) - прогноз ответа модели регрессии ядра ГауссаMdl в xj.

  • w - вектор весов наблюдения.

Каждый наблюдаемый вес в w равен ones(n,1)/n по умолчанию. Можно указать различные значения для весов наблюдения с помощью 'Weights' аргумент пары имя-значение. loss нормализует Weights для суммирования в 1.

Расширенные возможности

Представлен в R2018a