exponenta event banner

потеря

Класс: Линейный

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

Описание

пример

L = loss(Mdl,X,Y) возвращает среднеквадратическую ошибку (MSE) для модели линейной регрессии Mdl использование данных предиктора в X и соответствующие ответы в Y. L содержит 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) = + b.

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

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

    • 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

Измерение наблюдения данных предиктора, указанное как '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 возвращает.

Примеры

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

Моделирование 10000 наблюдений из этой модели

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 числовые скаляры.

Моделирование 10000 наблюдений из этой модели

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=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,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

Моделирование 10000 наблюдений из этой модели

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