Регрессионые потери для наблюдений, не используемых в обучении
Описание
возвращает перекрестно проверенную среднюю квадратичную невязку (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-by-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-by- R матрица. L - регрессионные потери для складки (i, j)i модели с перекрестной проверкой, которая использует силу регуляризации j.
Для оценки L, kfoldLoss использует данные, которые создали CVMdl (см. X и Y).
Симулируйте 10000 наблюдений из этой модели
является разреженной матрицей 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.
Моделируйте данные как в Estimate k-Fold Mean Квадратичная Невязка.
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 Модели, что программное обеспечение обучалось с использованием набора обучающих данных.
Создайте анонимную функцию, которая измеряет потерю Huber ( = 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
Чтобы определить хорошую силу лассо-штрафа для линейной регрессионой модели, которая использует методом наименьших квадратов, реализуйте 5-кратную перекрестную валидацию.
Симулируйте 10000 наблюдений из этой модели
является разреженной матрицей 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 близки к коэффициентам, которые моделировали данные.
kfoldPredict | loss | RegressionLinear | RegressionPartitionedLinear
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.