loss

Класс: RegressionLinear

Потеря регрессии для моделей линейной регрессии

Описание

пример

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

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

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

пример

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

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

развернуть все

Модель линейной регрессии в виде RegressionLinear объект модели. Можно создать RegressionLinear использование объекта модели fitrlinear.

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

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем вы можете испытать значительное сокращение во время вычисления.

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

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

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

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

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

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

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

Имя переменной отклика в виде имени переменной в Tbl. Переменная отклика должна быть числовым вектором.

Если вы задаете ResponseVarName, затем необходимо задать его как вектор символов или строковый скаляр. Например, если переменная отклика хранится как Tbl.Y, затем задайте ResponseVarName как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.Y, как предикторы.

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Функция потерь в виде разделенной запятой пары, состоящей из 'LossFun' и встроенное имя функции потерь или указатель на функцию.

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

    • β является вектором из коэффициентов p.

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

    • 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

Размерность наблюдения данных о предикторе в виде 'rows' или 'columns'.

Примечание

Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns' для данных о предикторе в таблице.

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

Веса наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и числовой вектор или имя переменной в Tbl.

  • Если вы задаете Weights как числовой вектор, затем размер Weights должно быть равно количеству наблюдений в X или Tbl.

  • Если вы задаете Weights как имя переменной в Tbl, затем имя должно быть вектором символов или строковым скаляром. Например, если веса хранятся как Tbl.W, затем задайте Weights как 'W'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.W, как предикторы.

Если вы предоставляете веса, loss вычисляет взвешенную потерю регрессии и нормирует Weights суммировать к 1.

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

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

развернуть все

Потери регрессии, возвращенные в виде числа или вектора-строки. Интерпретация L зависит от Weights и LossFun.

L одного размера с Mdl.Lambda. L (j) потеря регрессии модели линейной регрессии, обученной с помощью силы регуляризации Mdl. Lambda (j).

Примечание

Если Mdl.FittedLoss 'mse', затем термин потерь в целевой функции является половиной MSE. loss возвращает MSE по умолчанию. Поэтому, если вы используете loss чтобы проверять перезамену (обучение) ошибка, затем существует несоответствие между MSE и результатами оптимизации это fitrlinear возвращается.

Примеры

развернуть все

Симулируйте 10 000 наблюдений из этой модели

y=x100+2x200+e.

  • X=x1,...,x1000 10000 1000 разреженная матрица с 10%-ми ненулевыми стандартными нормальными элементами.

  • e является случайной нормальной ошибкой со средним значением 0 и стандартным отклонением 0.3.

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Обучите модель линейной регрессии. Зарезервируйте 30% наблюдений как выборка затяжки.

CVMdl = fitrlinear(X,Y,'Holdout',0.3);
Mdl = CVMdl.Trained{1}
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0066
               Lambda: 1.4286e-04
              Learner: 'svm'


  Properties, Methods

CVMdl RegressionPartitionedLinear модель. Это содержит свойство Trained, который является массивом ячеек 1 на 1, содержащим RegressionLinear модель, что программное обеспечение обучило использование набора обучающих данных.

Извлеките обучение и тестовые данные из определения раздела.

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

Оцените обучение - и демонстрационный тестом MSE.

mseTrain = loss(Mdl,X(trainIdx,:),Y(trainIdx))
mseTrain = 0.1496
mseTest = loss(Mdl,X(testIdx,:),Y(testIdx))
mseTest = 0.1798

Поскольку существует одна сила регуляризации в Mdl, mseTrain и mseTest числовые скаляры.

Симулируйте 10 000 наблюдений из этой модели

y=x100+2x200+e.

  • X=x1,...,x1000 10000 1000 разреженная матрица с 10%-ми ненулевыми стандартными нормальными элементами.

  • e является случайной нормальной ошибкой со средним значением 0 и стандартным отклонением 0.3.

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz); 
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);
X = X'; % Put observations in columns for faster training

Обучите модель линейной регрессии. Зарезервируйте 30% наблюдений как выборка затяжки.

CVMdl = fitrlinear(X,Y,'Holdout',0.3,'ObservationsIn','columns'); 
Mdl = CVMdl.Trained{1}
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0066
               Lambda: 1.4286e-04
              Learner: 'svm'


  Properties, Methods

CVMdl RegressionPartitionedLinear модель. Это содержит свойство Trained, который является массивом ячеек 1 на 1, содержащим RegressionLinear модель, что программное обеспечение обучило использование набора обучающих данных.

Извлеките обучение и тестовые данные из определения раздела.

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

Создайте анонимную функцию, которая измеряет утрату Хубера (δ = 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,X(:,trainIdx),Y(trainIdx),'LossFun',huberloss,...
    'ObservationsIn','columns')
eTrain = -0.4186
eTest = loss(Mdl,X(:,testIdx),Y(testIdx),'LossFun',huberloss,...
    'ObservationsIn','columns')
eTest = -0.4010

Симулируйте 10 000 наблюдений из этой модели

y=x100+2x200+e.

  • X={x1,...,x1000} 10000 1000 разреженная матрица с 10%-ми ненулевыми стандартными нормальными элементами.

  • e является случайной нормальной ошибкой со средним значением 0 и стандартным отклонением 0.3.

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Создайте набор 15 логарифмически распределенных сильных мест регуляризации от 10-4 через 10-1.

Lambda = logspace(-4,-1,15);

Протяните 30% данных для тестирования. Идентифицируйте демонстрационные тестом индексы.

cvp = cvpartition(numel(Y),'Holdout',0.30);
idxTest = test(cvp);

Обучите модель линейной регрессии, использующую штрафы лассо с сильными местами в Lambda. Задайте сильные места регуляризации, оптимизировав использование целевой функции SpaRSA и раздел данных. Чтобы увеличить скорость выполнения, транспонируйте данные о предикторе и укажите, что наблюдения находятся в столбцах.

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Solver','sparsa','Regularization','lasso','CVPartition',cvp);
Mdl1 = CVMdl.Trained{1};
numel(Mdl1.Lambda)
ans = 15

Mdl1 RegressionLinear модель. Поскольку Lambda 15-мерный вектор из сильных мест регуляризации, можно думать о Mdl1 как 15 обученных моделей, один для каждой силы регуляризации.

Оцените демонстрационную тестом среднеквадратическую ошибку для каждой упорядоченной модели.

mse = loss(Mdl1,X(:,idxTest),Y(idxTest),'ObservationsIn','columns');

Более высокие значения Lambda приведите к разреженности переменного предиктора, которая является хорошим качеством модели регрессии. Переобучите модель с помощью целого набора данных и всех опций, используемых ранее, кроме спецификации раздела данных. Определите количество ненулевых коэффициентов на модель.

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Solver','sparsa','Regularization','lasso');
numNZCoeff = sum(Mdl.Beta~=0);

На том же рисунке постройте MSE и частоту ненулевых коэффициентов для каждой силы регуляризации. Постройте все переменные на логарифмической шкале.

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} MSE')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
hold off

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Выберите индекс или индексы Lambda тот баланс минимальная ошибка классификации и разреженность переменного предиктора (например, Lambda(11)).

idx = 11;
MdlFinal = selectModels(Mdl,idx);

MdlFinal обученный RegressionLinear объект модели, который использует Lambda(11) как сила регуляризации.

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

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

| |

Введенный в R2016a