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: [0.8888 0 0.6320 0.0406 0.5931 0.1205 0.5361 ... ]
                        Sigma: [0.3149 0 0.5033 0.4441 0.5255 0.4663 0.4987 ... ]
               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
    

    misclassification ошибка из выборки составляет приблизительно 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
    

    misclassification ошибка из выборки уменьшается приблизительно с 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'
        IsStandardDeviationFit: 0
    
    
      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
    

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

    свернуть все

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

    Объект модели регрессии

    МодельПолный объект модели регрессии
    Модель Gaussian process regression (GPR)RegressionGP (Если вы предоставляете пользовательский 'ActiveSet' в вызове fitrgp, затем вы не можете перекрестный подтвердить модель GPR.)
    Обобщенная аддитивная модель (GAM)RegressionGAM
    Модель нейронной сетиRegressionNeuralNetwork

    Объект модели классификации

    МодельПолный объект модели классификации
    Обобщенная аддитивная модельClassificationGAM
    k- соседняя модельClassificationKNN
    Наивная модель BayesClassificationNaiveBayes
    Модель нейронной сетиClassificationNeuralNetwork
    Машина опорных векторов для и бинарной классификации одного классаClassificationSVM

    Аргументы name-value

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Можно задать только одни из этих четырех аргументов name-value: '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 содержит полный объект.

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

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

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

    свернуть все

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

    Объект модели регрессии

    МодельМодель регрессии (Mdl)Перекрестная подтвержденная модель (CVMdl)
    Гауссова модель регрессии процессаRegressionGPRegressionPartitionedModel
    Обобщенная аддитивная модельRegressionGAMRegressionPartitionedGAM
    Модель нейронной сетиRegressionNeuralNetworkRegressionPartitionedModel

    Объект модели классификации

    МодельМодель классификации (Mdl)Перекрестная подтвержденная модель (CVMdl)
    Обобщенная аддитивная модельClassificationGAMClassificationPartitionedGAM
    k- соседняя модельClassificationKNNClassificationPartitionedModel
    Наивная модель BayesClassificationNaiveBayesClassificationPartitionedModel
    Модель нейронной сетиClassificationNeuralNetworkClassificationPartitionedModel
    Машина опорных векторов для и бинарной классификации одного классаClassificationSVMClassificationPartitionedModel

    Советы

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

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

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

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

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

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

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