crossval

Перекрестная валидация модели машинного обучения

    Описание

    пример

    CVMdl = crossval(Mdl) возвращает перекрестно проверенную (секционированную) модель машинного обучения (CVMdl) из обученной модели (Mdl). По умолчанию, crossval использует 10-кратную перекрестную валидацию обучающих данных.

    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 перекрестно проверенный классификатор. Во время перекрестной проверки программное обеспечение завершает следующие шаги:

    1. Случайным образом разбейте данные на 10 наборов равного размера.

    2. Обучите классификатор SVM на девяти аппаратах.

    3. Повторите шаги 1 и 2 k = 10 раз. Программное обеспечение каждый раз оставляет один раздел и обучает на других девяти перегородках.

    4. Объедините статистику обобщения для каждой складки.

    Отобразите первую модель в 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%.

    Обучите регрессионную обобщенную аддитивную модель (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. Во время перекрестной проверки программное обеспечение завершает следующие шаги:

    1. Случайным образом выберите и зарезервируйте 30% данных в качестве данных валидации и обучите модель с использованием остальных данных.

    2. Сохраните компактную, обученную модель в 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
    

    Входные параметры

    свернуть все

    Модель машинного обучения, заданная как объект модели полной регрессии или классификации, как представлено в следующих таблицах поддерживаемых моделей.

    Объект модели

    МодельОбъект модели полной регрессии
    Обобщенная аддитивная модельRegressionGAM
    Модель нейронной сетиRegressionNeuralNetwork

    Объект модели

    МодельОбъект модели полной классификации
    Обобщенная аддитивная модельClassificationGAM
    k - ближайшая соседняя модельClassificationKNN
    Наивная модель БайесаClassificationNaiveBayes
    Модель нейронной сетиClassificationNeuralNetwork
    Поддерживайте векторную машину для одноклассовой и двоичной классификацииClassificationSVM

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: crossval(Mdl,'KFold',3) задает использование трех складок в модели с перекрестной проверкой.

    Раздел перекрестной проверки, заданный как cvpartition объект раздела, созданный cvpartition. Объект раздела задает тип перекрестной валидации и индексацию для наборов обучения и валидации.

    Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Пример: Предположим, что вы создаете случайный разбиение для 5-кратной перекрестной валидации при 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5). Затем можно задать перекрестно проверенную модель при помощи 'CVPartition',cvp.

    Доля данных, используемых для валидации удержания, заданная в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p, затем программное обеспечение завершает следующие шаги:

    1. Случайный выбор и резервирование p*100% данных в качестве данных валидации и train модели с использованием остальных данных.

    2. Сохраните компактную, обученную модель в Trained свойство перекрестно проверенной модели. Если Mdl не имеет соответствующего компактного объекта, тогда Trained содержит полный объект.

    Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Пример: 'Holdout',0.1

    Типы данных: double | single

    Количество складок для использования в перекрестно проверенной модели, заданное как положительное целое значение, больше 1. Если вы задаете 'KFold',k, затем программное обеспечение завершает следующие шаги:

    1. Случайным образом разделите данные на k наборы.

    2. Для каждого набора зарезервируйте набор как данные валидации и обучите модель, используя другой k - 1 комплект.

    3. Сохраните k компактные, обученные модели в k-by-1 вектор камеры в Trained свойство перекрестно проверенной модели. Если Mdl не имеет соответствующего компактного объекта, тогда Trained содержит полный объект.

    Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Пример: 'KFold',5

    Типы данных: single | double

    Выходной флаг перекрестной проверки, заданный как 'on' или 'off'. Если вы задаете 'Leaveout','on', затем для каждого из n наблюдений (где n - количество наблюдений, исключая недостающие наблюдения, заданное в NumObservations свойство модели), программное обеспечение завершает следующие шаги:

    1. Зарезервируйте одно наблюдение как данные валидации и обучите модель с помощью другого n - 1 наблюдений.

    2. Сохраните n компактные обученные модели в векторе камеры n-на-1 в Trained свойство перекрестно проверенной модели. Если Mdl не имеет соответствующего компактного объекта, тогда Trained содержит полный объект.

    Можно задать только один из следующих четырех аргументов в виде имя-значение: 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.

    Пример: 'Leaveout','on'

    Выходные аргументы

    свернуть все

    Перекрестная проверенная модель машинного обучения, возвращенная как один из перекрестно проверенных (секционированных) объектов модели в следующих таблицах, в зависимости от модели входа Mdl.

    Объект модели

    МодельРегрессионая модель (Mdl)Перекрестно-проверенная модель (CompactMdl)
    Обобщенная аддитивная модельRegressionGAMRegressionPartitionedGAM
    Модель нейронной сетиRegressionNeuralNetworkRegressionPartitionedModel

    Объект модели

    МодельКлассификационная модель (Mdl)Перекрестно-проверенная модель (CompactMdl)
    Обобщенная аддитивная модельClassificationGAMClassificationPartitionedGAM
    k - ближайшая соседняя модельClassificationKNNClassificationPartitionedModel
    Наивная модель БайесаClassificationNaiveBayesClassificationPartitionedModel
    Модель нейронной сетиClassificationNeuralNetworkClassificationPartitionedModel
    Поддерживайте векторную машину для одноклассовой и двоичной классификацииClassificationSVMClassificationPartitionedModel

    Совет

    • Оцените прогнозирующую эффективность Mdl на перекрестно проверенных данных при помощи функций kfold и свойств CVMdl, таких как kfoldPredict и kfoldLoss.

    • Верните секционированный классификатор с стратифицированным разбиением с помощью аргумента имя-значение 'KFold' или 'Holdout'.

    • Создайте cvpartition cvp объекта использование cvp = cvpartition(n,'KFold',k). Верните секционированный классификатор с нонратифицированным разбиением с помощью аргумента имя-значение 'CVPartition',cvp.

    Альтернативная функциональность

    Вместо обучения модели и последующей перекрестной проверки ее можно создать перекрестную проверенную модель непосредственно с помощью функции аппроксимации и определения одного из следующих аргументов в виде имя-значение: 'CrossVal', 'CVPartition', 'Holdout', 'Leaveout', или 'KFold'.

    Расширенные возможности

    Введенный в R2012a