Потеря регрессии для наблюдений, не используемых в обучении
Описание
возвращает перекрестную подтвержденную среднеквадратическую ошибку (MSE), полученную перекрестным подтвержденным, моделью L = kfoldLoss(CVMdl)CVMdl линейной регрессии. Таким образом, для каждого сгиба, kfoldLoss оценивает потерю регрессии для наблюдений, что она протягивает, когда она обучает использование всех других наблюдений.
L содержит потерю регрессии для каждой силы регуляризации в моделях линейной регрессии, которые составляют CVMdl.
дополнительные опции использования заданы одним или несколькими L = kfoldLoss(CVMdl,Name,Value)Name,Value парные аргументы. Например, укажите который сгибы использовать в вычислении потерь или задать функцию потерь регрессии.
CVMdl — Перекрестный подтвержденный, модель линейной регрессииRegressionPartitionedLinear объект моделиПерекрестный подтвержденный, модель линейной регрессии, заданная как RegressionPartitionedLinear объект модели. Можно создать RegressionPartitionedLinear модель с помощью fitrlinear и определение любого того перекрестной проверки, аргументов пары "имя-значение", например, CrossVal.
Чтобы получить оценки, kfoldLoss применяется, те же данные раньше перекрестный подтверждали модель линейной регрессии (X и Y).
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Folds' — Сверните индексы, чтобы использовать в прогнозе ответа1:CVMdl.KFold (значение по умолчанию) | числовой вектор положительных целых чиселСверните индексы, чтобы использовать в прогнозе ответа, заданном как разделенная запятой пара, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должен лежать в диапазоне от 1 через CVMdl.KFold.
Пример: 'Folds',[1 4 10]
Типы данных: single | double
'LossFun' — Функция потерь'mse' (значение по умолчанию) | 'epsiloninsensitive' | указатель на функциюФункция потерь, заданная как разделенная запятой пара, состоящая из 'LossFun' и встроенное имя функции потерь или указатель на функцию.
В следующей таблице перечислены доступные функции потерь. Задайте тот с помощью его соответствующего вектора символов или представьте скаляр в виде строки. Кроме того, в таблице,
β является вектором коэффициентов p.
x является наблюдением от переменных предикторов p.
b является скалярным смещением.
| Значение | Описание |
|---|---|
'epsiloninsensitive' | Нечувствительная к эпсилону потеря: |
'mse' | MSE: |
'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'Уровень агрегации потерь, заданный как разделенная запятой пара, состоящая из 'Mode' и 'average' или 'individual'.
| Значение | Описание |
|---|---|
'average' | Возвращает потери, усредненные по всем сгибам |
'individual' | Возвращает потери для каждого сгиба |
Пример: 'Mode','individual'
L — Перекрестные подтвержденные потери регрессииПерекрестные подтвержденные потери регрессии, возвращенные в виде числа, вектора или матрицы. Интерпретация 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 наблюдений из этой модели
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), то есть,
где
невязка для наблюдения 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 наблюдений из этой модели
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 логарифмически распределенных сильных мест регуляризации от через .
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 близко к коэффициентам, которые симулировали данные.
RegressionLinear | RegressionPartitionedLinear | kfoldPredict | loss
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.