Потеря регрессии для наблюдений, не используемых в обучении
Описание
возвращает перекрестную подтвержденную среднеквадратическую ошибку (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 (
потеря регрессии для сгиба i
J
)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
близко к коэффициентам, которые симулировали данные.
kfoldPredict
| loss
| RegressionLinear
| RegressionPartitionedLinear
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.