Регрессионые потери для наблюдений, не используемых в обучении
Описание
возвращает перекрестно проверенную среднюю квадратичную невязку (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.