loss

Потеря регрессии для Гауссовой модели регрессии ядра

Описание

пример

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 возвращает взвешенную потерю регрессии с помощью заданной функции потерь.

Примеры

свернуть все

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

Когда вы выполняете вычисления на длинных массивах, 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 модель.

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

L=1wjj=1nwjj,

где

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);

Оцените потерю регрессии набора обучающих данных с помощью функции потерь Хубера.

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

Входные параметры

свернуть все

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

Данные о предикторе в виде n-by-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,|yf(x)|ε]
    'mse'MSE: [y,f(x)]=[yf(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)2j=1nwj,

где:

  • n является количеством наблюдений.

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

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

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

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

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

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

Нечувствительная к эпсилону функция потерь игнорирует ошибки, которые являются в эпсилоне расстояния (ε) значения функции. Функция официально описана как:

Lossε={0,if|yf(x)|ε|yf(x)|ε,otherwise.

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

Loss=j=1nwjmax(0,|yjf(xj)|ε)j=1nwj,

где:

  • n является количеством наблюдений.

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

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

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

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

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

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

Смотрите также

| | |

Введенный в R2018a