kfoldLoss

Потеря регрессии для наблюдений, не используемых в обучении

Описание

пример

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

L содержит потерю регрессии для каждой силы регуляризации в моделях линейной регрессии, которые составляют CVMdl.

пример

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

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

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

Перекрестный подтвержденный, модель линейной регрессии в виде RegressionPartitionedLinear объект модели. Можно создать RegressionPartitionedLinear использование модели fitrlinear и определение любого того перекрестной проверки, аргументов пары "имя-значение", например, CrossVal.

Чтобы получить оценки, kfoldLoss применяется, те же данные раньше перекрестный подтверждали модель линейной регрессии (X и Y).

Аргументы name-value

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

Сверните индексы, чтобы использовать для предсказания ответа в виде разделенной запятой пары, состоящей из 'Folds' и числовой вектор из положительных целых чисел. Элементы Folds должен лежать в диапазоне от 1 через CVMdl.KFold.

Пример: 'Folds',[1 4 10]

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

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

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

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

    Задайте свое использование функции 'LossFun', @lossfun.

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

Уровень агрегации потерь в виде разделенной запятой пары, состоящей из 'Mode' и 'average' или 'individual'.

ЗначениеОписание
'average'Возвращает потери, усредненные по всем сгибам
'individual'Возвращает потери для каждого сгиба

Пример: 'Mode','individual'

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

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

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

Позвольте R будьте количеством сильных мест регуляризации, перекрестные подтвержденные модели (сохраненный в numel(CVMdl.Trained{1}.Lambda)) и F будьте количеством сгибов (сохраненный в CVMdl.KFold).

  • Если Mode 'average', затем L 1 R вектор. L (j) средняя потеря регрессии по всем сгибам перекрестной подтвержденной модели, которая использует силу регуляризации j.

  • В противном случае, L F- R матрица. L (iJ) потеря регрессии для сгиба i из перекрестной подтвержденной модели, которая использует силу регуляризации j.

Оценить L, kfoldLoss использует данные, которые создали CVMdl (см. X и Y).

Примеры

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

Симулируйте 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);

Перекрестный подтвердите модель линейной регрессии, использующую учеников SVM.

rng(1); % For reproducibility 
CVMdl = fitrlinear(X,Y,'CrossVal','on');

CVMdl RegressionPartitionedLinear модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно изменить количество сгибов с помощью 'KFold' аргумент пары "имя-значение".

Оцените среднее значение демонстрационного тестом MSEs.

mse = kfoldLoss(CVMdl)
mse = 0.1735

В качестве альтернативы можно получить MSEs на сгиб путем определения пары "имя-значение" 'Mode','individual' в kfoldLoss.

Симулируйте данные как в Оценочной Среднеквадратической ошибке k-сгиба.

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 

Перекрестный подтвердите модель линейной регрессии использование 10-кратной перекрестной проверки. Оптимизируйте использование целевой функции SpaRSA.

CVMdl = fitrlinear(X,Y,'CrossVal','on','ObservationsIn','columns',...
    'Solver','sparsa');

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

Создайте анонимную функцию, которая измеряет утрату Хубера (δ = 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);

Оцените среднее значение утрата Хубера по сгибам. Кроме того, получите утрату Хубера для каждого сгиба.

mseAve = kfoldLoss(CVMdl,'LossFun',huberloss)
mseAve = -0.4447
mseFold = kfoldLoss(CVMdl,'LossFun',huberloss,'Mode','individual')
mseFold = 10×1

   -0.4454
   -0.4473
   -0.4452
   -0.4469
   -0.4434
   -0.4427
   -0.4471
   -0.4430
   -0.4438
   -0.4426

Чтобы определить хорошую силу штрафа лассо для модели линейной регрессии, которая использует наименьшие квадраты, реализуйте 5-кратную перекрестную проверку.

Симулируйте 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-5 через 10-1.

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

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

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','KFold',5,'Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

CVMdl RegressionPartitionedLinear модель. Поскольку fitrlinear реализует 5-кратную перекрестную проверку, CVMdl содержит 5 RegressionLinear модели, которые программное обеспечение обучает на каждом сгибе.

Отобразите первую обученную модель линейной регрессии.

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x15 double]
                 Bias: [-0.0049 -0.0049 -0.0049 -0.0049 -0.0049 -0.0048 ... ]
               Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 ... ]
              Learner: 'leastsquares'


  Properties, Methods

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

Оцените перекрестный подтвержденный MSE.

mse = kfoldLoss(CVMdl);

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

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Learner','leastsquares','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 objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

Выберите индекс силы регуляризации, которая балансирует разреженность переменного предиктора и низкий MSE (например, Lambda(10)).

idxFinal = 10;

Извлеките модель с соответствием минимальному MSE.

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0050
               Lambda: 0.0037
              Learner: 'leastsquares'


  Properties, Methods

idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff = 2×1

   100
   200

EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff = 2×1

    1.0051
    1.9965

MdlFinal RegressionLinear модель с одной силой регуляризации. Ненулевые коэффициенты EstCoeff близко к коэффициентам, которые симулировали данные.

Введенный в R2016a