kfoldLoss

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

Синтаксис

L = kfoldLoss(CVMdl)
L = kfoldLoss(CVMdl,Name,Value)

Описание

Описание

пример

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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-by-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-by-R матрица. L(i,j) является потерей регрессии для сгиба 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: [1x15 double]
               Lambda: [1x15 double]
              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

Выберите индекс силы регуляризации, которая балансирует разреженность переменной прогноза и низкий 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