Регрессионная потеря для наблюдений, не используемых в тренировках
Описание
возвращает среднеквадратичную ошибку (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' и встроенный дескриптор функции или имени функции потери.
В следующей таблице перечислены доступные функции потерь. Укажите его с помощью соответствующего вектора символа или скаляра строки. Также в таблице + b.
β - вектор p-коэффициентов.
x - это наблюдение из переменных p-предиктора.
b - скалярное смещение.
| Стоимость | Описание |
|---|---|
'epsiloninsensitive' | Эпсилон-нечувствительные потери: f (x) | − |
'mse' | MSE: (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'Уровень агрегирования потерь, указанный как разделенная запятыми пара, состоящая из 'Mode' и 'average' или 'individual'.
| Стоимость | Описание |
|---|---|
'average' | Возвращает потери, усредненные по всем складкам |
'individual' | Возвращает потери для каждого раза |
Пример: 'Mode','individual'
L - Перекрестно подтвержденные регрессионные потериПотери перекрестной регрессии, возвращаемые в виде числового скаляра, вектора или матрицы. Толкование L зависит от LossFun.
Давайте R be число регуляризаций сильных сторон является перекрестно проверенными моделями (хранятся в numel(CVMdl.Trained{1}.Lambda)) и F - количество складок (хранящихся в CVMdl.KFold).
Если Mode является 'average', то L является 1-by-R вектор. L( средняя потеря регрессии по всем складкам перекрестно проверенной модели, которая использует силу регуляризации j)j.
В противном случае L является Fоколо-R матрица. L( является потерей регрессии для складки i,j)i перекрестной проверенной модели, в которой используется сила регуляризации j.
Оценить L, kfoldLoss использует созданные данные CVMdl (см. X и Y).
Моделирование 10000 наблюдений из этой модели
2x200 + e.
редкая матрица 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' аргумент пары имя-значение.
Оцените среднее значение MSE тестовой выборки.
mse = kfoldLoss(CVMdl)
mse = 0.1735
Кроме того, можно получить кратные MSE, указав пару имя-значение. '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);Оцените среднюю потерю Huber по складкам. Также получите потери Huber для каждой складки.
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
Чтобы определить хорошую силу лассо-штрафа для модели линейной регрессии, использующей наименьшие квадраты, реализуйте пятикратную перекрестную проверку.
Моделирование 10000 наблюдений из этой модели
2x200 + e.
редкая матрица 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 реализует пятикратную перекрестную проверку, 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 близки к коэффициентам, моделирующим данные.
kfoldPredict | loss | RegressionLinear | RegressionPartitionedLinear
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.