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