crossval

Перекрестный подтвердите наивный классификатор Байеса

Описание

пример

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

пример

CVMdl = crossval(Mdl,Name,Value) возвращает разделенный наивный классификатор Байеса с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Например, можно задать количество сгибов или демонстрационной пропорции затяжки.

Примеры

свернуть все

Создайте перекрестную подтвержденную модель наивного классификатора Байеса для ирисового набора данных Фишера. Затем оцените эффективность классификации путем оценки ошибки обобщения модели.

Загрузите fisheriris набор данных. Создайте X как числовая матрица, которая содержит четыре лепестковых измерения для 150 ирисовых диафрагм. Создайте Y как массив ячеек из символьных векторов, который содержит соответствующие ирисовые разновидности.

load fisheriris
X = meas;
Y = species;
rng('default') % for reproducibility

Обучите наивный классификатор Байеса с помощью предикторов X и класс маркирует Y. Методические рекомендации должны задать имена классов. fitcnb принимает, что каждый предиктор независим и соответствует предикторам с помощью нормальных распределений по умолчанию.

Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'});

Mdl обученный ClassificationNaiveBayes классификатор.

Перекрестный подтвердите классификатор с помощью 10-кратной перекрестной проверки.

CVMdl = crossval(Mdl)
CVMdl = 
  ClassificationPartitionedModel
    CrossValidatedModel: 'NaiveBayes'
         PredictorNames: {'x1'  'x2'  'x3'  'x4'}
           ResponseName: 'Y'
        NumObservations: 150
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'setosa'  'versicolor'  'virginica'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdl ClassificationPartitionedModel перекрестный подтвержденный, наивный классификатор Байеса.

Возвратите первую модель 10 обученных классификаторов.

FirstModel = CVMdl.Trained{1}
FirstModel = 
  CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3x4 cell}


  Properties, Methods

FirstModel CompactClassificationNaiveBayes модель.

Оцените перекрестную подтвержденную потерю классификатора. Можно оценить ошибку обобщения путем передачи CVMdl к kfoldLoss.

CVMdlloss = kfoldLoss(CVMdl)
CVMdlloss = 0.0467

Перекрестная подтвержденная потеря составляет приблизительно 5%. Можно ожидать Mdl иметь подобный коэффициент ошибок.

Задайте демонстрационную пропорцию затяжки для перекрестной проверки. По умолчанию, crossval использует 10-кратную перекрестную проверку, чтобы перекрестный подтвердить наивный классификатор Байеса. Однако у вас есть несколько других опций для перекрестной проверки. Например, можно задать различное количество сгибов или демонстрационной пропорции затяжки.

Загрузите ionosphere набор данных. Удалите первые два предиктора для устойчивости.

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

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

свернуть все

Полный, обученный наивный классификатор Байеса в виде ClassificationNaiveBayes модель, обученная fitcnb.

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

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

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

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

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold, или Leaveout.

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

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

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

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

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold, или Leaveout.

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

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

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

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

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

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

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

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold, или Leaveout.

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

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

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

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

  2. Сохраните n компактные, обученные модели в ячейках n-by-1 вектор ячейки в Trained свойство перекрестной подтвержденной модели.

Чтобы создать перекрестную подтвержденную модель, можно использовать один из этих четырех аргументов пары "имя-значение" только: CVPartition, Holdout, KFold, или Leaveout.

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

Советы

  • Оцените прогнозирующую эффективность Mdl на перекрестных подтвержденных данных с помощью 'KFold' аргумент пары "имя-значение" и свойства CVMdl, такой как kfoldLoss.

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

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

Альтернативы

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

Введенный в R2014b