Потеря для перекрестно проверенной секционированной регрессионой модели
возвращает потерю (среднюю квадратичную невязку), полученную перекрестной проверенной регрессионой моделью L
= kfoldLoss(CVMdl
)CVMdl
. Для каждой складки, kfoldLoss
вычисляет потери для наблюдений сгиба валидации с использованием модели, обученной наблюдениям сгиба обучения. CVMdl.X
и CVMdl.Y
содержат оба набора наблюдений.
возвращает потерю с дополнительными опциями, заданными одним или несколькими аргументами в виде имя-значение. Для примера можно задать пользовательскую функцию потерь.L
= kfoldLoss(CVMdl
,Name,Value
)
Найдите потери перекрестной валидации для регрессионного ансамбля carsmall
данные.
Загрузите carsmall
набор данных и выбор объема, лошадиной силы и веса транспортного средства в качестве предикторов.
load carsmall
X = [Displacement Horsepower Weight];
Обучите ансамбль регрессионных деревьев.
rens = fitrensemble(X,MPG);
Создайте перекрестно проверенный ансамбль из rens
и найдите k-складные потери перекрестной валидации.
rng(10,'twister') % For reproducibility cvrens = crossval(rens); L = kfoldLoss(cvrens)
L = 28.7114
Средняя квадратичная невязка (MSE) является мерой качества модели. Исследуйте MSE для каждой складки перекрестно проверенной регрессионой модели.
Загрузите carsmall
набор данных. Задайте предиктор X
и данные отклика Y
.
load carsmall
X = [Cylinders Displacement Horsepower Weight];
Y = MPG;
Обучите перекрестно проверенную модель дерева регрессии. По умолчанию программное обеспечение реализует 10-кратную перекрестную валидацию.
rng('default') % For reproducibility CVMdl = fitrtree(X,Y,'CrossVal','on');
Вычислите MSE для каждой складки. Визуализируйте распределение значений потерь с помощью прямоугольного графика. Заметьте, что ни одно из значений не является выбросами.
losses = kfoldLoss(CVMdl,'Mode','individual')
losses = 10×1
42.5072
20.3995
22.3737
34.4255
40.8005
60.2755
19.5562
9.2060
29.0788
16.3386
boxchart(losses)
kfoldLoss
Обучите перекрестно проверенную обобщенную аддитивную модель (GAM) с 10 складками. Затем используйте kfoldLoss
вычислить совокупные потери регрессии перекрестной валидации (средние квадратичные невязки). Используйте ошибки, чтобы определить оптимальное количество деревьев на предиктор (линейный термин для предиктора) и оптимальное количество деревьев на член взаимодействия.
Также можно найти оптимальные значения fitrgam
аргументы имя-значение при помощи bayesopt
функция. Для получения примера смотрите Оптимизацию Перекрестно Проверенной GAM Используя bayesopt.
Загрузите patients
набор данных.
load patients
Создайте таблицу, которая содержит переменные предиктора (Age
, Diastolic
, Smoker
, Weight
, Gender
, и SelfAssessedHealthStatus
) и переменной отклика (Systolic
).
tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);
Создайте перекрестную проверку GAM с помощью опции перекрестной проверки по умолчанию. Задайте 'CrossVal'
аргумент имя-значение как 'on'
. Кроме того, укажите, чтобы включить 5 членов взаимодействия.
rng('default') % For reproducibility CVMdl = fitrgam(tbl,'Systolic','CrossVal','on','Interactions',5);
Если вы задаете 'Mode'
как 'cumulative'
для kfoldLoss
, затем функция возвращает совокупные ошибки, которые являются средними ошибками для всех складок, полученных с использованием одинакового количества деревьев для каждой складки. Отображение количества деревьев для каждой складки.
CVMdl.NumTrainedPerFold
ans = struct with fields:
PredictorTrees: [300 300 300 300 300 300 300 300 300 300]
InteractionTrees: [76 100 100 100 100 42 100 100 59 100]
kfoldLoss
может вычислить совокупные ошибки, используя до 300 деревьев предикторов и 42 дерева взаимодействия.
Постройте график кумулятивных 10-кратных перекрестных средних квадратичных невязок. Задайте 'IncludeInteractions'
как false
исключить условия взаимодействия из расчетов.
L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false); figure plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)
Первый элемент L_noInteractions
- средняя ошибка по всем складкам, полученная с использованием только термина точка пересечения (константа). The (J+1
) первый элемент L_noInteractions
- средняя ошибка, полученная с помощью термина точки пересечения и первого J
деревья предикторов на линейный член. Построение графика совокупных потерь позволяет вам контролировать, как изменяется ошибка, когда количество деревьев предикторов в GAM увеличивается.
Найдите минимальную ошибку и количество деревьев предикторов, используемых для достижения минимальной ошибки.
[M,I] = min(L_noInteractions)
M = 28.0506
I = 6
GAM достигает минимальной ошибки, когда включает 5 деревьев предикторов.
Вычислите совокупную среднюю квадратичную невязку, используя как линейные условия, так и условия взаимодействия.
L = kfoldLoss(CVMdl,'Mode','cumulative'); figure plot(0:min(CVMdl.NumTrainedPerFold.InteractionTrees),L)
Первый элемент L
- средняя ошибка по всем складкам, полученная с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. The (J+1
) первый элемент L
- средняя ошибка, полученная с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и первого J
деревья взаимодействия на срок взаимодействия. График показывает, что ошибка увеличивается, когда добавляются условия взаимодействия.
Если вас устраивает ошибка, когда количество деревьев предикторов составляет 5, можно создать прогнозирующую модель, снова обучив одномерную GAM и задав 'NumTreesPerPredictor',5
без перекрестной проверки.
CVMdl
- Перекрестная проверенная секционированная регрессионая модельRegressionPartitionedModel
| объекта RegressionPartitionedEnsemble
| объекта RegressionPartitionedGAM
| объекта RegressionPartitionedSVM
объектПерекрестная проверенная секционированная регрессионая модель, заданная как RegressionPartitionedModel
, RegressionPartitionedEnsemble
, RegressionPartitionedGAM
, или RegressionPartitionedSVM
объект. Можно создать два способа:
Передайте обученную регрессионую модель, перечисленную в следующей таблице, в свою crossval
функция объекта.
Обучите регрессионую модель с помощью функции, перечисленной в следующей таблице, и задайте один из аргументов имя-значение перекрестной валидации для функции.
Регрессионная модель | Функция |
---|---|
RegressionEnsemble | fitrensemble |
RegressionGAM | fitrgam |
RegressionGP | fitrgp |
RegressionNeuralNetwork | fitrnet |
RegressionSVM | fitrsvm |
RegressionTree | fitrtree |
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
kfoldLoss(CVMdl,'Folds',[1 2 3 5])
задает использование первой, второй, третьей и пятой складок для вычисления средней квадратичной невязки, но исключает четвертую складку.'Folds'
- Складывайте индексы для использования1:CVMdl.KFold
(по умолчанию) | положительный целочисленный векторИспользуйте индексы сгиба, заданные как положительный целочисленный вектор. Элементы Folds
должен находиться в области значений от 1
на CVMdl.KFold
.
Программа использует только складки, указанные в Folds
.
Пример: 'Folds',[1 4 10]
Типы данных: single
| double
'IncludeInteractions'
- Флаг для включения условий взаимодействияtrue
| false
Флаг для включения условий взаимодействия модели, заданный как true
или false
. Этот аргумент действителен только для обобщенной аддитивной модели (GAM). То есть можно задать этот аргумент только тогда, когда CVMdl
является RegressionPartitionedGAM
.
Значение по умолчанию true
если модели в CVMdl
(CVMdl.Trained
) содержат условия взаимодействия. Значение должно быть false
если модели не содержат условий взаимодействия.
Пример: 'IncludeInteractions',false
Типы данных: logical
'LossFun'
- Функция потерь'mse'
(по умолчанию) | указатель на функциюФункция потерь, заданная как 'mse'
или указатель на функцию.
Задайте встроенную функцию 'mse'
. В этом случае функция потерь является средней квадратичной невязкой.
Задайте свою собственную функцию, используя обозначение указателя на функцию.
Предположим, что n является количеством наблюдений в обучающих данных (CVMdl.NumObservations
). Ваша функция должна иметь сигнатуру lossvalue =
, где:lossfun
(Y, Yfit, W)
Выходной аргумент lossvalue
является скаляром.
Вы задаете имя функции (lossfun
).
Y
является n -by-1 числовым вектором наблюдаемых откликов.
Yfit
является n -by-1 числовым вектором предсказанных откликов.
W
является n -by-1 числовым вектором весов наблюдений.
Задайте свою функцию, используя 'LossFun',
.@ lossfun
Типы данных: char
| string
| function_handle
'Mode'
- Уровень агрегации для выхода'average'
(по умолчанию) | 'individual'
| 'cumulative'
Уровень агрегации для выхода, заданный как 'average'
, 'individual'
, или 'cumulative'
.
Значение | Описание |
---|---|
'average' | Выход является скаляром средним по всем складкам. |
'individual' | Выход является вектором длины k содержащим одно значение на складку, где k количество складок. |
'cumulative' | Примечание Если вы хотите задать это значение,
|
Пример: 'Mode','individual'
L
- ПотеряПотеря, возвращенная в виде числа или числового вектора-столбца.
По умолчанию потеря является средней квадратичной невязкой между наблюдениями валидации-сгиба и предсказаниями, сделанными с помощью регрессионой модели, обученной наблюдениям обучения-сгиба.
Если Mode
является 'average'
, затем L
- средняя потеря по всем складкам.
Если Mode
является 'individual'
, затем L
является k числовым вектором-1, содержащим потери для каждой складки, где k количество складок.
Если Mode
является 'cumulative'
и CVMdl
является RegressionPartitionedEnsemble
, затем L
является min(CVMdl.NumTrainedPerFold)
-by-1 числовой вектор-столбец. Каждый элемент j
- это средняя потеря по всем складкам, которую функция получает с помощью ансамблей, обученных со слабыми учениками 1:j
.
Если Mode
является 'cumulative'
и CVMdl
является RegressionPartitionedGAM
, тогда выход значение зависит от IncludeInteractions
значение.
Если IncludeInteractions
является false
, затем L
является (1 + min(NumTrainedPerFold.PredictorTrees))
-by-1 числовой вектор-столбец. Первый элемент L
- средняя потеря по всем складкам, которая получается с использованием только термина точка пересечения (константа). The (j + 1)
первый элемент L
- средняя потеря, полученная с использованием термина точки пересечения и первого j
деревья предикторов на линейный член.
Если IncludeInteractions
является true
, затем L
является (1 + min(NumTrainedPerFold.InteractionTrees))
-by-1 числовой вектор-столбец. Первый элемент L
- средняя потеря по всем складкам, полученная с помощью термина точка пересечения (константа) и всех деревьев предикторов на линейный термин. The (j + 1)
первый элемент L
- средняя потеря, полученная с помощью термина точки пересечения, всех деревьев предикторов на линейный термин и первого j
деревья взаимодействия на срок взаимодействия.
Если вы хотите вычислить перекрестно проверенную потерю древовидной модели, можно избежать создания RegressionPartitionedModel
объект по вызову cvloss
. Создание перекрестно проверенного древовидного объекта может сэкономить вам время, если вы планируете рассмотреть его более одного раза.
kfoldPredict
| RegressionPartitionedEnsemble
| RegressionPartitionedGAM
| RegressionPartitionedModel
| RegressionPartitionedSVM
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.