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: 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 (δ=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);

Оцените регрессионные потери набора обучающих данных с помощью функции потерь 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 -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-by-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-е наблюдение (строка данных предиктора).

  • yj - наблюдаемая реакция на xj.

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

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

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

Функция эпсилона-нечувствительных потерь

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

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

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

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

где:

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

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

  • yj - наблюдаемая реакция на xj.

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

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

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

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

Введенный в R2018a
Для просмотра документации необходимо авторизоваться на сайте