Перекрестная валидация модели машинного обучения
устанавливает дополнительную опцию перекрестной проверки. Можно задать только один аргумент имя-значение. Для примера можно задать количество складок или пропорцию отсчета.CVMdl
= crossval(Mdl
,Name,Value
)
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere rng(1); % For reproducibility
Обучите классификатор машины опорных векторов (SVM). Стандартизируйте данные предиктора и задайте порядок классов.
SVMModel = fitcsvm(X,Y,'Standardize',true,'ClassNames',{'b','g'});
SVMModel
является обученным ClassificationSVM
классификатор. 'b'
- отрицательный класс и 'g'
- положительный класс.
Перекрестная проверка классификатора с помощью 10-кратной перекрестной проверки.
CVSVMModel = crossval(SVMModel)
CVSVMModel = ClassificationPartitionedModel CrossValidatedModel: 'SVM' PredictorNames: {1x34 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods
CVSVMModel
является ClassificationPartitionedModel
перекрестно проверенный классификатор. Во время перекрестной проверки программное обеспечение завершает следующие шаги:
Случайным образом разбейте данные на 10 наборов равного размера.
Обучите классификатор SVM на девяти аппаратах.
Повторите шаги 1 и 2 k = 10 раз. Программное обеспечение каждый раз оставляет один раздел и обучает на других девяти перегородках.
Объедините статистику обобщения для каждой складки.
Отобразите первую модель в CVSVMModel.Trained
.
FirstModel = CVSVMModel.Trained{1}
FirstModel = CompactClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' Alpha: [78x1 double] Bias: -0.2209 KernelParameters: [1x1 struct] Mu: [1x34 double] Sigma: [1x34 double] SupportVectors: [78x34 double] SupportVectorLabels: [78x1 double] Properties, Methods
FirstModel
является первым из 10 обученных классификаторов. Это CompactClassificationSVM
классификатор.
Можно оценить ошибку обобщения, передав CVSVMModel
на kfoldLoss
.
Задайте пропорцию отсчета для перекрестной валидации. По умолчанию crossval
использует 10-кратную перекрестную валидацию для перекрестной валидации наивного классификатора Байеса. Однако у вас есть несколько другие опции перекрестной проверки. Для примера можно задать разное количество складок или пропорцию отсчета.
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere
Удалите первые два предиктора устойчивости.
X = X(:,3:end); rng('default'); % For reproducibility
Обучите наивный классификатор Байеса с помощью предикторов X
и метки классов Y
. Рекомендуемая практика состоит в том, чтобы задать имена классов. 'b'
- отрицательный класс и 'g'
- положительный класс. fitcnb
принимает, что каждый предиктор условно и нормально распределен.
Mdl = fitcnb(X,Y,'ClassNames',{'b','g'});
Mdl
является обученным ClassificationNaiveBayes
классификатор.
Перекрестная проверка классификатора путем определения 30% -ной выборки удержания.
CVMdl = crossval(Mdl,'Holdout',0.3)
CVMdl = ClassificationPartitionedModel CrossValidatedModel: 'NaiveBayes' PredictorNames: {1x32 cell} ResponseName: 'Y' NumObservations: 351 KFold: 1 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods
CVMdl
является ClassificationPartitionedModel
перекрестно проверенный, наивный классификатор Байеса.
Отображение свойств классификатора, обученного с использованием 70% данных.
TrainedModel = CVMdl.Trained{1}
TrainedModel = CompactClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
TrainedModel
является CompactClassificationNaiveBayes
классификатор.
Оцените ошибку обобщения путем передачи CVMdl
на kfoldloss
.
kfoldLoss(CVMdl)
ans = 0.2095
Ошибка неправильной классификации вне выборки составляет приблизительно 21%.
Уменьшите ошибку обобщения, выбрав пять наиболее важных предикторов.
idx = fscmrmr(X,Y); Xnew = X(:,idx(1:5));
Обучите наивный классификатор Байеса для нового предиктора.
Mdlnew = fitcnb(Xnew,Y,'ClassNames',{'b','g'});
Перекрестная проверка нового классификатора путем определения 30% -ной выборки и оценка ошибки обобщения.
CVMdlnew = crossval(Mdlnew,'Holdout',0.3);
kfoldLoss(CVMdlnew)
ans = 0.1429
Ошибка неправильной классификации вне выборки уменьшается с приблизительно 21% до приблизительно 14%.
crossval
Обучите регрессионную обобщенную аддитивную модель (GAM) при помощи fitrgam
, и создать перекрестную проверенную GAM с помощью crossval
и опция удержания. Затем используйте kfoldPredict
предсказать ответы на наблюдения с сворачиванием с использованием модели, обученной на наблюдениях с сворачиванием.
Загрузите patients
набор данных.
load patients
Создайте таблицу, которая содержит переменные предиктора (Age
, Diastolic
, Smoker
, Weight
, Gender
, SelfAssessedHealthStatus
) и переменной отклика (Systolic
).
tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);
Обучите GAM, который содержит линейные условия для предикторов.
Mdl = fitrgam(tbl,'Systolic');
Mdl
является RegressionGAM
объект модели.
Перекрестная валидация модели путем определения 30% -ной выборки удержания.
rng('default') % For reproducibility CVMdl = crossval(Mdl,'Holdout',0.3)
CVMdl = RegressionPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {1x6 cell} CategoricalPredictors: [3 5 6] ResponseName: 'Systolic' NumObservations: 100 KFold: 1 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ResponseTransform: 'none' Properties, Methods
The crossval
функция создает RegressionPartitionedGAM
объект модели CVMdl
с опцией holdout. Во время перекрестной проверки программное обеспечение завершает следующие шаги:
Случайным образом выберите и зарезервируйте 30% данных в качестве данных валидации и обучите модель с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенного объекта модели RegressionPartitionedGAM
.
Вы можете выбрать другую настройку перекрестной проверки с помощью 'CrossVal'
, 'CVPartition'
, 'KFold'
, или 'Leaveout'
аргумент имя-значение.
Спрогнозируйте ответы на наблюдения с сворачиванием при помощи kfoldPredict
. Функция предсказывает ответы на наблюдения с сворачиванием при помощи модели, обученной на наблюдениях с сворачиванием. Функция присваивает NaN
к обучающим-кратным наблюдениям.
yFit = kfoldPredict(CVMdl);
Найдите индексы наблюдения с сворачиванием и составьте таблицу, содержащую индекс наблюдения, наблюдаемые значения отклика и предсказанные значения отклика. Отображение первых восьми строк таблицы.
idx = find(~isnan(yFit)); t = table(idx,tbl.Systolic(idx),yFit(idx), ... 'VariableNames',{'Obseraction Index','Observed Value','Predicted Value'}); head(t)
ans=8×3 table
Obseraction Index Observed Value Predicted Value
_________________ ______________ _______________
1 124 130.22
6 121 124.38
7 130 125.26
12 115 117.05
20 125 121.82
22 123 116.99
23 114 107
24 128 122.52
Вычислите регрессионную ошибку (среднюю квадратичную невязку) для наблюдений с разбиением на валидации.
L = kfoldLoss(CVMdl)
L = 43.8715
Mdl
- Модель машинного обученияМодель машинного обучения, заданная как объект модели полной регрессии или классификации, как представлено в следующих таблицах поддерживаемых моделей.
Объект модели
Модель | Объект модели полной регрессии |
---|---|
Обобщенная аддитивная модель | RegressionGAM |
Модель нейронной сети | RegressionNeuralNetwork |
Объект модели
Модель | Объект модели полной классификации |
---|---|
Обобщенная аддитивная модель | ClassificationGAM |
k - ближайшая соседняя модель | ClassificationKNN |
Наивная модель Байеса | ClassificationNaiveBayes |
Модель нейронной сети | ClassificationNeuralNetwork |
Поддерживайте векторную машину для одноклассовой и двоичной классификации | ClassificationSVM |
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
crossval(Mdl,'KFold',3)
задает использование трех складок в модели с перекрестной проверкой.'CVPartition'
- Раздел перекрестной проверки[]
(по умолчанию) | cvpartition
Объект разделаРаздел перекрестной проверки, заданный как cvpartition
объект раздела, созданный cvpartition
. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.
Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp
.
'Holdout'
- Доля данных для валидации отключенияДоля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, затем программное обеспечение завершает следующие шаги:
Случайный выбор и резервирование p*100
% данных в качестве данных валидации и train модели с использованием остальных данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестно проверенной модели. Если Mdl
не имеет соответствующего компактного объекта, тогда Trained
содержит полный объект.
Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
Пример: 'Holdout',0.1
Типы данных: double
| single
'KFold'
- Количество складок10
(по умолчанию) | положительное целое значение, больше 1Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k
, затем программное обеспечение завершает следующие шаги:
Случайным образом разделите данные на k
наборы.
Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k
- 1 комплект.
Сохраните k
компактные, обученные модели в k
-by-1 вектор камеры в Trained
свойство перекрестно проверенной модели. Если Mdl
не имеет соответствующего компактного объекта, тогда Trained
содержит полный объект.
Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
Пример: 'KFold',5
Типы данных: single
| double
'Leaveout'
- Оставьте один из флагов перекрестной проверки'off'
(по умолчанию) | 'on'
Выходной флаг перекрестной проверки, заданный как 'on'
или 'off'
. Если вы задаете 'Leaveout','on'
, затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations
свойство модели), программное обеспечение завершает следующие шаги:
Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.
Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained
свойство перекрестно проверенной модели. Если Mdl
не имеет соответствующего компактного объекта, тогда Trained
содержит полный объект.
Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition'
, 'Holdout'
, 'KFold'
, или 'Leaveout'
.
Пример: 'Leaveout','on'
CVMdl
- Перекрестная проверенная модель машинного обученияПерекрестная проверенная модель машинного обучения, возвращенная как один из перекрестно проверенных (секционированных) объектов модели в следующих таблицах, в зависимости от модели входа Mdl
.
Объект модели
Модель | Регрессионая модель (Mdl ) | Перекрестно-проверенная модель (CompactMdl ) |
---|---|---|
Обобщенная аддитивная модель | RegressionGAM | RegressionPartitionedGAM |
Модель нейронной сети | RegressionNeuralNetwork | RegressionPartitionedModel |
Объект модели
Модель | Классификационная модель (Mdl ) | Перекрестно-проверенная модель (CompactMdl ) |
---|---|---|
Обобщенная аддитивная модель | ClassificationGAM | ClassificationPartitionedGAM |
k - ближайшая соседняя модель | ClassificationKNN | ClassificationPartitionedModel |
Наивная модель Байеса | ClassificationNaiveBayes | ClassificationPartitionedModel |
Модель нейронной сети | ClassificationNeuralNetwork | ClassificationPartitionedModel |
Поддерживайте векторную машину для одноклассовой и двоичной классификации | ClassificationSVM | ClassificationPartitionedModel |
Оцените прогнозирующую эффективность Mdl
на перекрестно проверенных данных при помощи функций kfold и свойств CVMdl
, таких как kfoldPredict
и kfoldLoss
.
Верните секционированный классификатор с стратифицированным разбиением с помощью аргумента имя-значение 'KFold'
или 'Holdout'
.
Создайте cvpartition
cvp объекта
использование cvp =
cvpartition
(n,'KFold',k)
. Верните секционированный классификатор с нонратифицированным разбиением с помощью аргумента имя-значение 'CVPartition',cvp
.
Вместо обучения модели и последующей перекрестной проверки ее можно создать перекрестную проверенную модель непосредственно с помощью функции аппроксимации и определения одного из следующих аргументов в виде имя-значение: 'CrossVal'
, 'CVPartition'
, 'Holdout'
, 'Leaveout'
, или 'KFold'
.
Указания и ограничения по применению:
Эта функция поддерживает ClassificationKNN
и ClassificationSVM
объекты, оснащенные входными параметрами массива GPU.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.