exponenta event banner

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
    
    

    crossval функция создает RegressionPartitionedGAM объект модели CVMdl с опцией удержания. Во время перекрестной проверки программное обеспечение выполняет следующие действия:

    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'.

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

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

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

    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-by-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). Возврат секционированного классификатора с нестратифицированным секционированием с помощью аргумента name-value 'CVPartition',cvp.

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

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

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

    Представлен в R2012a